--- a/java.api.common/src/org/netbeans/modules/java/api/common/project/BaseActionProvider.java +++ a/java.api.common/src/org/netbeans/modules/java/api/common/project/BaseActionProvider.java @@ -71,6 +71,7 @@ import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; +import java.util.concurrent.Callable; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import java.util.logging.Level; @@ -99,6 +100,7 @@ import org.netbeans.api.java.source.ui.ScanDialog; import org.netbeans.api.project.FileOwnerQuery; import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectActions; import org.netbeans.api.project.ProjectInformation; import org.netbeans.api.project.ProjectManager; import org.netbeans.api.project.ProjectUtils; @@ -114,7 +116,7 @@ import org.netbeans.modules.java.api.common.util.CommonProjectUtils; import org.netbeans.spi.java.classpath.ClassPathProvider; import org.netbeans.spi.java.classpath.support.ClassPathSupport; -import org.netbeans.spi.project.ActionProvider; +import org.netbeans.spi.project.ActionProvider2; import org.netbeans.spi.project.ProjectConfiguration; import org.netbeans.spi.project.SingleMethod; import org.netbeans.spi.project.support.ant.AntProjectHelper; @@ -150,7 +152,7 @@ * * @since org.netbeans.modules.java.api.common/1 1.20 */ -public abstract class BaseActionProvider implements ActionProvider { +public abstract class BaseActionProvider implements ActionProvider2 { public static final String AUTOMATIC_BUILD_TAG = ".netbeans_automatic_build"; private static final Logger LOG = Logger.getLogger(BaseActionProvider.class.getName()); @@ -381,26 +383,54 @@ return project; } - @Override - public void invokeAction( final String command, final Lookup context ) throws IllegalArgumentException { - if (COMMAND_DELETE.equals(command)) { - DefaultProjectOperations.performDefaultDeleteOperation(project); - return ; + @Override public Callable prepare(final String command, final Lookup context) { + if (ProjectActions.COMMAND_DELETE.equals(command)) { + return new Callable() { + @Override public Boolean call() throws Exception { + DefaultProjectOperations.performDefaultDeleteOperation(project); + return true; + } + }; } - if (COMMAND_COPY.equals(command)) { - DefaultProjectOperations.performDefaultCopyOperation(project); - return ; + if (ProjectActions.COMMAND_COPY.equals(command)) { + return new Callable() { + @Override public Boolean call() throws Exception { + DefaultProjectOperations.performDefaultCopyOperation(project); + return true; + } + }; } - if (COMMAND_MOVE.equals(command)) { - DefaultProjectOperations.performDefaultMoveOperation(project); - return ; + if (ProjectActions.COMMAND_MOVE.equals(command)) { + return new Callable() { + @Override public Boolean call() throws Exception { + DefaultProjectOperations.performDefaultMoveOperation(project); + return true; + } + }; } - if (COMMAND_RENAME.equals(command)) { - DefaultProjectOperations.performDefaultRenameOperation(project, null); - return ; + if (ProjectActions.COMMAND_RENAME.equals(command)) { + return new Callable() { + @Override public Boolean call() throws Exception { + DefaultProjectOperations.performDefaultRenameOperation(project, null); + return true; + } + }; + } + + FileObject buildXml = findBuildXml(); + if (buildXml == null || !buildXml.isValid()) { + return null; + } + if (Arrays.asList(getActionsDisabledForQuickRun()).contains(command) + && isCompileOnSaveEnabled() + && !allowAntBuild()) { + return null; + } + if (!isActionEnabled(command, context)) { + return null; } final boolean isCompileOnSaveEnabled = isCompileOnSaveEnabled(); @@ -433,7 +463,7 @@ return; } if (isCompileOnSaveEnabled) { - if (COMMAND_BUILD.equals(command) && !allowAntBuild()) { + if (ProjectActions.COMMAND_BUILD.equals(command) && !allowAntBuild()) { showBuildActionWarning(context); return ; } @@ -465,6 +495,7 @@ execProperties.put("applet.url", url); execProperties.put(JavaRunner.PROP_EXECUTE_FILE, file); prepareSystemProperties(execProperties, false); + // XXX block JavaRunner.execute(targetNames[0], execProperties); } } catch (IOException ex) { @@ -472,7 +503,7 @@ } return; } - if (!isServerExecution() && (COMMAND_RUN.equals(command) || COMMAND_DEBUG.equals(command) || COMMAND_DEBUG_STEP_INTO.equals(command))) { + if (!isServerExecution() && (ProjectActions.COMMAND_RUN.equals(command) || ProjectActions.COMMAND_DEBUG.equals(command) || ProjectActions.COMMAND_DEBUG_STEP_INTO.equals(command))) { prepareSystemProperties(execProperties, false); bypassAntBuildScript(command, context, execProperties); return ; @@ -480,9 +511,9 @@ // for example RUN_SINGLE Java file with Servlet must be run on server and not locally boolean serverExecution = p.getProperty(PROPERTY_RUN_SINGLE_ON_SERVER) != null; p.remove(PROPERTY_RUN_SINGLE_ON_SERVER); - if (!serverExecution && (COMMAND_RUN_SINGLE.equals(command) || COMMAND_DEBUG_SINGLE.equals(command))) { + if (!serverExecution && (ProjectActions.COMMAND_RUN_SINGLE.equals(command) || ProjectActions.COMMAND_DEBUG_SINGLE.equals(command))) { prepareSystemProperties(execProperties, false); - if (COMMAND_RUN_SINGLE.equals(command)) { + if (ProjectActions.COMMAND_RUN_SINGLE.equals(command)) { execProperties.put(JavaRunner.PROP_CLASSNAME, p.getProperty("run.class")); } else { execProperties.put(JavaRunner.PROP_CLASSNAME, p.getProperty("debug.class")); @@ -490,14 +521,15 @@ bypassAntBuildScript(command, context, execProperties); return; } - if (COMMAND_TEST_SINGLE.equals(command) || COMMAND_DEBUG_TEST_SINGLE.equals(command)) { + if (ProjectActions.COMMAND_TEST_SINGLE.equals(command) || ProjectActions.COMMAND_DEBUG_TEST_SINGLE.equals(command)) { FileObject[] files = findTestSources(context, true); try { prepareSystemProperties(execProperties, true); execProperties.put(JavaRunner.PROP_EXECUTE_FILE, files[0]); execProperties.put("tmp.dir", updateHelper.getAntProjectHelper().resolvePath(evaluator.getProperty(ProjectProperties.BUILD_DIR))); //NOI18N updateJavaRunnerClasspath(command, execProperties); - JavaRunner.execute(COMMAND_TEST_SINGLE.equals(command) ? JavaRunner.QUICK_TEST : JavaRunner.QUICK_TEST_DEBUG, execProperties); + // XXX block + JavaRunner.execute(ProjectActions.COMMAND_TEST_SINGLE.equals(command) ? JavaRunner.QUICK_TEST : JavaRunner.QUICK_TEST_DEBUG, execProperties); } catch (IOException ex) { Exceptions.printStackTrace(ex); } @@ -510,6 +542,7 @@ execProperties.put(JavaRunner.PROP_EXECUTE_FILE, methodSpec.getFile()); execProperties.put("tmp.dir",updateHelper.getAntProjectHelper().resolvePath(evaluator.getProperty(ProjectProperties.BUILD_DIR))); //NOI18N updateJavaRunnerClasspath(command, execProperties); + // XXX block JavaRunner.execute(command.equals(SingleMethod.COMMAND_RUN_SINGLE_METHOD) ? JavaRunner.QUICK_TEST : JavaRunner.QUICK_TEST_DEBUG, execProperties); } catch (IOException ex) { @@ -547,6 +580,7 @@ cb2.antTargetInvocationStarted(command, context); } try { + // XXX block ActionUtils.runTarget(buildFo, targetNames, p).addTaskListener(new TaskListener() { @Override public void taskFinished(Task task) { @@ -584,15 +618,15 @@ private List runJvmargsIde() { StartupExtender.StartMode mode; - if (command.equals(COMMAND_RUN) || command.equals(COMMAND_RUN_SINGLE)) { + if (command.equals(ProjectActions.COMMAND_RUN) || command.equals(ProjectActions.COMMAND_RUN_SINGLE)) { mode = StartupExtender.StartMode.NORMAL; - } else if (command.equals(COMMAND_DEBUG) || command.equals(COMMAND_DEBUG_SINGLE) || command.equals(COMMAND_DEBUG_STEP_INTO)) { + } else if (command.equals(ProjectActions.COMMAND_DEBUG) || command.equals(ProjectActions.COMMAND_DEBUG_SINGLE) || command.equals(ProjectActions.COMMAND_DEBUG_STEP_INTO)) { mode = StartupExtender.StartMode.DEBUG; } else if (command.equals("profile")) { mode = StartupExtender.StartMode.PROFILE; - } else if (command.equals(COMMAND_TEST) || command.equals(COMMAND_TEST_SINGLE)) { + } else if (command.equals(ProjectActions.COMMAND_TEST) || command.equals(ProjectActions.COMMAND_TEST_SINGLE)) { mode = StartupExtender.StartMode.TEST_NORMAL; - } else if (command.equals(COMMAND_DEBUG_TEST_SINGLE)) { + } else if (command.equals(ProjectActions.COMMAND_DEBUG_TEST_SINGLE)) { mode = StartupExtender.StartMode.TEST_DEBUG; } else if (command.equals("profile-test-single")) { mode = StartupExtender.StartMode.TEST_PROFILE; @@ -672,7 +706,7 @@ LOG.log(Level.FINE, "COMMAND: {0}", command); //NOI18N String[] targetNames = new String[0]; Map targetsFromConfig = loadTargetsFromConfig(); - if ( command.equals( COMMAND_COMPILE_SINGLE ) ) { + if ( command.equals( ProjectActions.COMMAND_COMPILE_SINGLE) ) { FileObject[] sourceRoots = projectSourceRoots.getRoots(); FileObject[] files = findSourcesAndPackages( context, sourceRoots); boolean recursive = (context.lookup(NonRecursiveFolder.class) == null); @@ -690,16 +724,16 @@ return null; } } - } else if ( command.equals( COMMAND_TEST ) ){ + } else if ( command.equals( ProjectActions.COMMAND_TEST) ){ p.setProperty("ignore.failing.tests", "true"); //NOI18N targetNames = getCommands().get(command); - } else if ( command.equals( COMMAND_TEST_SINGLE ) ) { + } else if ( command.equals( ProjectActions.COMMAND_TEST_SINGLE) ) { final FileObject[] files = findTestSources(context, true); if (files == null) { return null; } targetNames = setupTestSingle(p, files); - } else if ( command.equals( COMMAND_DEBUG_TEST_SINGLE ) ) { + } else if ( command.equals( ProjectActions.COMMAND_DEBUG_TEST_SINGLE) ) { final FileObject[] files = findTestSources(context, true); if (files == null) { return null; @@ -737,7 +771,7 @@ } p.setProperty("fix.includes", path); // NOI18N p.setProperty("fix.classes", classes); // NOI18N - } else if (!isServerExecution() && (command.equals (COMMAND_RUN) || command.equals(COMMAND_DEBUG) || command.equals(COMMAND_DEBUG_STEP_INTO))) { + } else if (!isServerExecution() && (command.equals (ProjectActions.COMMAND_RUN) || command.equals(ProjectActions.COMMAND_DEBUG) || command.equals(ProjectActions.COMMAND_DEBUG_STEP_INTO))) { String config = evaluator.getProperty(ProjectProperties.PROP_PROJECT_CONFIGURATION_CONFIG); String path; if (config == null || config.length() == 0) { @@ -788,7 +822,7 @@ ErrorManager.getDefault().log(ErrorManager.INFORMATIONAL, "Error while saving project: " + ioe); } } - if (!command.equals(COMMAND_RUN) && /* XXX should ideally look up proper mainClass in evaluator x config */ mainClass != null) { + if (!command.equals(ProjectActions.COMMAND_RUN) && /* XXX should ideally look up proper mainClass in evaluator x config */ mainClass != null) { p.setProperty("debug.class", mainClass); // NOI18N } String[] targets = targetsFromConfig.get(command); @@ -797,7 +831,7 @@ throw new IllegalArgumentException(command); } prepareDirtyList(p, false); - } else if (command.equals (COMMAND_RUN_SINGLE) || command.equals (COMMAND_DEBUG_SINGLE)) { + } else if (command.equals (ProjectActions.COMMAND_RUN_SINGLE) || command.equals (ProjectActions.COMMAND_DEBUG_SINGLE)) { FileObject[] files = findTestSources(context, false); FileObject[] rootz = projectTestRoots.getRoots(); boolean isTest = true; @@ -872,7 +906,7 @@ return null; } p.setProperty("applet.url", url.toString()); // NOI18N - if (command.equals (COMMAND_RUN_SINGLE)) { + if (command.equals (ProjectActions.COMMAND_RUN_SINGLE)) { targetNames = new String[] {"run-applet"}; // NOI18N } else { p.setProperty("debug.class", clazz); // NOI18N @@ -882,7 +916,7 @@ List alternativeTargetNames = new ArrayList(); if (isTest) { //Fallback to normal (non-main-method-based) unit test run - if (command.equals(COMMAND_RUN_SINGLE)) { + if (command.equals(ProjectActions.COMMAND_RUN_SINGLE)) { targetNames = setupTestSingle(p, files); } else { targetNames = setupDebugTestSingle(p, files); @@ -912,14 +946,14 @@ } } } - if (command.equals (COMMAND_RUN_SINGLE)) { + if (command.equals (ProjectActions.COMMAND_RUN_SINGLE)) { p.setProperty("run.class", clazz); // NOI18N String[] targets = targetsFromConfig.get(command); - targetNames = (targets != null) ? targets : (isTest ? new String[] { "run-test-with-main" } : getCommands().get(COMMAND_RUN_SINGLE)); + targetNames = (targets != null) ? targets : (isTest ? new String[] { "run-test-with-main" } : getCommands().get(ProjectActions.COMMAND_RUN_SINGLE)); } else { p.setProperty("debug.class", clazz); // NOI18N String[] targets = targetsFromConfig.get(command); - targetNames = (targets != null) ? targets : (isTest ? new String[] {"debug-test-with-main"} : getCommands().get(COMMAND_DEBUG_SINGLE)); + targetNames = (targets != null) ? targets : (isTest ? new String[] {"debug-test-with-main"} : getCommands().get(ProjectActions.COMMAND_DEBUG_SINGLE)); } } } @@ -929,14 +963,14 @@ if (clazz == null) { return null; } - if (command.equals (COMMAND_RUN_SINGLE)) { + if (command.equals (ProjectActions.COMMAND_RUN_SINGLE)) { p.setProperty("run.class", clazz); // NOI18N String[] targets = targetsFromConfig.get(command); - targetNames = (targets != null) ? targets : (isTest ? new String[] { "run-test-with-main" } : getCommands().get(COMMAND_RUN_SINGLE)); //NOI18N + targetNames = (targets != null) ? targets : (isTest ? new String[] { "run-test-with-main" } : getCommands().get(ProjectActions.COMMAND_RUN_SINGLE)); //NOI18N } else { p.setProperty("debug.class", clazz); // NOI18N String[] targets = targetsFromConfig.get(command); - targetNames = (targets != null) ? targets : (isTest ? new String[] {"debug-test-with-main"} : getCommands().get(COMMAND_DEBUG_SINGLE)); //NOI18N + targetNames = (targets != null) ? targets : (isTest ? new String[] {"debug-test-with-main"} : getCommands().get(ProjectActions.COMMAND_DEBUG_SINGLE)); //NOI18N } } } else { @@ -944,16 +978,16 @@ targetNames = (targets != null) ? targets : getCommands().get(command); if (targetNames == null) { String buildTarget = "false".equalsIgnoreCase(evaluator.getProperty(ProjectProperties.DO_JAR)) ? "compile" : "jar"; // NOI18N - if (command.equals(COMMAND_BUILD)) { + if (command.equals(ProjectActions.COMMAND_BUILD)) { targetNames = new String[] {buildTarget}; prepareDirtyList(p, true); - } else if (command.equals(COMMAND_REBUILD)) { + } else if (command.equals(ProjectActions.COMMAND_REBUILD)) { targetNames = new String[] {"clean", buildTarget}; // NOI18N } else { throw new IllegalArgumentException(command); } } - if (COMMAND_CLEAN.equals(command)) { + if (ProjectActions.COMMAND_CLEAN.equals(command)) { //After clean, rebuild all dirty = null; } @@ -1118,36 +1152,20 @@ return !new File(buildClassesFile, AUTOMATIC_BUILD_TAG).exists(); } - @Override - public boolean isActionEnabled( String command, Lookup context ) { - if (COMMAND_DELETE.equals(command) - || COMMAND_MOVE.equals(command) - || COMMAND_COPY.equals(command) - || COMMAND_RENAME.equals(command)) { - return true; - } - FileObject buildXml = findBuildXml(); - if ( buildXml == null || !buildXml.isValid()) { - return false; - } - if ( Arrays.asList(getActionsDisabledForQuickRun()).contains(command) - && isCompileOnSaveEnabled() - && !allowAntBuild()) { - return false; - } - if ( command.equals( COMMAND_COMPILE_SINGLE ) ) { + private boolean isActionEnabled(String command, Lookup context) { + if ( command.equals( ProjectActions.COMMAND_COMPILE_SINGLE) ) { return findSourcesAndPackages( context, projectSourceRoots.getRoots()) != null || findSourcesAndPackages( context, projectTestRoots.getRoots()) != null; } - else if ( command.equals( COMMAND_TEST_SINGLE ) ) { + else if ( command.equals( ProjectActions.COMMAND_TEST_SINGLE) ) { FileObject[] fos = findTestSources(context, true); return fos != null && fos.length == 1; } - else if ( command.equals( COMMAND_DEBUG_TEST_SINGLE ) ) { + else if ( command.equals( ProjectActions.COMMAND_DEBUG_TEST_SINGLE) ) { FileObject[] fos = findTestSources(context, true); return fos != null && fos.length == 1; - } else if (command.equals(COMMAND_RUN_SINGLE) || - command.equals(COMMAND_DEBUG_SINGLE) || + } else if (command.equals(ProjectActions.COMMAND_RUN_SINGLE) || + command.equals(ProjectActions.COMMAND_DEBUG_SINGLE) || command.equals(JavaProjectConstants.COMMAND_DEBUG_FIX)) { FileObject fos[] = findSources(context); if (fos != null && fos.length == 1) { @@ -1356,13 +1374,13 @@ boolean run = true; boolean hasMainMethod = true; - if (COMMAND_RUN.equals(command) || COMMAND_DEBUG.equals(command) || COMMAND_DEBUG_STEP_INTO.equals(command)) { + if (ProjectActions.COMMAND_RUN.equals(command) || ProjectActions.COMMAND_DEBUG.equals(command) || ProjectActions.COMMAND_DEBUG_STEP_INTO.equals(command)) { final String mainClass = evaluator.getProperty(ProjectProperties.MAIN_CLASS); p.put(JavaRunner.PROP_CLASSNAME, mainClass); p.put(JavaRunner.PROP_EXECUTE_CLASSPATH, callback.getProjectSourcesClassPath(ClassPath.EXECUTE)); - if (COMMAND_DEBUG_STEP_INTO.equals(command)) { + if (ProjectActions.COMMAND_DEBUG_STEP_INTO.equals(command)) { p.put("stopclassname", mainClass); } } else { @@ -1381,9 +1399,10 @@ p.put(JavaRunner.PROP_EXECUTE_FILE, files[0]); } - boolean debug = COMMAND_DEBUG.equals(command) || COMMAND_DEBUG_SINGLE.equals(command) || COMMAND_DEBUG_STEP_INTO.equals(command); + boolean debug = ProjectActions.COMMAND_DEBUG.equals(command) || ProjectActions.COMMAND_DEBUG_SINGLE.equals(command) || ProjectActions.COMMAND_DEBUG_STEP_INTO.equals(command); try { updateJavaRunnerClasspath(command, p); + // XXX block if (run) { copyMultiValue(ProjectProperties.APPLICATION_ARGS, p); JavaRunner.execute(debug ? JavaRunner.QUICK_DEBUG : JavaRunner.QUICK_RUN, p); @@ -1780,7 +1799,7 @@ } if (result == cleanAndBuild) { - invokeAction(COMMAND_REBUILD, context); + invokeAction(ProjectActions.COMMAND_REBUILD, context); return ; } --- a/java.j2seproject/src/org/netbeans/modules/java/j2seproject/J2SEActionProvider.java +++ a/java.j2seproject/src/org/netbeans/modules/java/j2seproject/J2SEActionProvider.java @@ -53,6 +53,7 @@ import java.util.logging.Logger; import org.netbeans.api.annotations.common.NonNull; import org.netbeans.api.java.project.JavaProjectConstants; +import org.netbeans.api.project.ProjectActions; import org.netbeans.modules.java.api.common.ant.UpdateHelper; import org.netbeans.modules.java.api.common.project.ProjectProperties; import org.netbeans.modules.java.api.common.project.BaseActionProvider; @@ -72,49 +73,49 @@ // Commands available from J2SE project private static final String[] supportedActions = { - COMMAND_BUILD, - COMMAND_CLEAN, - COMMAND_REBUILD, - COMMAND_COMPILE_SINGLE, - COMMAND_RUN, - COMMAND_RUN_SINGLE, - COMMAND_DEBUG, - COMMAND_DEBUG_SINGLE, + ProjectActions.COMMAND_BUILD, + ProjectActions.COMMAND_CLEAN, + ProjectActions.COMMAND_REBUILD, + ProjectActions.COMMAND_COMPILE_SINGLE, + ProjectActions.COMMAND_RUN, + ProjectActions.COMMAND_RUN_SINGLE, + ProjectActions.COMMAND_DEBUG, + ProjectActions.COMMAND_DEBUG_SINGLE, JavaProjectConstants.COMMAND_JAVADOC, - COMMAND_TEST, - COMMAND_TEST_SINGLE, - COMMAND_DEBUG_TEST_SINGLE, + ProjectActions.COMMAND_TEST, + ProjectActions.COMMAND_TEST_SINGLE, + ProjectActions.COMMAND_DEBUG_TEST_SINGLE, SingleMethod.COMMAND_RUN_SINGLE_METHOD, SingleMethod.COMMAND_DEBUG_SINGLE_METHOD, JavaProjectConstants.COMMAND_DEBUG_FIX, - COMMAND_DEBUG_STEP_INTO, - COMMAND_DELETE, - COMMAND_COPY, - COMMAND_MOVE, - COMMAND_RENAME, + ProjectActions.COMMAND_DEBUG_STEP_INTO, + ProjectActions.COMMAND_DELETE, + ProjectActions.COMMAND_COPY, + ProjectActions.COMMAND_MOVE, + ProjectActions.COMMAND_RENAME, }; private static final String[] platformSensitiveActions = { - COMMAND_BUILD, - COMMAND_REBUILD, - COMMAND_COMPILE_SINGLE, - COMMAND_RUN, - COMMAND_RUN_SINGLE, - COMMAND_DEBUG, - COMMAND_DEBUG_SINGLE, + ProjectActions.COMMAND_BUILD, + ProjectActions.COMMAND_REBUILD, + ProjectActions.COMMAND_COMPILE_SINGLE, + ProjectActions.COMMAND_RUN, + ProjectActions.COMMAND_RUN_SINGLE, + ProjectActions.COMMAND_DEBUG, + ProjectActions.COMMAND_DEBUG_SINGLE, JavaProjectConstants.COMMAND_JAVADOC, - COMMAND_TEST, - COMMAND_TEST_SINGLE, - COMMAND_DEBUG_TEST_SINGLE, + ProjectActions.COMMAND_TEST, + ProjectActions.COMMAND_TEST_SINGLE, + ProjectActions.COMMAND_DEBUG_TEST_SINGLE, SingleMethod.COMMAND_RUN_SINGLE_METHOD, SingleMethod.COMMAND_DEBUG_SINGLE_METHOD, JavaProjectConstants.COMMAND_DEBUG_FIX, - COMMAND_DEBUG_STEP_INTO, + ProjectActions.COMMAND_DEBUG_STEP_INTO, }; private static final String[] actionsDisabledForQuickRun = { - COMMAND_COMPILE_SINGLE, + ProjectActions.COMMAND_COMPILE_SINGLE, JavaProjectConstants.COMMAND_DEBUG_FIX, }; @@ -133,26 +134,25 @@ new BaseActionProvider.CallbackImpl(project.getClassPathProvider())); commands = new HashMap(); // treated specially: COMMAND_{,RE}BUILD - commands.put(COMMAND_CLEAN, new String[] {"clean"}); // NOI18N - commands.put(COMMAND_COMPILE_SINGLE, new String[] {"compile-single"}); // NOI18N - commands.put(COMMAND_RUN, new String[] {"run"}); // NOI18N - commands.put(COMMAND_RUN_SINGLE, new String[] {"run-single"}); // NOI18N - commands.put(COMMAND_DEBUG, new String[] {"debug"}); // NOI18N - commands.put(COMMAND_DEBUG_SINGLE, new String[] {"debug-single"}); // NOI18N + commands.put(ProjectActions.COMMAND_CLEAN, new String[] {"clean"}); // NOI18N + commands.put(ProjectActions.COMMAND_COMPILE_SINGLE, new String[] {"compile-single"}); // NOI18N + commands.put(ProjectActions.COMMAND_RUN, new String[] {"run"}); // NOI18N + commands.put(ProjectActions.COMMAND_RUN_SINGLE, new String[] {"run-single"}); // NOI18N + commands.put(ProjectActions.COMMAND_DEBUG, new String[] {"debug"}); // NOI18N + commands.put(ProjectActions.COMMAND_DEBUG_SINGLE, new String[] {"debug-single"}); // NOI18N commands.put(JavaProjectConstants.COMMAND_JAVADOC, new String[] {"javadoc"}); // NOI18N - commands.put(COMMAND_TEST, new String[] {"test"}); // NOI18N - commands.put(COMMAND_TEST_SINGLE, new String[] {"test-single"}); // NOI18N - commands.put(COMMAND_DEBUG_TEST_SINGLE, new String[] {"debug-test"}); // NOI18N + commands.put(ProjectActions.COMMAND_TEST, new String[] {"test"}); // NOI18N + commands.put(ProjectActions.COMMAND_TEST_SINGLE, new String[] {"test-single"}); // NOI18N + commands.put(ProjectActions.COMMAND_DEBUG_TEST_SINGLE, new String[] {"debug-test"}); // NOI18N commands.put(JavaProjectConstants.COMMAND_DEBUG_FIX, new String[] {"debug-fix"}); // NOI18N - commands.put(COMMAND_DEBUG_STEP_INTO, new String[] {"debug-stepinto"}); // NOI18N + commands.put(ProjectActions.COMMAND_DEBUG_STEP_INTO, new String[] {"debug-stepinto"}); // NOI18N this.bkgScanSensitiveActions = new HashSet(Arrays.asList( - COMMAND_RUN, - COMMAND_RUN_SINGLE, - COMMAND_DEBUG, - COMMAND_DEBUG_SINGLE, - COMMAND_DEBUG_STEP_INTO - )); + ProjectActions.COMMAND_RUN, + ProjectActions.COMMAND_RUN_SINGLE, + ProjectActions.COMMAND_DEBUG, + ProjectActions.COMMAND_DEBUG_SINGLE, + ProjectActions.COMMAND_DEBUG_STEP_INTO)); this.needJavaModelActions = new HashSet(Arrays.asList( JavaProjectConstants.COMMAND_DEBUG_FIX --- a/java.j2seproject/src/org/netbeans/modules/java/j2seproject/J2SEConfigurationProvider.java +++ a/java.j2seproject/src/org/netbeans/modules/java/j2seproject/J2SEConfigurationProvider.java @@ -59,6 +59,7 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; +import org.netbeans.api.project.ProjectActions; import org.netbeans.api.project.ProjectManager; import org.netbeans.modules.java.api.common.project.ProjectProperties; import org.netbeans.modules.java.j2seproject.ui.customizer.CustomizerProviderImpl; @@ -260,8 +261,8 @@ } public boolean configurationsAffectAction(String command) { - return command.equals(ActionProvider.COMMAND_RUN) || - command.equals(ActionProvider.COMMAND_DEBUG); + return command.equals(ProjectActions.COMMAND_RUN) || + command.equals(ProjectActions.COMMAND_DEBUG); } public void addPropertyChangeListener(PropertyChangeListener lst) { --- a/java.j2seproject/src/org/netbeans/modules/java/j2seproject/J2SEProject.java +++ a/java.j2seproject/src/org/netbeans/modules/java/j2seproject/J2SEProject.java @@ -393,7 +393,6 @@ LookupMergerSupport.createJFBLookupMerger(), QuerySupport.createBinaryForSourceQueryImplementation(this.sourceRoots, this.testRoots, this.helper, this.evaluator()), //Does not use APH to get/put properties/cfgdata QuerySupport.createAnnotationProcessingQuery(this.helper, this.evaluator(), ProjectProperties.ANNOTATION_PROCESSING_ENABLED, ProjectProperties.ANNOTATION_PROCESSING_ENABLED_IN_EDITOR, ProjectProperties.ANNOTATION_PROCESSING_RUN_ALL_PROCESSORS, ProjectProperties.ANNOTATION_PROCESSING_PROCESSORS_LIST, ProjectProperties.ANNOTATION_PROCESSING_SOURCE_OUTPUT, ProjectProperties.ANNOTATION_PROCESSING_PROCESSOR_OPTIONS), - LookupProviderSupport.createActionProviderMerger(), WhiteListQueryMergerSupport.createWhiteListQueryMerger() ); lookup = base; // in case LookupProvider's call Project.getLookup --- a/java.j2seproject/src/org/netbeans/modules/java/j2seproject/J2SEProjectOperations.java +++ a/java.j2seproject/src/org/netbeans/modules/java/j2seproject/J2SEProjectOperations.java @@ -55,12 +55,12 @@ import org.apache.tools.ant.module.api.support.ActionUtils; import org.netbeans.api.project.FileOwnerQuery; import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectActions; import org.netbeans.api.project.ProjectInformation; import org.netbeans.api.project.ProjectManager; import org.netbeans.api.project.ProjectUtils; import org.netbeans.modules.java.api.common.project.ProjectProperties; import org.netbeans.modules.java.j2seproject.ui.customizer.J2SEProjectProperties; -import org.netbeans.spi.project.ActionProvider; import org.netbeans.spi.project.CopyOperationImplementation; import org.netbeans.spi.project.DeleteOperationImplementation; import org.netbeans.spi.project.MoveOrRenameOperationImplementation; @@ -152,7 +152,7 @@ Properties p = new Properties(); final AntTargetsProvider ap = project.getLookup().lookup(AntTargetsProvider.class); assert ap != null; - String[] targetNames = ap.getTargetNames(ActionProvider.COMMAND_CLEAN, Lookup.EMPTY, p, false); + String[] targetNames = ap.getTargetNames(ProjectActions.COMMAND_CLEAN, Lookup.EMPTY, p, false); FileObject buildXML = J2SEProjectUtil.getBuildXml(project); assert targetNames != null; --- a/java.j2seproject/src/org/netbeans/modules/java/j2seproject/ui/customizer/J2SEProjectProperties.java +++ a/java.j2seproject/src/org/netbeans/modules/java/j2seproject/ui/customizer/J2SEProjectProperties.java @@ -78,6 +78,7 @@ import javax.swing.text.Document; import javax.swing.text.PlainDocument; import org.netbeans.api.annotations.common.NonNull; +import org.netbeans.api.project.ProjectActions; import org.netbeans.api.queries.FileEncodingQuery; import org.netbeans.api.project.ProjectManager; import org.netbeans.api.project.ProjectUtils; @@ -463,7 +464,7 @@ if (mark != null) { final ActionProvider ap = project.getLookup().lookup(ActionProvider.class); assert ap != null; - ap.invokeAction(ActionProvider.COMMAND_CLEAN, Lookups.fixed(project)); + ap.invokeAction(ProjectActions.COMMAND_CLEAN, Lookups.fixed(project)); } } } --- a/java.j2seproject/test/unit/src/org/netbeans/modules/java/j2seproject/J2SEActionProviderTest.java +++ a/java.j2seproject/test/unit/src/org/netbeans/modules/java/j2seproject/J2SEActionProviderTest.java @@ -62,6 +62,7 @@ import org.netbeans.api.java.platform.Specification; import org.netbeans.api.java.project.JavaProjectConstants; import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectActions; import org.netbeans.api.project.ProjectManager; import org.netbeans.junit.NbTestCase; import org.netbeans.modules.java.api.common.applet.AppletSupport; @@ -200,7 +201,7 @@ p = new Properties(); context = Lookups.fixed(someSource1); - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_COMPILE_SINGLE, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_COMPILE_SINGLE, context, p); assertNotNull("Must found some targets for COMMAND_COMPILE_SINGLE", targets); assertEquals("There must be one target for COMMAND_COMPILE_SINGLE", 1, targets.length); assertEquals("Unexpected target name", "compile-single", targets[0]); @@ -208,7 +209,7 @@ assertEquals("There must be be target parameter", "foo/Bar.java", p.getProperty("javac.includes")); p = new Properties(); context = Lookups.fixed(someTest1,someTest2); - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_COMPILE_SINGLE, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_COMPILE_SINGLE, context, p); assertNotNull("Must found some targets for COMMAND_COMPILE_SINGLE", targets); assertEquals("There must be one target for COMMAND_COMPILE_SINGLE", 1, targets.length); assertEquals("Unexpected target name", "compile-test-single", targets[0]); @@ -216,7 +217,7 @@ assertEquals("There must be be target parameter", "foo/BarTest.java,foo/MainTest.java", p.getProperty("javac.includes")); p = new Properties(); context = Lookups.fixed(sourcePkg1); - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_COMPILE_SINGLE, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_COMPILE_SINGLE, context, p); assertNotNull("Must found some targets for COMMAND_COMPILE_SINGLE", targets); assertEquals("There must be one target for COMMAND_COMPILE_SINGLE", 1, targets.length); assertEquals("Unexpected target name", "compile-single", targets[0]); @@ -224,7 +225,7 @@ assertEquals("There must be be target parameter", "foo/**", p.getProperty("javac.includes")); p = new Properties(); context = Lookups.fixed(sourcePkg1, sourcePkg2); - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_COMPILE_SINGLE, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_COMPILE_SINGLE, context, p); assertNotNull("Must found some targets for COMMAND_COMPILE_SINGLE", targets); assertEquals("There must be one target for COMMAND_COMPILE_SINGLE", 1, targets.length); assertEquals("Unexpected target name", "compile-single", targets[0]); @@ -232,7 +233,7 @@ assertEquals("There must be be target parameter", "foo/**,foo2/**", p.getProperty("javac.includes")); p = new Properties(); context = Lookups.fixed(DataFolder.findFolder(sources)); - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_COMPILE_SINGLE, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_COMPILE_SINGLE, context, p); assertNotNull("Must found some targets for COMMAND_COMPILE_SINGLE", targets); assertEquals("There must be one target for COMMAND_COMPILE_SINGLE", 1, targets.length); assertEquals("Unexpected target name", "compile-single", targets[0]); @@ -241,7 +242,7 @@ p = new Properties(); context = Lookups.fixed(sourcePkg1, new NonRecursiveFolderImpl (sourcePkg1)); - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_COMPILE_SINGLE, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_COMPILE_SINGLE, context, p); assertNotNull("Must found some targets for COMMAND_COMPILE_SINGLE", targets); assertEquals("There must be one target for COMMAND_COMPILE_SINGLE", 1, targets.length); assertEquals("Unexpected target name", "compile-single", targets[0]); @@ -249,7 +250,7 @@ assertEquals("There must be be target parameter", "foo/*", p.getProperty("javac.includes")); p = new Properties(); context = Lookups.fixed(sourcePkg1, sourcePkg2, new NonRecursiveFolderImpl(sourcePkg1), new NonRecursiveFolderImpl(sourcePkg2)); - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_COMPILE_SINGLE, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_COMPILE_SINGLE, context, p); assertNotNull("Must found some targets for COMMAND_COMPILE_SINGLE", targets); assertEquals("There must be one target for COMMAND_COMPILE_SINGLE", 1, targets.length); assertEquals("Unexpected target name", "compile-single", targets[0]); @@ -257,7 +258,7 @@ assertEquals("There must be be target parameter", "foo/*,foo2/*", p.getProperty("javac.includes")); p = new Properties(); context = Lookups.fixed(DataFolder.findFolder(sources), new NonRecursiveFolderImpl(sources)); - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_COMPILE_SINGLE, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_COMPILE_SINGLE, context, p); assertNotNull("Must found some targets for COMMAND_COMPILE_SINGLE", targets); assertEquals("There must be one target for COMMAND_COMPILE_SINGLE", 1, targets.length); assertEquals("Unexpected target name", "compile-single", targets[0]); @@ -268,7 +269,7 @@ p = new Properties(); context = Lookups.fixed(someSource1); - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_TEST_SINGLE, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_TEST_SINGLE, context, p); assertNotNull("Must found some targets for COMMAND_TEST_SINGLE", targets); assertEquals("There must be one target for COMMAND_TEST_SINGLE", 1, targets.length); assertEquals("Unexpected target name", "test-single", targets[0]); @@ -277,7 +278,7 @@ assertEquals("There must be be target parameter", "foo/BarTest.java", p.getProperty("test.includes")); p = new Properties(); context = Lookups.fixed(someSource1,someSource2); - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_TEST_SINGLE, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_TEST_SINGLE, context, p); assertNotNull("Must found some targets for COMMAND_TEST_SINGLE", targets); assertEquals("There must be one target for COMMAND_TEST_SINGLE", 1, targets.length); assertEquals("Unexpected target name", "test-single", targets[0]); @@ -289,7 +290,7 @@ p = new Properties(); context = Lookups.fixed(someSource1); - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_DEBUG_TEST_SINGLE, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_DEBUG_TEST_SINGLE, context, p); assertNotNull("Must found some targets for COMMAND_DEBUG_TEST_SINGLE", targets); assertEquals("There must be one target for COMMAND_DEBUG_TEST_SINGLE", 1, targets.length); assertEquals("Unexpected target name", "debug-test", targets[0]); @@ -325,7 +326,7 @@ context = Lookups.fixed(someSource2); MainClassChooser.unitTestingSupport_hasMainMethodResult = Boolean.TRUE; try { - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_RUN_SINGLE, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_RUN_SINGLE, context, p); } finally { MainClassChooser.unitTestingSupport_hasMainMethodResult = null; } @@ -340,7 +341,7 @@ MainClassChooser.unitTestingSupport_hasMainMethodResult = Boolean.FALSE; AppletSupport.unitTestingSupport_isApplet = Boolean.TRUE; try { - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_RUN_SINGLE, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_RUN_SINGLE, context, p); } finally { MainClassChooser.unitTestingSupport_hasMainMethodResult = null; AppletSupport.unitTestingSupport_isApplet = null; @@ -359,7 +360,7 @@ MainClassChooser.unitTestingSupport_hasMainMethodResult = Boolean.TRUE; AppletSupport.unitTestingSupport_isApplet = Boolean.TRUE; try { - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_RUN_SINGLE, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_RUN_SINGLE, context, p); } finally { MainClassChooser.unitTestingSupport_hasMainMethodResult = null; AppletSupport.unitTestingSupport_isApplet = null; @@ -377,7 +378,7 @@ context = Lookups.fixed(someSource2); MainClassChooser.unitTestingSupport_hasMainMethodResult = Boolean.TRUE; try { - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_DEBUG_SINGLE, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_DEBUG_SINGLE, context, p); } finally { MainClassChooser.unitTestingSupport_hasMainMethodResult = null; } @@ -392,7 +393,7 @@ MainClassChooser.unitTestingSupport_hasMainMethodResult = Boolean.FALSE; AppletSupport.unitTestingSupport_isApplet = Boolean.TRUE; try { - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_DEBUG_SINGLE, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_DEBUG_SINGLE, context, p); } finally { MainClassChooser.unitTestingSupport_hasMainMethodResult = null; AppletSupport.unitTestingSupport_isApplet = null; @@ -411,7 +412,7 @@ MainClassChooser.unitTestingSupport_hasMainMethodResult = Boolean.TRUE; AppletSupport.unitTestingSupport_isApplet = Boolean.TRUE; try { - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_DEBUG_SINGLE, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_DEBUG_SINGLE, context, p); } finally { MainClassChooser.unitTestingSupport_hasMainMethodResult = null; AppletSupport.unitTestingSupport_isApplet = null; @@ -429,7 +430,7 @@ context = Lookup.EMPTY; MainClassChooser.unitTestingSupport_hasMainMethodResult = Boolean.TRUE; try { - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_RUN, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_RUN, context, p); } finally { MainClassChooser.unitTestingSupport_hasMainMethodResult = null; } @@ -447,7 +448,7 @@ context = Lookup.EMPTY; MainClassChooser.unitTestingSupport_hasMainMethodResult = Boolean.TRUE; try { - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_DEBUG, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_DEBUG, context, p); } finally { MainClassChooser.unitTestingSupport_hasMainMethodResult = null; } @@ -466,7 +467,7 @@ context = Lookup.EMPTY; MainClassChooser.unitTestingSupport_hasMainMethodResult = Boolean.TRUE; try { - targets = actionProvider.getTargetNames(ActionProvider.COMMAND_DEBUG_STEP_INTO, context, p); + targets = actionProvider.getTargetNames(ProjectActions.COMMAND_DEBUG_STEP_INTO, context, p); } finally { MainClassChooser.unitTestingSupport_hasMainMethodResult = null; } @@ -527,19 +528,19 @@ MainClassChooser.unitTestingSupport_hasMainMethodResult = Boolean.TRUE; try { // test of targets defined in config - String[] targets = ap.getTargetNames(ActionProvider.COMMAND_DEBUG, context, new Properties()); + String[] targets = ap.getTargetNames(ProjectActions.COMMAND_DEBUG, context, new Properties()); assertEquals("There must be two Debug targets in test config", 2, targets.length); assertEquals("First Debug target name is debugtarget1", "debugtarget1", targets[0]); assertEquals("Second Debug target name is debugtarget2", "debugtarget2", targets[1]); - targets = ap.getTargetNames(ActionProvider.COMMAND_BUILD, context, new Properties()); + targets = ap.getTargetNames(ProjectActions.COMMAND_BUILD, context, new Properties()); assertEquals("There must be 1 Build target in test config", 1, targets.length); // target is not in fact from the config, config contains empty string assertEquals("Build target name is jar", "jar", targets[0]); - targets = ap.getTargetNames(ActionProvider.COMMAND_RUN, context, new Properties()); + targets = ap.getTargetNames(ProjectActions.COMMAND_RUN, context, new Properties()); assertEquals("There must be 1 Run target in test config", 1, targets.length); assertEquals("Run target name is runtarget", "runtarget", targets[0]); // test of targets not in config - targets = ap.getTargetNames(ActionProvider.COMMAND_CLEAN, context, new Properties()); + targets = ap.getTargetNames(ProjectActions.COMMAND_CLEAN, context, new Properties()); assertEquals("There must be 1 Clean target", 1, targets.length); assertEquals("Clean target name is runtarget", "clean", targets[0]); } finally { @@ -556,7 +557,7 @@ FileObject newRoot = SourceRootsTest.addSourceRoot(helper, projdir, "src.other.dir","other"); implTestIsActionEnabled(false); Lookup context = Lookups.fixed(sourcePkg1, DataFolder.findFolder(newRoot)); - boolean enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_COMPILE_SINGLE, context); + boolean enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_COMPILE_SINGLE, context); assertFalse ("COMMAND_COMPILE_SINGLE must be disabled on multiple src packages from different roots", enabled); } @@ -570,105 +571,105 @@ helper.putProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH, ep); context = Lookups.fixed(someSource1); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_COMPILE_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_COMPILE_SINGLE, context); assertTrue ("COMMAND_COMPILE_SINGLE must be enabled on one source", enabled); context = Lookups.fixed(someSource1, someSource2); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_COMPILE_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_COMPILE_SINGLE, context); assertTrue ("COMMAND_COMPILE_SINGLE must be enabled on multiple sources", enabled); context = Lookups.fixed(someTest1, someTest2); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_COMPILE_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_COMPILE_SINGLE, context); assertTrue ("COMMAND_COMPILE_SINGLE must be enabled on multiple tests", enabled); context = Lookups.fixed(someSource1, someTest1); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_COMPILE_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_COMPILE_SINGLE, context); assertFalse("COMMAND_COMPILE_SINGLE must be disabled on mixed files", enabled); context = Lookups.fixed(sourcePkg1); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_COMPILE_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_COMPILE_SINGLE, context); assertTrue ("COMMAND_COMPILE_SINGLE must be enabled on one src package", enabled); context = Lookups.fixed(sourcePkg1, sourcePkg2); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_COMPILE_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_COMPILE_SINGLE, context); assertTrue ("COMMAND_COMPILE_SINGLE must be enabled on multiple src packages", enabled); context = Lookups.fixed(sourcePkg1, someSource1); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_COMPILE_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_COMPILE_SINGLE, context); assertTrue ("COMMAND_COMPILE_SINGLE must be enabled on mixed src packages/files", enabled); context = Lookups.fixed(testPkg1); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_COMPILE_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_COMPILE_SINGLE, context); assertTrue ("COMMAND_COMPILE_SINGLE must be enabled on one test package", enabled); context = Lookups.fixed(testPkg1, testPkg2); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_COMPILE_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_COMPILE_SINGLE, context); assertTrue ("COMMAND_COMPILE_SINGLE must be enabled on multiple test packages", enabled); context = Lookups.fixed(testPkg1, someTest1); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_COMPILE_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_COMPILE_SINGLE, context); assertTrue ("COMMAND_COMPILE_SINGLE must be enabled on mixed test packages/files", enabled); context = Lookups.fixed(DataFolder.findFolder(projdir)); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_COMPILE_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_COMPILE_SINGLE, context); assertFalse ("COMMAND_COMPILE_SINGLE must not be enabled on non source folder", enabled); context = Lookups.fixed(sourcePkg1, testPkg1); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_COMPILE_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_COMPILE_SINGLE, context); assertFalse ("COMMAND_COMPILE_SINGLE must not be enabled on non mixed packages", enabled); // test COMMAND_TEST_SINGLE context = Lookups.fixed(someTest1); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_TEST_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_TEST_SINGLE, context); assertTrue("COMMAND_TEST_SINGLE must be enabled on one test", enabled); context = Lookups.fixed(someTest1, someTest2); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_TEST_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_TEST_SINGLE, context); assertFalse("COMMAND_TEST_SINGLE must be disabled on multiple tests", enabled); context = Lookups.fixed(someSource3); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_TEST_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_TEST_SINGLE, context); assertFalse("COMMAND_TEST_SINGLE must be disabled on non-test file which does not have associated test", enabled); context = Lookups.fixed(someSource2); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_TEST_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_TEST_SINGLE, context); assertTrue("COMMAND_TEST_SINGLE must be enabled on source file which has associated test", enabled); context = Lookups.fixed(someSource1, someSource2); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_TEST_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_TEST_SINGLE, context); assertFalse("COMMAND_TEST_SINGLE must be enabled on source files which has associated tests", enabled); context = Lookups.fixed(someSource1, someSource3); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_TEST_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_TEST_SINGLE, context); assertFalse("COMMAND_TEST_SINGLE must be disabled on mixture of source files when some files do not have tests", enabled); context = Lookups.fixed(someSource1, someTest1); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_TEST_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_TEST_SINGLE, context); assertFalse("COMMAND_TEST_SINGLE must be disabled on mixture of source files and test files", enabled); // test COMMAND_DEBUG_TEST_SINGLE context = Lookups.fixed(someTest1); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_DEBUG_TEST_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_DEBUG_TEST_SINGLE, context); assertTrue("COMMAND_DEBUG_TEST_SINGLE must be enabled on test files", enabled); context = Lookups.fixed(someTest1, someTest2); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_DEBUG_TEST_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_DEBUG_TEST_SINGLE, context); assertFalse("COMMAND_DEBUG_TEST_SINGLE must be disabled on multiple tests", enabled); context = Lookups.fixed(someSource3); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_DEBUG_TEST_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_DEBUG_TEST_SINGLE, context); assertFalse("COMMAND_DEBUG_TEST_SINGLE must be disabled on non-test file which does not have associated test", enabled); context = Lookups.fixed(someSource2); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_DEBUG_TEST_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_DEBUG_TEST_SINGLE, context); assertTrue("COMMAND_DEBUG_TEST_SINGLE must be enabled on source file which has associated test", enabled); context = Lookups.fixed(someSource1, someSource2); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_DEBUG_TEST_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_DEBUG_TEST_SINGLE, context); assertFalse("COMMAND_DEBUG_TEST_SINGLE must be disabled on multiple source files", enabled); // test COMMAND_DEBUG_FIX @@ -696,45 +697,45 @@ // test COMMAND_RUN_SINGLE context = Lookups.fixed(someSource1); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_RUN_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_RUN_SINGLE, context); assertTrue("COMMAND_RUN_SINGLE must be enabled on one source", enabled); context = Lookups.fixed(someSource1, someSource2); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_RUN_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_RUN_SINGLE, context); assertFalse("COMMAND_RUN_SINGLE must be disabled on multiple sources", enabled); context = Lookups.fixed(someTest1); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_RUN_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_RUN_SINGLE, context); assertTrue("COMMAND_RUN_SINGLE must be enabled on test file", enabled); context = Lookups.fixed(someTest1, someTest2); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_RUN_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_RUN_SINGLE, context); assertFalse("COMMAND_RUN_SINGLE must be disabled on multiple test files", enabled); context = Lookups.fixed(someSource1, someTest1); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_RUN_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_RUN_SINGLE, context); assertFalse("COMMAND_RUN_SINGLE must be disabled on mixed multiple test files", enabled); // test COMMAND_DEBUG_SINGLE context = Lookups.fixed(someSource1); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_DEBUG_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_DEBUG_SINGLE, context); assertTrue("COMMAND_DEBUG_SINGLE must be enabled on one source", enabled); context = Lookups.fixed(someSource1, someSource2); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_DEBUG_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_DEBUG_SINGLE, context); assertFalse("COMMAND_DEBUG_SINGLE must be disabled on multiple sources", enabled); context = Lookups.fixed(someTest1); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_DEBUG_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_DEBUG_SINGLE, context); assertTrue("COMMAND_DEBUG_SINGLE must be enabled on test file", enabled); context = Lookups.fixed(someTest1, someTest2); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_DEBUG_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_DEBUG_SINGLE, context); assertFalse("COMMAND_DEBUG_SINGLE must be disabled on multiple test files", enabled); context = Lookups.fixed(someSource1, someTest1); - enabled = actionProvider.isActionEnabled(ActionProvider.COMMAND_DEBUG_SINGLE, context); + enabled = actionProvider.isActionEnabled(ProjectActions.COMMAND_DEBUG_SINGLE, context); assertFalse("COMMAND_DEBUG_SINGLE must be disabled on mixed multiple test files", enabled); } @@ -743,44 +744,44 @@ ep.put(ProjectProperties.TRACK_FILE_CHANGES, "true"); helper.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, ep); Properties p = new Properties(); - assertEquals("[jar]", Arrays.toString(actionProvider.getTargetNames(ActionProvider.COMMAND_BUILD, Lookup.EMPTY, p))); + assertEquals("[jar]", Arrays.toString(actionProvider.getTargetNames(ProjectActions.COMMAND_BUILD, Lookup.EMPTY, p))); assertEquals("{}", p.toString()); TestFileUtils.touch(someSource1.getPrimaryFile(), null); - assertEquals("[jar]", Arrays.toString(actionProvider.getTargetNames(ActionProvider.COMMAND_BUILD, Lookup.EMPTY, p))); + assertEquals("[jar]", Arrays.toString(actionProvider.getTargetNames(ProjectActions.COMMAND_BUILD, Lookup.EMPTY, p))); assertEquals("{}", p.toString()); ep = helper.getProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH); ep.put(ProjectProperties.DO_JAR, "false"); helper.putProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH, ep); - assertEquals("[compile]", Arrays.toString(actionProvider.getTargetNames(ActionProvider.COMMAND_BUILD, Lookup.EMPTY, p))); + assertEquals("[compile]", Arrays.toString(actionProvider.getTargetNames(ProjectActions.COMMAND_BUILD, Lookup.EMPTY, p))); assertEquals("{}", p.toString()); ep.put(ProjectProperties.DO_DEPEND, "false"); helper.putProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH, ep); - assertEquals("[compile]", Arrays.toString(actionProvider.getTargetNames(ActionProvider.COMMAND_BUILD, Lookup.EMPTY, p))); + assertEquals("[compile]", Arrays.toString(actionProvider.getTargetNames(ProjectActions.COMMAND_BUILD, Lookup.EMPTY, p))); assertEquals("{}", p.toString()); TestFileUtils.touch(someSource1.getPrimaryFile(), null); - assertEquals("[compile]", Arrays.toString(actionProvider.getTargetNames(ActionProvider.COMMAND_BUILD, Lookup.EMPTY, p))); + assertEquals("[compile]", Arrays.toString(actionProvider.getTargetNames(ProjectActions.COMMAND_BUILD, Lookup.EMPTY, p))); assertEquals("{includes=foo/Bar.java}", p.toString()); p.clear(); TestFileUtils.touch(someSource2.getPrimaryFile(), null); TestFileUtils.touch(someSource1.getPrimaryFile(), null); - assertEquals("[compile]", Arrays.toString(actionProvider.getTargetNames(ActionProvider.COMMAND_BUILD, Lookup.EMPTY, p))); + assertEquals("[compile]", Arrays.toString(actionProvider.getTargetNames(ProjectActions.COMMAND_BUILD, Lookup.EMPTY, p))); assertEquals("{includes=foo/Bar.java,foo/Main.java}", p.toString()); p.clear(); - assertEquals("[compile]", Arrays.toString(actionProvider.getTargetNames(ActionProvider.COMMAND_BUILD, Lookup.EMPTY, p))); + assertEquals("[compile]", Arrays.toString(actionProvider.getTargetNames(ProjectActions.COMMAND_BUILD, Lookup.EMPTY, p))); assertEquals("{}", p.toString()); TestFileUtils.touch(someTest1.getPrimaryFile(), null); - assertEquals("[compile]", Arrays.toString(actionProvider.getTargetNames(ActionProvider.COMMAND_BUILD, Lookup.EMPTY, p))); + assertEquals("[compile]", Arrays.toString(actionProvider.getTargetNames(ProjectActions.COMMAND_BUILD, Lookup.EMPTY, p))); assertEquals("{}", p.toString()); sources.createData("x.properties"); - assertEquals("[compile]", Arrays.toString(actionProvider.getTargetNames(ActionProvider.COMMAND_BUILD, Lookup.EMPTY, p))); + assertEquals("[compile]", Arrays.toString(actionProvider.getTargetNames(ProjectActions.COMMAND_BUILD, Lookup.EMPTY, p))); assertEquals("{includes=x.properties}", p.toString()); p.clear(); someSource1.setModified(true); - assertEquals("[compile]", Arrays.toString(actionProvider.getTargetNames(ActionProvider.COMMAND_BUILD, Lookup.EMPTY, p))); + assertEquals("[compile]", Arrays.toString(actionProvider.getTargetNames(ProjectActions.COMMAND_BUILD, Lookup.EMPTY, p))); assertEquals("{includes=foo/Bar.java}", p.toString()); p.clear(); TestFileUtils.touch(someSource1.getPrimaryFile(), null); - assertEquals("[clean, compile]", Arrays.toString(actionProvider.getTargetNames(ActionProvider.COMMAND_REBUILD, Lookup.EMPTY, p))); + assertEquals("[clean, compile]", Arrays.toString(actionProvider.getTargetNames(ProjectActions.COMMAND_REBUILD, Lookup.EMPTY, p))); assertEquals("{}", p.toString()); } public void testBuildWithDirtyListFirstTime() throws Exception { // #119777 @@ -796,9 +797,9 @@ Properties p = new Properties(); MainClassChooser.unitTestingSupport_hasMainMethodResult = true; try { - assertEquals("[run]", Arrays.toString(actionProvider.getTargetNames(ActionProvider.COMMAND_RUN, Lookup.EMPTY, p))); + assertEquals("[run]", Arrays.toString(actionProvider.getTargetNames(ProjectActions.COMMAND_RUN, Lookup.EMPTY, p))); assertEquals("{}", p.toString()); - assertEquals("[run]", Arrays.toString(actionProvider.getTargetNames(ActionProvider.COMMAND_RUN, Lookup.EMPTY, p))); + assertEquals("[run]", Arrays.toString(actionProvider.getTargetNames(ProjectActions.COMMAND_RUN, Lookup.EMPTY, p))); assertEquals("{includes=nothing whatsoever}", p.toString()); } finally { MainClassChooser.unitTestingSupport_hasMainMethodResult = null; --- a/maven/src/org/netbeans/modules/maven/ActionProviderImpl.java +++ a/maven/src/org/netbeans/modules/maven/ActionProviderImpl.java @@ -59,6 +59,7 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.versioning.ComparableVersion; import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectActions; import org.netbeans.api.project.ui.OpenProjects; import static org.netbeans.modules.maven.Bundle.*; import org.netbeans.modules.maven.api.Constants; @@ -115,25 +116,25 @@ private final Project proj; private static String[] supported = new String[]{ - COMMAND_BUILD, + ProjectActions.COMMAND_BUILD, BUILD_WITH_DEPENDENCIES, - COMMAND_CLEAN, - COMMAND_REBUILD, + ProjectActions.COMMAND_CLEAN, + ProjectActions.COMMAND_REBUILD, "javadoc", //NOI18N - COMMAND_TEST, - COMMAND_TEST_SINGLE, - COMMAND_RUN, - COMMAND_RUN_SINGLE, - COMMAND_DEBUG, - COMMAND_DEBUG_SINGLE, - COMMAND_DEBUG_TEST_SINGLE, + ProjectActions.COMMAND_TEST, + ProjectActions.COMMAND_TEST_SINGLE, + ProjectActions.COMMAND_RUN, + ProjectActions.COMMAND_RUN_SINGLE, + ProjectActions.COMMAND_DEBUG, + ProjectActions.COMMAND_DEBUG_SINGLE, + ProjectActions.COMMAND_DEBUG_TEST_SINGLE, "debug.fix", //NOI18N //operations - COMMAND_DELETE, - COMMAND_RENAME, - COMMAND_MOVE, - COMMAND_COPY + ProjectActions.COMMAND_DELETE, + ProjectActions.COMMAND_RENAME, + ProjectActions.COMMAND_MOVE, + ProjectActions.COMMAND_COPY }; Lookup.Result result; @@ -187,20 +188,20 @@ return; } } - if (COMMAND_DELETE.equals(action)) { + if (ProjectActions.COMMAND_DELETE.equals(action)) { DefaultProjectOperations.performDefaultDeleteOperation(proj); return; } - if (COMMAND_COPY.equals(action)) { + if (ProjectActions.COMMAND_COPY.equals(action)) { DefaultProjectOperations.performDefaultCopyOperation(proj); return; } - if (COMMAND_MOVE.equals(action)) { + if (ProjectActions.COMMAND_MOVE.equals(action)) { DefaultProjectOperations.performDefaultMoveOperation(proj); return; } - if (COMMAND_RENAME.equals(action)) { + if (ProjectActions.COMMAND_RENAME.equals(action)) { Operations.renameProject(proj.getLookup().lookup(NbMavenProjectImpl.class)); return; } @@ -263,17 +264,17 @@ //#118926 prevent NPE, how come the dobj is null? String dobjName = dobj != null ? dobj.getName() : ""; //NOI18N - if (ActionProvider.COMMAND_RUN.equals(action)) { + if (ProjectActions.COMMAND_RUN.equals(action)) { title = TXT_Run(prj.getMavenProject().getArtifactId()); - } else if (ActionProvider.COMMAND_DEBUG.equals(action)) { + } else if (ProjectActions.COMMAND_DEBUG.equals(action)) { title = TXT_Debug(prj.getMavenProject().getArtifactId()); - } else if (ActionProvider.COMMAND_TEST.equals(action)) { + } else if (ProjectActions.COMMAND_TEST.equals(action)) { title = TXT_Test(prj.getMavenProject().getArtifactId()); - } else if (action.startsWith(ActionProvider.COMMAND_RUN_SINGLE)) { + } else if (action.startsWith(ProjectActions.COMMAND_RUN_SINGLE)) { title = TXT_Run(dobjName); - } else if (action.startsWith(ActionProvider.COMMAND_DEBUG_SINGLE) || ActionProvider.COMMAND_DEBUG_TEST_SINGLE.equals(action)) { + } else if (action.startsWith(ProjectActions.COMMAND_DEBUG_SINGLE) || ProjectActions.COMMAND_DEBUG_TEST_SINGLE.equals(action)) { title = TXT_Debug(dobjName); - } else if (ActionProvider.COMMAND_TEST_SINGLE.equals(action)) { + } else if (ProjectActions.COMMAND_TEST_SINGLE.equals(action)) { title = TXT_Test(dobjName); } else { title = TXT_Build(prj.getMavenProject().getArtifactId()); @@ -283,10 +284,10 @@ @Override public boolean isActionEnabled(String action, Lookup lookup) { - if (COMMAND_DELETE.equals(action) || - COMMAND_RENAME.equals(action) || - COMMAND_COPY.equals(action) || - COMMAND_MOVE.equals(action)) { + if (ProjectActions.COMMAND_DELETE.equals(action) || + ProjectActions.COMMAND_RENAME.equals(action) || + ProjectActions.COMMAND_COPY.equals(action) || + ProjectActions.COMMAND_MOVE.equals(action)) { return true; } if (action.equals(SingleMethod.COMMAND_RUN_SINGLE_METHOD) || action.equals(SingleMethod.COMMAND_DEBUG_SINGLE_METHOD)) { --- a/maven/src/org/netbeans/modules/maven/TestChecker.java +++ a/maven/src/org/netbeans/modules/maven/TestChecker.java @@ -42,6 +42,7 @@ package org.netbeans.modules.maven; +import org.netbeans.api.project.ProjectActions; import org.netbeans.modules.maven.api.execute.PrerequisitesChecker; import org.netbeans.modules.maven.api.execute.RunConfig; import org.netbeans.modules.maven.api.execute.RunUtils; @@ -66,9 +67,9 @@ @Override public boolean checkRunConfig(RunConfig config) { String action = config.getActionName(); - if (ActionProvider.COMMAND_TEST.equals(action) || - ActionProvider.COMMAND_TEST_SINGLE.equals(action) || - ActionProvider.COMMAND_DEBUG_TEST_SINGLE.equals(action) || + if (ProjectActions.COMMAND_TEST.equals(action) || + ProjectActions.COMMAND_TEST_SINGLE.equals(action) || + ProjectActions.COMMAND_DEBUG_TEST_SINGLE.equals(action) || "profile-tests".equals(action)) { //NOI18N - profile-tests is not really nice but well. if (!RunUtils.hasTestCompileOnSaveEnabled(config)) { String test = config.getProperties().get("test"); --- a/maven/src/org/netbeans/modules/maven/configurations/M2ConfigProvider.java +++ a/maven/src/org/netbeans/modules/maven/configurations/M2ConfigProvider.java @@ -55,6 +55,7 @@ import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; +import org.netbeans.api.project.ProjectActions; import org.netbeans.modules.maven.NbMavenProjectImpl; import org.netbeans.modules.maven.api.NbMavenProject; import org.netbeans.modules.maven.api.ProjectProfileHandler; @@ -236,7 +237,7 @@ } public @Override boolean configurationsAffectAction(String action) { - if (ActionProvider.COMMAND_DELETE.equals(action) || ActionProvider.COMMAND_COPY.equals(action) || ActionProvider.COMMAND_MOVE.equals(action)) { + if (ProjectActions.COMMAND_DELETE.equals(action) || ProjectActions.COMMAND_COPY.equals(action) || ProjectActions.COMMAND_MOVE.equals(action)) { return false; } return true; --- a/maven/src/org/netbeans/modules/maven/cos/CosChecker.java +++ a/maven/src/org/netbeans/modules/maven/cos/CosChecker.java @@ -72,6 +72,7 @@ import org.netbeans.modules.maven.api.execute.RunConfig; import org.netbeans.api.java.project.runner.JavaRunner; import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectActions; import org.netbeans.api.project.ProjectUtils; import org.netbeans.api.project.SourceGroup; import org.netbeans.api.project.ui.OpenProjects; @@ -108,8 +109,8 @@ public class CosChecker implements PrerequisitesChecker, LateBoundPrerequisitesChecker { static final String NB_COS = ".netbeans_automatic_build"; //NOI18N - private static final String RUN_MAIN = ActionProvider.COMMAND_RUN_SINGLE + ".main"; //NOI18N - private static final String DEBUG_MAIN = ActionProvider.COMMAND_DEBUG_SINGLE + ".main"; //NOI18N + private static final String RUN_MAIN = ProjectActions.COMMAND_RUN_SINGLE + ".main"; //NOI18N + private static final String DEBUG_MAIN = ProjectActions.COMMAND_DEBUG_SINGLE + ".main"; //NOI18N public boolean checkRunConfig(RunConfig config) { if (config.getProject() == null) { @@ -132,7 +133,7 @@ // we only can rely on Run via JavaRunner and via DeployOnSave // any other means of long term execution will not keep the CoS stamp around while running.. // -->> ONLY DELETE FOR BUILD ACTION - if (ActionProvider.COMMAND_BUILD.equals(config.getActionName())) { + if (ProjectActions.COMMAND_BUILD.equals(config.getActionName())) { deleteCoSTimeStamp(config, true); deleteCoSTimeStamp(config, false); //do clean the generated class files everytime, that won't hurt anything @@ -145,7 +146,7 @@ } Logger.getLogger(CosChecker.class.getName()).log(Level.INFO, "Compile on Save Clean failed", ex); } - } else if (!ActionProvider.COMMAND_REBUILD.equals(config.getActionName())) { + } else if (!ProjectActions.COMMAND_REBUILD.equals(config.getActionName())) { //now for all custom and non-build only related actions, //make sure we place the stamp files into all opened projects. Project[] opened = OpenProjects.getDefault().getOpenProjects(); @@ -229,8 +230,8 @@ if (RunUtils.hasApplicationCompileOnSaveEnabled(config)) { if ((NbMavenProject.TYPE_JAR.equals( config.getProject().getLookup().lookup(NbMavenProject.class).getPackagingType()) && - (ActionProvider.COMMAND_RUN.equals(actionName) || - ActionProvider.COMMAND_DEBUG.equals(actionName))) || + (ProjectActions.COMMAND_RUN.equals(actionName) || + ProjectActions.COMMAND_DEBUG.equals(actionName))) || RUN_MAIN.equals(actionName) || DEBUG_MAIN.equals(actionName)) { long stamp = getLastCoSLastTouch(config, false); @@ -319,8 +320,8 @@ private boolean checkRunTest(RunConfig config) { String actionName = config.getActionName(); if (RunUtils.hasTestCompileOnSaveEnabled(config) && - (ActionProvider.COMMAND_TEST_SINGLE.equals(actionName) || - ActionProvider.COMMAND_DEBUG_TEST_SINGLE.equals(actionName))) { + (ProjectActions.COMMAND_TEST_SINGLE.equals(actionName) || + ProjectActions.COMMAND_DEBUG_TEST_SINGLE.equals(actionName))) { String testng = PluginPropertyUtils.getPluginProperty(config.getMavenProject(), Constants.GROUP_APACHE_PLUGINS, Constants.PLUGIN_SUREFIRE, "testNGArtifactName", "test"); //NOI18N if (testng == null) { @@ -451,7 +452,7 @@ } if (DefaultReplaceTokenProvider.METHOD_NAME.equals(entry.getKey())) { params.put("methodname", entry.getValue()); // NOI18N - actionName = ActionProvider.COMMAND_TEST_SINGLE.equals(actionName) ? SingleMethod.COMMAND_RUN_SINGLE_METHOD : SingleMethod.COMMAND_DEBUG_SINGLE_METHOD; + actionName = ProjectActions.COMMAND_TEST_SINGLE.equals(actionName) ? SingleMethod.COMMAND_RUN_SINGLE_METHOD : SingleMethod.COMMAND_DEBUG_SINGLE_METHOD; continue; } //TODO do these have preference to ones defined in surefire plugin? @@ -727,15 +728,15 @@ } private String action2Quick(String actionName) { - if (ActionProvider.COMMAND_CLEAN.equals(actionName)) { + if (ProjectActions.COMMAND_CLEAN.equals(actionName)) { return JavaRunner.QUICK_CLEAN; - } else if (ActionProvider.COMMAND_RUN.equals(actionName) || RUN_MAIN.equals(actionName)) { + } else if (ProjectActions.COMMAND_RUN.equals(actionName) || RUN_MAIN.equals(actionName)) { return JavaRunner.QUICK_RUN; - } else if (ActionProvider.COMMAND_DEBUG.equals(actionName) || DEBUG_MAIN.equals(actionName)) { + } else if (ProjectActions.COMMAND_DEBUG.equals(actionName) || DEBUG_MAIN.equals(actionName)) { return JavaRunner.QUICK_DEBUG; - } else if (ActionProvider.COMMAND_TEST.equals(actionName) || ActionProvider.COMMAND_TEST_SINGLE.equals(actionName) || SingleMethod.COMMAND_RUN_SINGLE_METHOD.equals(actionName)) { + } else if (ProjectActions.COMMAND_TEST.equals(actionName) || ProjectActions.COMMAND_TEST_SINGLE.equals(actionName) || SingleMethod.COMMAND_RUN_SINGLE_METHOD.equals(actionName)) { return JavaRunner.QUICK_TEST; - } else if (ActionProvider.COMMAND_DEBUG_TEST_SINGLE.equals(actionName) || SingleMethod.COMMAND_DEBUG_SINGLE_METHOD.equals(actionName)) { + } else if (ProjectActions.COMMAND_DEBUG_TEST_SINGLE.equals(actionName) || SingleMethod.COMMAND_DEBUG_SINGLE_METHOD.equals(actionName)) { return JavaRunner.QUICK_TEST_DEBUG; } assert false : "Cannot convert " + actionName + " to quick actions."; --- a/maven/src/org/netbeans/modules/maven/customizer/ActionMappings.java +++ a/maven/src/org/netbeans/modules/maven/customizer/ActionMappings.java @@ -79,6 +79,7 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import org.netbeans.api.annotations.common.NullAllowed; +import org.netbeans.api.project.ProjectActions; import org.netbeans.modules.maven.spi.grammar.GoalsProvider; import org.netbeans.modules.maven.api.customizer.ModelHandle; import org.netbeans.modules.maven.NbMavenProjectImpl; @@ -179,20 +180,20 @@ this(); project = proj; handle = hand; - titles.put(ActionProvider.COMMAND_BUILD, NbBundle.getMessage(ActionMappings.class, "COM_Build_project")); - titles.put(ActionProvider.COMMAND_CLEAN, NbBundle.getMessage(ActionMappings.class, "COM_Clean_project")); - titles.put(ActionProvider.COMMAND_COMPILE_SINGLE, NbBundle.getMessage(ActionMappings.class, "COM_Compile_file")); - titles.put(ActionProvider.COMMAND_DEBUG, NbBundle.getMessage(ActionMappings.class, "COM_Debug_project")); - titles.put(ActionProvider.COMMAND_DEBUG_SINGLE + ".main", NbBundle.getMessage(ActionMappings.class, "COM_Debug_file_main")); - titles.put(ActionProvider.COMMAND_DEBUG_SINGLE + ".deploy", NbBundle.getMessage(ActionMappings.class, "COM_Debug_file_deploy")); - titles.put(ActionProvider.COMMAND_DEBUG_STEP_INTO, null); - titles.put(ActionProvider.COMMAND_DEBUG_TEST_SINGLE, NbBundle.getMessage(ActionMappings.class, "COM_Debug_test")); - titles.put(ActionProvider.COMMAND_REBUILD, NbBundle.getMessage(ActionMappings.class, "COM_ReBuild_project")); - titles.put(ActionProvider.COMMAND_RUN, NbBundle.getMessage(ActionMappings.class, "COM_Run_project")); - titles.put(ActionProvider.COMMAND_RUN_SINGLE + ".main", NbBundle.getMessage(ActionMappings.class, "COM_Run_file_main")); - titles.put(ActionProvider.COMMAND_RUN_SINGLE + ".deploy", NbBundle.getMessage(ActionMappings.class, "COM_Run_file_deploy")); - titles.put(ActionProvider.COMMAND_TEST, NbBundle.getMessage(ActionMappings.class, "COM_Test_project")); - titles.put(ActionProvider.COMMAND_TEST_SINGLE, NbBundle.getMessage(ActionMappings.class, "COM_Test_file")); + titles.put(ProjectActions.COMMAND_BUILD, NbBundle.getMessage(ActionMappings.class, "COM_Build_project")); + titles.put(ProjectActions.COMMAND_CLEAN, NbBundle.getMessage(ActionMappings.class, "COM_Clean_project")); + titles.put(ProjectActions.COMMAND_COMPILE_SINGLE, NbBundle.getMessage(ActionMappings.class, "COM_Compile_file")); + titles.put(ProjectActions.COMMAND_DEBUG, NbBundle.getMessage(ActionMappings.class, "COM_Debug_project")); + titles.put(ProjectActions.COMMAND_DEBUG_SINGLE + ".main", NbBundle.getMessage(ActionMappings.class, "COM_Debug_file_main")); + titles.put(ProjectActions.COMMAND_DEBUG_SINGLE + ".deploy", NbBundle.getMessage(ActionMappings.class, "COM_Debug_file_deploy")); + titles.put(ProjectActions.COMMAND_DEBUG_STEP_INTO, null); + titles.put(ProjectActions.COMMAND_DEBUG_TEST_SINGLE, NbBundle.getMessage(ActionMappings.class, "COM_Debug_test")); + titles.put(ProjectActions.COMMAND_REBUILD, NbBundle.getMessage(ActionMappings.class, "COM_ReBuild_project")); + titles.put(ProjectActions.COMMAND_RUN, NbBundle.getMessage(ActionMappings.class, "COM_Run_project")); + titles.put(ProjectActions.COMMAND_RUN_SINGLE + ".main", NbBundle.getMessage(ActionMappings.class, "COM_Run_file_main")); + titles.put(ProjectActions.COMMAND_RUN_SINGLE + ".deploy", NbBundle.getMessage(ActionMappings.class, "COM_Run_file_deploy")); + titles.put(ProjectActions.COMMAND_TEST, NbBundle.getMessage(ActionMappings.class, "COM_Test_project")); + titles.put(ProjectActions.COMMAND_TEST_SINGLE, NbBundle.getMessage(ActionMappings.class, "COM_Test_file")); titles.put("profile", NbBundle.getMessage(ActionMappings.class, "COM_Profile_project")); titles.put("javadoc", NbBundle.getMessage(ActionMappings.class, "COM_Javadoc_project")); titles.put(ActionProviderImpl.BUILD_WITH_DEPENDENCIES, NbBundle.getMessage(ActionMappings.class, "COM_Build_WithDeps_project")); @@ -565,23 +566,23 @@ if (handle != null) { boolean isWar = NbMavenProject.TYPE_WAR.equalsIgnoreCase(project.getProjectWatcher().getPackagingType()); - addSingleAction(ActionProvider.COMMAND_BUILD, model); - addSingleAction(ActionProvider.COMMAND_CLEAN, model); - addSingleAction(ActionProvider.COMMAND_REBUILD, model); + addSingleAction(ProjectActions.COMMAND_BUILD, model); + addSingleAction(ProjectActions.COMMAND_CLEAN, model); + addSingleAction(ProjectActions.COMMAND_REBUILD, model); addSingleAction(ActionProviderImpl.BUILD_WITH_DEPENDENCIES, model); - addSingleAction(ActionProvider.COMMAND_TEST, model); - addSingleAction(ActionProvider.COMMAND_TEST_SINGLE, model); - addSingleAction(ActionProvider.COMMAND_RUN, model); - addSingleAction(ActionProvider.COMMAND_RUN_SINGLE + ".main", model); //NOI18N + addSingleAction(ProjectActions.COMMAND_TEST, model); + addSingleAction(ProjectActions.COMMAND_TEST_SINGLE, model); + addSingleAction(ProjectActions.COMMAND_RUN, model); + addSingleAction(ProjectActions.COMMAND_RUN_SINGLE + ".main", model); //NOI18N if (isWar) { - addSingleAction(ActionProvider.COMMAND_RUN_SINGLE + ".deploy", model); //NOI18N + addSingleAction(ProjectActions.COMMAND_RUN_SINGLE + ".deploy", model); //NOI18N } - addSingleAction(ActionProvider.COMMAND_DEBUG, model); - addSingleAction(ActionProvider.COMMAND_DEBUG_SINGLE + ".main", model); //NOI18N + addSingleAction(ProjectActions.COMMAND_DEBUG, model); + addSingleAction(ProjectActions.COMMAND_DEBUG_SINGLE + ".main", model); //NOI18N if (isWar) { - addSingleAction(ActionProvider.COMMAND_DEBUG_SINGLE + ".deploy", model); //NOI18N + addSingleAction(ProjectActions.COMMAND_DEBUG_SINGLE + ".deploy", model); //NOI18N } - addSingleAction(ActionProvider.COMMAND_DEBUG_TEST_SINGLE, model); + addSingleAction(ProjectActions.COMMAND_DEBUG_TEST_SINGLE, model); addSingleAction("profile", model); //NOI18N addSingleAction("javadoc", model); //NOI18N } --- a/maven/src/org/netbeans/modules/maven/customizer/RunJarPanel.java +++ a/maven/src/org/netbeans/modules/maven/customizer/RunJarPanel.java @@ -68,6 +68,7 @@ import org.netbeans.modules.maven.classpath.MavenSourcesImpl; import org.netbeans.modules.maven.NbMavenProjectImpl; import org.netbeans.api.java.project.JavaProjectConstants; +import org.netbeans.api.project.ProjectActions; import org.netbeans.api.project.ProjectUtils; import org.netbeans.api.project.SourceGroup; import org.netbeans.api.project.Sources; @@ -197,10 +198,10 @@ @SuppressWarnings("unchecked") List lst = mapp.getActions(); for (NetbeansActionMapping m : lst) { - if (ActionProvider.COMMAND_RUN.equals(m.getActionName())) { + if (ProjectActions.COMMAND_RUN.equals(m.getActionName())) { run = m; } - if (ActionProvider.COMMAND_DEBUG.equals(m.getActionName())) { + if (ProjectActions.COMMAND_DEBUG.equals(m.getActionName())) { debug = m; } if (PROFILE_CMD.equals(m.getActionName())) { @@ -208,10 +209,10 @@ } } if (run == null) { - run = ModelHandle.getDefaultMapping(ActionProvider.COMMAND_RUN, project); + run = ModelHandle.getDefaultMapping(ProjectActions.COMMAND_RUN, project); } if (debug == null) { - debug = ModelHandle.getDefaultMapping(ActionProvider.COMMAND_DEBUG, project); + debug = ModelHandle.getDefaultMapping(ProjectActions.COMMAND_DEBUG, project); } if (profile == null) { profile = ModelHandle.getDefaultMapping(PROFILE_CMD, project); --- a/maven/src/org/netbeans/modules/maven/debug/DebuggerChecker.java +++ a/maven/src/org/netbeans/modules/maven/debug/DebuggerChecker.java @@ -54,6 +54,7 @@ import org.netbeans.api.java.classpath.ClassPath; import org.netbeans.api.java.queries.SourceForBinaryQuery; import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectActions; import org.netbeans.modules.maven.api.Constants; import org.netbeans.modules.maven.api.NbMavenProject; import org.netbeans.modules.maven.api.PluginPropertyUtils; @@ -88,7 +89,7 @@ return true; } boolean debug = "true".equalsIgnoreCase(config.getProperties().get(Constants.ACTION_PROPERTY_JPDALISTEN));//NOI18N - if (debug && ActionProvider.COMMAND_DEBUG_TEST_SINGLE.equalsIgnoreCase(config.getActionName()) && config.getGoals().contains("surefire:test")) { //NOI18N - just a safeguard + if (debug && ProjectActions.COMMAND_DEBUG_TEST_SINGLE.equalsIgnoreCase(config.getActionName()) && config.getGoals().contains("surefire:test")) { //NOI18N - just a safeguard String newArgs = config.getProperties().get(MAVENSUREFIREDEBUG); //NOI18N String oldArgs = config.getProperties().get(ARGLINE); //NOI18N @@ -160,7 +161,7 @@ LOGGER.log(Level.INFO, th.getMessage(), th); } } - if (ActionProvider.COMMAND_DEBUG_STEP_INTO.equals(config.getActionName())) { + if (ProjectActions.COMMAND_DEBUG_STEP_INTO.equals(config.getActionName())) { //TODO - change the goal from compile to test-compile in case of file coming from //the test source roots.. } --- a/maven/src/org/netbeans/modules/maven/execute/ActionToGoalUtils.java +++ a/maven/src/org/netbeans/modules/maven/execute/ActionToGoalUtils.java @@ -58,6 +58,7 @@ import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import org.netbeans.api.progress.ProgressHandle; import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectActions; import org.netbeans.api.project.ProjectUtils; import org.netbeans.modules.maven.api.FileUtilities; import org.netbeans.modules.maven.api.execute.ExecutionContext; @@ -109,7 +110,7 @@ if (rc == null) { // for build and rebuild check the pom for default goal and run that one.. - if (ActionProvider.COMMAND_BUILD.equals(action) || ActionProvider.COMMAND_REBUILD.equals(action)) { + if (ProjectActions.COMMAND_BUILD.equals(action) || ProjectActions.COMMAND_REBUILD.equals(action)) { Build bld = project.getOriginalMavenProject().getBuild(); if (bld != null) { String goal = bld.getDefaultGoal(); @@ -122,7 +123,7 @@ while (tok.hasMoreTokens()) { toRet.add(tok.nextToken()); } - if (ActionProvider.COMMAND_REBUILD.equals(action)) { + if (ProjectActions.COMMAND_REBUILD.equals(action)) { toRet.add(0, "clean"); //NOI18N } brc.setGoals(toRet); @@ -163,8 +164,8 @@ return true; } - if (ActionProvider.COMMAND_BUILD.equals(action) || - ActionProvider.COMMAND_REBUILD.equals(action)) { + if (ProjectActions.COMMAND_BUILD.equals(action) || + ProjectActions.COMMAND_REBUILD.equals(action)) { Build bld = project.getOriginalMavenProject().getBuild(); if (bld != null) { String goal = bld.getDefaultGoal(); --- a/maven/src/org/netbeans/modules/maven/execute/DefaultReplaceTokenProvider.java +++ a/maven/src/org/netbeans/modules/maven/execute/DefaultReplaceTokenProvider.java @@ -53,6 +53,7 @@ import org.netbeans.api.java.source.ClasspathInfo; import org.netbeans.api.java.source.SourceUtils; import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectActions; import org.netbeans.api.project.ProjectUtils; import org.netbeans.api.project.SourceGroup; import org.netbeans.api.project.Sources; @@ -152,8 +153,8 @@ replaceMap.put(CLASSPATHSCOPE,"runtime"); //NOI18N } if (tuple.group != null && MavenSourcesImpl.NAME_SOURCE.equals(tuple.group.getName()) && - (ActionProvider.COMMAND_TEST_SINGLE.equals(actionName) || - ActionProvider.COMMAND_DEBUG_TEST_SINGLE.equals(actionName))) { + (ProjectActions.COMMAND_TEST_SINGLE.equals(actionName) || + ProjectActions.COMMAND_DEBUG_TEST_SINGLE.equals(actionName))) { String withExt = replaceMap.get(CLASSNAME_EXT); if (withExt != null && withExt.endsWith(".java")) {//NOI18N replaceMap.put(CLASSNAME_EXT, withExt.replace(".java", "Test.java"));//NOI18N @@ -246,13 +247,13 @@ @Override public String convert(String action, Lookup lookup) { if (SingleMethod.COMMAND_DEBUG_SINGLE_METHOD.equals(action)) { - return ActionProvider.COMMAND_DEBUG_TEST_SINGLE; + return ProjectActions.COMMAND_DEBUG_TEST_SINGLE; } if (SingleMethod.COMMAND_RUN_SINGLE_METHOD.equals(action)) { - return ActionProvider.COMMAND_TEST_SINGLE; + return ProjectActions.COMMAND_TEST_SINGLE; } - if (ActionProvider.COMMAND_RUN_SINGLE.equals(action) || - ActionProvider.COMMAND_DEBUG_SINGLE.equals(action)) { + if (ProjectActions.COMMAND_RUN_SINGLE.equals(action) || + ProjectActions.COMMAND_DEBUG_SINGLE.equals(action)) { FileObject[] fos = extractFileObjectsfromLookup(lookup); if (fos.length > 0) { FileObject fo = fos[0]; --- a/maven/src/org/netbeans/modules/maven/runjar/RunJarPrereqChecker.java +++ a/maven/src/org/netbeans/modules/maven/runjar/RunJarPrereqChecker.java @@ -52,6 +52,7 @@ import javax.swing.event.ChangeListener; import org.netbeans.api.java.project.JavaProjectConstants; import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectActions; import org.netbeans.api.project.ProjectUtils; import org.netbeans.api.project.SourceGroup; import org.netbeans.api.project.Sources; @@ -102,8 +103,8 @@ } } - if ((ActionProvider.COMMAND_RUN.equals(actionName) || - ActionProvider.COMMAND_DEBUG.equals(actionName) || + if ((ProjectActions.COMMAND_RUN.equals(actionName) || + ProjectActions.COMMAND_DEBUG.equals(actionName) || "profile".equals(actionName))) { String mc = null; for (Map.Entry entry : config.getProperties().entrySet()) { --- a/maven/src/org/netbeans/modules/maven/runjar/RunJarStartupArgs.java +++ a/maven/src/org/netbeans/modules/maven/runjar/RunJarStartupArgs.java @@ -47,6 +47,7 @@ import java.util.Map; import org.netbeans.api.extexecution.startup.StartupExtender; import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectActions; import org.netbeans.modules.maven.api.NbMavenProject; import org.netbeans.modules.maven.api.execute.ActiveJ2SEPlatformProvider; import org.netbeans.modules.maven.api.execute.ExecutionContext; @@ -61,15 +62,15 @@ public class RunJarStartupArgs implements LateBoundPrerequisitesChecker { // XXX introduce constant w/ CosChecker, ActionMappings, DefaultReplaceTokenProvider - private static final String RUN_MAIN = ActionProvider.COMMAND_RUN_SINGLE + ".main"; - private static final String DEBUG_MAIN = ActionProvider.COMMAND_DEBUG_SINGLE + ".main"; + private static final String RUN_MAIN = ProjectActions.COMMAND_RUN_SINGLE + ".main"; + private static final String DEBUG_MAIN = ProjectActions.COMMAND_DEBUG_SINGLE + ".main"; @Override public boolean checkRunConfig(RunConfig config, ExecutionContext con) { String actionName = config.getActionName(); StartupExtender.StartMode mode; - if (ActionProvider.COMMAND_RUN.equals(actionName) || RUN_MAIN.equals(actionName)) { + if (ProjectActions.COMMAND_RUN.equals(actionName) || RUN_MAIN.equals(actionName)) { mode = StartupExtender.StartMode.NORMAL; - } else if (ActionProvider.COMMAND_DEBUG.equals(actionName) || DEBUG_MAIN.equals(actionName)) { + } else if (ProjectActions.COMMAND_DEBUG.equals(actionName) || DEBUG_MAIN.equals(actionName)) { mode = StartupExtender.StartMode.DEBUG; } else if ("profile".equals(actionName)) { mode = StartupExtender.StartMode.PROFILE; --- a/projectapi/nbproject/project.xml +++ a/projectapi/nbproject/project.xml @@ -50,6 +50,15 @@ org.netbeans.modules.projectapi + org.netbeans.api.annotations.common + + + + 1 + 1.13 + + + org.netbeans.modules.queries --- a/projectapi/src/META-INF/upgrade/ActionProvider.hint +++ a/projectapi/src/META-INF/upgrade/ActionProvider.hint @@ -0,0 +1,16 @@ +org.netbeans.spi.project.ActionProvider.COMMAND_BUILD => org.netbeans.api.project.ProjectActions.COMMAND_BUILD;; +org.netbeans.spi.project.ActionProvider.COMMAND_COMPILE_SINGLE => org.netbeans.api.project.ProjectActions.COMMAND_COMPILE_SINGLE;; +org.netbeans.spi.project.ActionProvider.COMMAND_CLEAN => org.netbeans.api.project.ProjectActions.COMMAND_CLEAN;; +org.netbeans.spi.project.ActionProvider.COMMAND_REBUILD => org.netbeans.api.project.ProjectActions.COMMAND_REBUILD;; +org.netbeans.spi.project.ActionProvider.COMMAND_RUN => org.netbeans.api.project.ProjectActions.COMMAND_RUN;; +org.netbeans.spi.project.ActionProvider.COMMAND_RUN_SINGLE => org.netbeans.api.project.ProjectActions.COMMAND_RUN_SINGLE;; +org.netbeans.spi.project.ActionProvider.COMMAND_TEST => org.netbeans.api.project.ProjectActions.COMMAND_TEST;; +org.netbeans.spi.project.ActionProvider.COMMAND_TEST_SINGLE => org.netbeans.api.project.ProjectActions.COMMAND_TEST_SINGLE;; +org.netbeans.spi.project.ActionProvider.COMMAND_DEBUG => org.netbeans.api.project.ProjectActions.COMMAND_DEBUG;; +org.netbeans.spi.project.ActionProvider.COMMAND_DEBUG_SINGLE => org.netbeans.api.project.ProjectActions.COMMAND_DEBUG_SINGLE;; +org.netbeans.spi.project.ActionProvider.COMMAND_DEBUG_TEST_SINGLE => org.netbeans.api.project.ProjectActions.COMMAND_DEBUG_TEST_SINGLE;; +org.netbeans.spi.project.ActionProvider.COMMAND_DEBUG_STEP_INTO => org.netbeans.api.project.ProjectActions.COMMAND_DEBUG_STEP_INTO;; +org.netbeans.spi.project.ActionProvider.COMMAND_DELETE => org.netbeans.api.project.ProjectActions.COMMAND_DELETE;; +org.netbeans.spi.project.ActionProvider.COMMAND_COPY => org.netbeans.api.project.ProjectActions.COMMAND_COPY;; +org.netbeans.spi.project.ActionProvider.COMMAND_MOVE => org.netbeans.api.project.ProjectActions.COMMAND_MOVE;; +org.netbeans.spi.project.ActionProvider.COMMAND_RENAME => org.netbeans.api.project.ProjectActions.COMMAND_RENAME;; --- a/projectapi/src/org/netbeans/api/project/Project.java +++ a/projectapi/src/org/netbeans/api/project/Project.java @@ -94,7 +94,7 @@ *
  • LogicalViewProvider
  • *
  • CustomizerProvider
  • *
  • {@link org.netbeans.api.project.Sources}
  • - *
  • {@link org.netbeans.spi.project.ActionProvider}
  • + *
  • {@link org.netbeans.spi.project.ActionProvider2}
  • *
  • {@link org.netbeans.spi.project.SubprojectProvider}
  • *
  • {@link org.netbeans.spi.project.AuxiliaryConfiguration}
  • *
  • {@link org.netbeans.spi.project.AuxiliaryProperties}
  • --- a/projectapi/src/org/netbeans/api/project/ProjectActions.java +++ a/projectapi/src/org/netbeans/api/project/ProjectActions.java @@ -0,0 +1,208 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 2012 Oracle and/or its affiliates. All rights reserved. + * + * Oracle and Java are registered trademarks of Oracle and/or its affiliates. + * Other names may be trademarks of their respective owners. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common + * Development and Distribution License("CDDL") (collectively, the + * "License"). You may not use this file except in compliance with the + * License. You can obtain a copy of the License at + * http://www.netbeans.org/cddl-gplv2.html + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the + * specific language governing permissions and limitations under the + * License. When distributing the software, include this License Header + * Notice in each file and include the License file at + * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the + * License Header, with the fields enclosed by brackets [] replaced by + * your own identifying information: + * "Portions Copyrighted [year] [name of copyright owner]" + * + * If you wish your version of this file to be governed by only the CDDL + * or only the GPL Version 2, indicate your decision by adding + * "[Contributor] elects to include this software in this distribution + * under the [CDDL or GPL Version 2] license." If you do not indicate a + * single choice of license, a recipient has the option to distribute + * your version of this file under either the CDDL, the GPL Version 2 or + * to extend the choice of license to its licensees as provided above. + * However, if you add GPL Version 2 code and therefore, elected the GPL + * Version 2 license, then the option applies only if the new code is + * made subject to such option by the copyright holder. + * + * Contributor(s): + * + * Portions Copyrighted 2012 Sun Microsystems, Inc. + */ + +package org.netbeans.api.project; + +import java.util.Arrays; +import java.util.concurrent.Callable; +import java.util.concurrent.Future; +import org.netbeans.api.annotations.common.CheckForNull; +import org.netbeans.api.annotations.common.NonNull; +import org.netbeans.spi.project.ActionProvider2; +import org.netbeans.spi.project.SingleMethod; +import org.openide.util.Exceptions; +import org.openide.util.Lookup; +import org.openide.util.RequestProcessor; + +/** + * Defines and manages actions exported by projects. + * Each possible action is identified by a command string; + * this class defines some commonly used ones, such as {@link #COMMAND_BUILD}. + * @see ActionProvider2 + * @see SingleMethod + * @since XXX + */ +public class ProjectActions { + + private static final RequestProcessor RP = new RequestProcessor(ProjectActions.class.getName(), Integer.MAX_VALUE); + + /** + * Prepare to run an action. + * @param project a project to run the action on + * @param command a predefined command string + * @param context an action context + * @return a callback to run the action, or null if disabled (or just not recognized by this project) + */ + public static @CheckForNull Callable prepare(@NonNull Project project, final @NonNull String command, final @NonNull Lookup context) { + for (ActionProvider2 ap2 : project.getLookup().lookupAll(ActionProvider2.class)) { + Callable task = ap2.prepare(command, context); + if (task != null) { + return task; + } + } + @SuppressWarnings("deprecation") + final org.netbeans.spi.project.ActionProvider ap = project.getLookup().lookup(org.netbeans.spi.project.ActionProvider.class); + if (ap != null && Arrays.asList(ap.getSupportedActions()).contains(command)) { + try { + if (ap.isActionEnabled(command, context)) { + return new Callable() { + @Override public Boolean call() throws Exception { + ap.invokeAction(command, context); + return true; + } + }; + } + } catch (IllegalArgumentException x) { + Exceptions.printStackTrace(x); + } + } + return null; + } + + /** + * Convenience method to run an action if it is enabled. + * The return value may be safely ignored if you do not depend on the result. + * @param project a project to run the action on + * @param command a predefined command string + * @param context an action context + * @return a task representing the result; will be false if the action is not defined or enabled, or was run but failed + */ + public static @NonNull Future run(@NonNull Project project, @NonNull String command, @NonNull Lookup context) { + Callable task = prepare(project, command, context); + if (task == null) { + task = new Callable() { + @Override public Boolean call() throws Exception { + return false; + } + }; + } + return RP.submit(task); + } + + /** + * Standard command to incrementally build the project. + */ + public static final String COMMAND_BUILD = "build"; // NOI18N + + /** + * Standard command for compiling set of files + */ + public static final String COMMAND_COMPILE_SINGLE = "compile.single"; // NOI18N + + /** + * Standard command to clean build products. + */ + public static final String COMMAND_CLEAN = "clean"; // NOI18N + + /** + * Standard command to do a "clean" (forced) rebuild. + */ + public static final String COMMAND_REBUILD = "rebuild"; // NOI18N + + /** + * Standard command for running the project + */ + public static final String COMMAND_RUN = "run"; // NOI18N + + /** + * Standard command for running one file + * + * @see SingleMethod#COMMAND_RUN_SINGLE_METHOD + */ + public static final String COMMAND_RUN_SINGLE = "run.single"; // NOI18N + + /** + * Standard command for running tests on given projects + */ + public static final String COMMAND_TEST = "test"; // NOI18N + + /** + * Standard command for running one test file + */ + public static final String COMMAND_TEST_SINGLE = "test.single"; // NOI18N + + /** + * Standard command for running the project in debugger + */ + public static final String COMMAND_DEBUG = "debug"; // NOI18N + + /** + * Standard command for running single file in debugger + * + * @see SingleMethod#COMMAND_DEBUG_SINGLE_METHOD + */ + public static final String COMMAND_DEBUG_SINGLE = "debug.single"; // NOI18N + + /** + * Standard command for running one test in debugger + */ + public static final String COMMAND_DEBUG_TEST_SINGLE = "debug.test.single"; // NOI18N + + /** + * Standard command for starting app in debugger and stopping at the + * beginning of app whatever that means. + */ + public static final String COMMAND_DEBUG_STEP_INTO = "debug.stepinto"; // NOI18N + + /** + * Standard command for deleting the project. + */ + public static final String COMMAND_DELETE = "delete"; // NOI18N + + /** + * Standard command for deleting the project. + */ + public static final String COMMAND_COPY = "copy"; // NOI18N + + /** + * Standard command for moving the project. + */ + public static final String COMMAND_MOVE = "move"; // NOI18N + + /** + * Standard command for renaming the project. + */ + public static final String COMMAND_RENAME = "rename"; // NOI18N + + private ProjectActions() {} + +} --- a/projectapi/src/org/netbeans/spi/project/ActionProvider.java +++ a/projectapi/src/org/netbeans/spi/project/ActionProvider.java @@ -44,6 +44,7 @@ package org.netbeans.spi.project; +import org.netbeans.api.project.ProjectActions; import org.openide.util.ContextAwareAction; import org.openide.util.Lookup; @@ -61,101 +62,27 @@ * @see ProjectSensitiveActions.projectCommandAction(...) * @see SingleMethod * @author Jesse Glick + * @deprecated Use {@link ActionProvider2} and {@link ProjectActions} instead. */ +@Deprecated public interface ActionProvider { - /** - * Standard command to incrementally build the project. - */ - String COMMAND_BUILD = "build"; // NOI18N - - /** - * Standard command for compiling set of files - */ - String COMMAND_COMPILE_SINGLE = "compile.single"; // NOI18N - - /** - * Standard command to clean build products. - */ - String COMMAND_CLEAN = "clean"; // NOI18N - - /** - * Standard command to do a "clean" (forced) rebuild. - */ - String COMMAND_REBUILD = "rebuild"; // NOI18N - - /** - * Standard command for running the project - */ - String COMMAND_RUN = "run"; // NOI18N - - /** - * Standard command for running one file - * - * @see SingleMethod#COMMAND_RUN_SINGLE_METHOD - */ - String COMMAND_RUN_SINGLE = "run.single"; // NOI18N - - /** - * Standard command for running tests on given projects - */ - String COMMAND_TEST = "test"; // NOI18N - - /** - * Standard command for running one test file - */ - String COMMAND_TEST_SINGLE = "test.single"; // NOI18N - - /** - * Standard command for running the project in debugger - */ - String COMMAND_DEBUG = "debug"; // NOI18N - - /** - * Standard command for running single file in debugger - * - * @see SingleMethod#COMMAND_DEBUG_SINGLE_METHOD - */ - String COMMAND_DEBUG_SINGLE = "debug.single"; // NOI18N - - /** - * Standard command for running one test in debugger - */ - String COMMAND_DEBUG_TEST_SINGLE = "debug.test.single"; // NOI18N - - /** - * Standard command for starting app in debugger and stopping at the - * beginning of app whatever that means. - */ - String COMMAND_DEBUG_STEP_INTO = "debug.stepinto"; // NOI18N - - /** - * Standard command for deleting the project. - * - * @since 1.6 - */ - String COMMAND_DELETE = "delete"; // NOI18N - - /** - * Standard command for deleting the project. - * - * @since 1.7 - */ - String COMMAND_COPY = "copy"; // NOI18N - - /** - * Standard command for moving the project. - * - * @since 1.7 - */ - String COMMAND_MOVE = "move"; // NOI18N - - /** - * Standard command for renaming the project. - * - * @since 1.7 - */ - String COMMAND_RENAME = "rename"; // NOI18N + String COMMAND_BUILD = ProjectActions.COMMAND_BUILD; + String COMMAND_COMPILE_SINGLE = ProjectActions.COMMAND_COMPILE_SINGLE; + String COMMAND_CLEAN = ProjectActions.COMMAND_CLEAN; + String COMMAND_REBUILD = ProjectActions.COMMAND_REBUILD; + String COMMAND_RUN = ProjectActions.COMMAND_RUN; + String COMMAND_RUN_SINGLE = ProjectActions.COMMAND_RUN_SINGLE; + String COMMAND_TEST = ProjectActions.COMMAND_TEST; + String COMMAND_TEST_SINGLE = ProjectActions.COMMAND_TEST_SINGLE; + String COMMAND_DEBUG = ProjectActions.COMMAND_DEBUG; + String COMMAND_DEBUG_SINGLE = ProjectActions.COMMAND_DEBUG_SINGLE; + String COMMAND_DEBUG_TEST_SINGLE = ProjectActions.COMMAND_DEBUG_TEST_SINGLE; + String COMMAND_DEBUG_STEP_INTO = ProjectActions.COMMAND_DEBUG_STEP_INTO; + String COMMAND_DELETE = ProjectActions.COMMAND_DELETE; + String COMMAND_COPY = ProjectActions.COMMAND_COPY; + String COMMAND_MOVE = ProjectActions.COMMAND_MOVE; + String COMMAND_RENAME = ProjectActions.COMMAND_RENAME; /** * Get a list of all commands which this project supports. --- a/projectapi/src/org/netbeans/spi/project/ActionProvider2.java +++ a/projectapi/src/org/netbeans/spi/project/ActionProvider2.java @@ -0,0 +1,82 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 2012 Oracle and/or its affiliates. All rights reserved. + * + * Oracle and Java are registered trademarks of Oracle and/or its affiliates. + * Other names may be trademarks of their respective owners. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common + * Development and Distribution License("CDDL") (collectively, the + * "License"). You may not use this file except in compliance with the + * License. You can obtain a copy of the License at + * http://www.netbeans.org/cddl-gplv2.html + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the + * specific language governing permissions and limitations under the + * License. When distributing the software, include this License Header + * Notice in each file and include the License file at + * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the + * License Header, with the fields enclosed by brackets [] replaced by + * your own identifying information: + * "Portions Copyrighted [year] [name of copyright owner]" + * + * If you wish your version of this file to be governed by only the CDDL + * or only the GPL Version 2, indicate your decision by adding + * "[Contributor] elects to include this software in this distribution + * under the [CDDL or GPL Version 2] license." If you do not indicate a + * single choice of license, a recipient has the option to distribute + * your version of this file under either the CDDL, the GPL Version 2 or + * to extend the choice of license to its licensees as provided above. + * However, if you add GPL Version 2 code and therefore, elected the GPL + * Version 2 license, then the option applies only if the new code is + * made subject to such option by the copyright holder. + * + * Contributor(s): + * + * Portions Copyrighted 2012 Sun Microsystems, Inc. + */ + +package org.netbeans.spi.project; + +import java.util.concurrent.Callable; +import org.netbeans.api.annotations.common.CheckForNull; +import org.netbeans.api.annotations.common.NonNull; +import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectActions; +import org.openide.util.ContextAwareAction; +import org.openide.util.Lookup; + +/** + * Ability for a project to have various actions (such as Build) invoked on it. + * Should be registered in a project's lookup and will be used by UI infrastructure. + * Do not search for this service in a project's lookup directly; use {@link ProjectActions} instead. + *

    + * Implementations supporting single file commands (command constants ending with + * {@code _SINGLE}) can also be registered in default lookup. If a provider in project + * lookup does not enable the action for a given command on the selected file then + * the first implementation found in default lookup that is enabled will be used. + *

    + * @see Project#getLookup + * @see ProjectActions + * @see ActionUtils + * @see ProjectSensitiveActions.projectCommandAction(...) + * @since XXX + */ +public interface ActionProvider2 { + + /** + * Prepare to run a command. + * @param command a predefined command name, such as those given in {@link ProjectActions} + * @param context any action context, e.g. for a node selection + * (as in {@link ContextAwareAction}) + * @return null if the command is unrecognized or it would be disabled in this context; + * else a task which should block until the action completes and return true if it succeeded, + * false if it failed in some way (e.g. compilation failed) + */ + @CheckForNull Callable prepare(@NonNull String command, @NonNull Lookup context); + +} --- a/projectapi/src/org/netbeans/spi/project/support/LookupProviderSupport.java +++ a/projectapi/src/org/netbeans/spi/project/support/LookupProviderSupport.java @@ -53,7 +53,7 @@ import javax.swing.event.ChangeListener; import org.netbeans.api.project.SourceGroup; import org.netbeans.api.project.Sources; -import org.netbeans.spi.project.ActionProvider; +import org.netbeans.spi.project.ActionProvider2; import org.netbeans.spi.project.LookupMerger; import org.netbeans.spi.project.LookupProvider; import org.openide.util.ChangeSupport; @@ -109,8 +109,10 @@ * enabled on it_will perform it. * @return instance to include in project lookup * @since 1.38 + * @deprecated Use {@link ActionProvider2} instead (no need for a merger). */ - public static LookupMerger createActionProviderMerger() { + @Deprecated + public static LookupMerger createActionProviderMerger() { return new ActionProviderMerger(); } @@ -196,26 +198,28 @@ } } - private static final class ActionProviderMerger implements LookupMerger { + @Deprecated + private static final class ActionProviderMerger implements LookupMerger { @Override - public Class getMergeableClass() { - return ActionProvider.class; + public Class getMergeableClass() { + return org.netbeans.spi.project.ActionProvider.class; } @Override - public ActionProvider merge(final Lookup lookup) { + public org.netbeans.spi.project.ActionProvider merge(final Lookup lookup) { return new MergedActionProvider(lookup); } } - private static final class MergedActionProvider implements ActionProvider, LookupListener { + @Deprecated + private static final class MergedActionProvider implements org.netbeans.spi.project.ActionProvider, LookupListener { - private final Lookup.Result lkpResult; + private final Lookup.Result lkpResult; @SuppressWarnings("VolatileArrayField") private volatile String[] actionNamesCache; private MergedActionProvider(final Lookup lkp) { - this.lkpResult = lkp.lookupResult(ActionProvider.class); + this.lkpResult = lkp.lookupResult(org.netbeans.spi.project.ActionProvider.class); this.lkpResult.addLookupListener(this); } @@ -224,7 +228,7 @@ String[] result = actionNamesCache; if (result == null) { final Set actionNames = new LinkedHashSet (); - for (ActionProvider ap : lkpResult.allInstances()) { + for (org.netbeans.spi.project.ActionProvider ap : lkpResult.allInstances()) { actionNames.addAll(Arrays.asList(ap.getSupportedActions())); } result = actionNames.toArray(new String[actionNames.size()]); @@ -237,7 +241,7 @@ @Override public boolean isActionEnabled(String command, Lookup context) throws IllegalArgumentException { boolean found = false; - for (ActionProvider ap : lkpResult.allInstances()) { + for (org.netbeans.spi.project.ActionProvider ap : lkpResult.allInstances()) { if (Arrays.asList(ap.getSupportedActions()).contains(command)) { if (ap.isActionEnabled(command, context)) { return true; @@ -255,7 +259,7 @@ @Override public void invokeAction(String command, Lookup context) throws IllegalArgumentException { - for (ActionProvider ap : lkpResult.allInstances()) { + for (org.netbeans.spi.project.ActionProvider ap : lkpResult.allInstances()) { if (Arrays.asList(ap.getSupportedActions()).contains(command) && ap.isActionEnabled(command, context)) { ap.invokeAction(command, context); --- a/projectapi/test/unit/src/org/netbeans/spi/project/support/LookupProviderSupportTest.java +++ a/projectapi/test/unit/src/org/netbeans/spi/project/support/LookupProviderSupportTest.java @@ -55,6 +55,7 @@ import java.util.Map; import javax.swing.Icon; import javax.swing.event.ChangeListener; +import org.netbeans.api.project.ProjectActions; import org.netbeans.api.project.SourceGroup; import org.netbeans.api.project.Sources; import org.netbeans.junit.NbTestCase; @@ -149,18 +150,18 @@ public void testActionProviderMerger() throws Exception { final ActionProviderImpl ap1 = new ActionProviderImpl(new LinkedHashMap(){ { - put(ActionProvider.COMMAND_CLEAN,Boolean.TRUE); - put(ActionProvider.COMMAND_BUILD,Boolean.TRUE); - put(ActionProvider.COMMAND_REBUILD,Boolean.TRUE); - put(ActionProvider.COMMAND_COMPILE_SINGLE,Boolean.FALSE); + put(ProjectActions.COMMAND_CLEAN,Boolean.TRUE); + put(ProjectActions.COMMAND_BUILD,Boolean.TRUE); + put(ProjectActions.COMMAND_REBUILD,Boolean.TRUE); + put(ProjectActions.COMMAND_COMPILE_SINGLE,Boolean.FALSE); } }); final ActionProviderImpl ap2 = new ActionProviderImpl(new LinkedHashMap(){ { - put(ActionProvider.COMMAND_RUN,Boolean.TRUE); - put(ActionProvider.COMMAND_TEST,Boolean.TRUE); - put(ActionProvider.COMMAND_DEBUG,Boolean.FALSE); - put(ActionProvider.COMMAND_COMPILE_SINGLE,Boolean.TRUE); + put(ProjectActions.COMMAND_RUN,Boolean.TRUE); + put(ProjectActions.COMMAND_TEST,Boolean.TRUE); + put(ProjectActions.COMMAND_DEBUG,Boolean.FALSE); + put(ProjectActions.COMMAND_COMPILE_SINGLE,Boolean.TRUE); } }); @@ -168,57 +169,57 @@ assertEquals(ActionProvider.class,merger.getMergeableClass()); final ActionProvider ap = merger.merge(Lookups.fixed(ap1,ap2)); assertEquals(Arrays.asList(new String[] { - ActionProvider.COMMAND_CLEAN, - ActionProvider.COMMAND_BUILD, - ActionProvider.COMMAND_REBUILD, - ActionProvider.COMMAND_COMPILE_SINGLE, - ActionProvider.COMMAND_RUN, - ActionProvider.COMMAND_TEST, - ActionProvider.COMMAND_DEBUG, + ProjectActions.COMMAND_CLEAN, + ProjectActions.COMMAND_BUILD, + ProjectActions.COMMAND_REBUILD, + ProjectActions.COMMAND_COMPILE_SINGLE, + ProjectActions.COMMAND_RUN, + ProjectActions.COMMAND_TEST, + ProjectActions.COMMAND_DEBUG, }), Arrays.asList(ap.getSupportedActions())); - assertTrue(ap.isActionEnabled(ActionProvider.COMMAND_CLEAN, Lookup.EMPTY)); - assertTrue(ap.isActionEnabled(ActionProvider.COMMAND_BUILD, Lookup.EMPTY)); - assertTrue(ap.isActionEnabled(ActionProvider.COMMAND_REBUILD, Lookup.EMPTY)); - assertTrue(ap.isActionEnabled(ActionProvider.COMMAND_COMPILE_SINGLE, Lookup.EMPTY)); - assertTrue(ap.isActionEnabled(ActionProvider.COMMAND_RUN, Lookup.EMPTY)); - assertTrue(ap.isActionEnabled(ActionProvider.COMMAND_TEST, Lookup.EMPTY)); - assertFalse(ap.isActionEnabled(ActionProvider.COMMAND_DEBUG, Lookup.EMPTY)); + assertTrue(ap.isActionEnabled(ProjectActions.COMMAND_CLEAN, Lookup.EMPTY)); + assertTrue(ap.isActionEnabled(ProjectActions.COMMAND_BUILD, Lookup.EMPTY)); + assertTrue(ap.isActionEnabled(ProjectActions.COMMAND_REBUILD, Lookup.EMPTY)); + assertTrue(ap.isActionEnabled(ProjectActions.COMMAND_COMPILE_SINGLE, Lookup.EMPTY)); + assertTrue(ap.isActionEnabled(ProjectActions.COMMAND_RUN, Lookup.EMPTY)); + assertTrue(ap.isActionEnabled(ProjectActions.COMMAND_TEST, Lookup.EMPTY)); + assertFalse(ap.isActionEnabled(ProjectActions.COMMAND_DEBUG, Lookup.EMPTY)); try { - ap.isActionEnabled(ActionProvider.COMMAND_MOVE, Lookup.EMPTY); + ap.isActionEnabled(ProjectActions.COMMAND_MOVE, Lookup.EMPTY); throw new AssertionError("IAE should be thrown"); //NOI18N } catch (IllegalArgumentException iae) { - assertEquals(ActionProvider.COMMAND_MOVE, iae.getMessage()); + assertEquals(ProjectActions.COMMAND_MOVE, iae.getMessage()); } - ap.invokeAction(ActionProvider.COMMAND_CLEAN, Lookup.EMPTY); - assertEquals(ActionProvider.COMMAND_CLEAN,ap1.cleanInvokedTarget()); + ap.invokeAction(ProjectActions.COMMAND_CLEAN, Lookup.EMPTY); + assertEquals(ProjectActions.COMMAND_CLEAN,ap1.cleanInvokedTarget()); assertNull(ap2.cleanInvokedTarget()); - ap.invokeAction(ActionProvider.COMMAND_BUILD, Lookup.EMPTY); - assertEquals(ActionProvider.COMMAND_BUILD,ap1.cleanInvokedTarget()); + ap.invokeAction(ProjectActions.COMMAND_BUILD, Lookup.EMPTY); + assertEquals(ProjectActions.COMMAND_BUILD,ap1.cleanInvokedTarget()); assertNull(ap2.cleanInvokedTarget()); - ap.invokeAction(ActionProvider.COMMAND_REBUILD, Lookup.EMPTY); - assertEquals(ActionProvider.COMMAND_REBUILD,ap1.cleanInvokedTarget()); + ap.invokeAction(ProjectActions.COMMAND_REBUILD, Lookup.EMPTY); + assertEquals(ProjectActions.COMMAND_REBUILD,ap1.cleanInvokedTarget()); assertNull(ap2.cleanInvokedTarget()); - ap.invokeAction(ActionProvider.COMMAND_COMPILE_SINGLE, Lookup.EMPTY); + ap.invokeAction(ProjectActions.COMMAND_COMPILE_SINGLE, Lookup.EMPTY); assertNull(ap1.cleanInvokedTarget()); - assertEquals(ActionProvider.COMMAND_COMPILE_SINGLE,ap2.cleanInvokedTarget()); - ap.invokeAction(ActionProvider.COMMAND_RUN, Lookup.EMPTY); + assertEquals(ProjectActions.COMMAND_COMPILE_SINGLE,ap2.cleanInvokedTarget()); + ap.invokeAction(ProjectActions.COMMAND_RUN, Lookup.EMPTY); assertNull(ap1.cleanInvokedTarget()); - assertEquals(ActionProvider.COMMAND_RUN,ap2.cleanInvokedTarget()); - ap.invokeAction(ActionProvider.COMMAND_TEST, Lookup.EMPTY); + assertEquals(ProjectActions.COMMAND_RUN,ap2.cleanInvokedTarget()); + ap.invokeAction(ProjectActions.COMMAND_TEST, Lookup.EMPTY); assertNull(ap1.cleanInvokedTarget()); - assertEquals(ActionProvider.COMMAND_TEST,ap2.cleanInvokedTarget()); + assertEquals(ProjectActions.COMMAND_TEST,ap2.cleanInvokedTarget()); try { - ap.invokeAction(ActionProvider.COMMAND_DEBUG, Lookup.EMPTY); + ap.invokeAction(ProjectActions.COMMAND_DEBUG, Lookup.EMPTY); throw new AssertionError("IAE should be thrown"); //NOI18N } catch (IllegalArgumentException iae) { - assertEquals(ActionProvider.COMMAND_DEBUG, iae.getMessage()); + assertEquals(ProjectActions.COMMAND_DEBUG, iae.getMessage()); } try { - ap.invokeAction(ActionProvider.COMMAND_MOVE, Lookup.EMPTY); + ap.invokeAction(ProjectActions.COMMAND_MOVE, Lookup.EMPTY); throw new AssertionError("IAE should be thrown"); //NOI18N } catch (IllegalArgumentException iae) { - assertEquals(ActionProvider.COMMAND_MOVE, iae.getMessage()); + assertEquals(ProjectActions.COMMAND_MOVE, iae.getMessage()); } } --- a/projectui/src/org/netbeans/modules/project/ui/ProjectsRootNode.java +++ a/projectui/src/org/netbeans/modules/project/ui/ProjectsRootNode.java @@ -70,12 +70,12 @@ import org.netbeans.api.annotations.common.StaticResource; import org.netbeans.api.project.FileOwnerQuery; import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectActions; import org.netbeans.spi.project.ProjectIconAnnotator; import org.netbeans.api.project.ProjectManager; import org.netbeans.api.project.ProjectUtils; import org.netbeans.api.project.SourceGroup; import org.netbeans.api.project.Sources; -import org.netbeans.spi.project.ActionProvider; import org.netbeans.spi.project.ui.LogicalViewProvider; import org.openide.filesystems.FileChangeAdapter; import org.openide.filesystems.FileChangeListener; @@ -86,7 +86,6 @@ import org.openide.filesystems.FileStatusListener; import org.openide.filesystems.FileSystem; import org.openide.filesystems.FileUtil; -import org.openide.loaders.DataObject; import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; import org.openide.nodes.FilterNode; @@ -842,17 +841,7 @@ if (p == null) { return false; } - ActionProvider ap = p.getLookup().lookup(ActionProvider.class); - - String[] sa = ap != null ? ap.getSupportedActions() : new String[0]; - int k = sa.length; - - for (int i = 0; i < k; i++) { - if (ActionProvider.COMMAND_DELETE.equals(sa[i])) { - return ap.isActionEnabled(ActionProvider.COMMAND_DELETE, getLookup()); - } - } - return false; + return ProjectActions.prepare(p, ProjectActions.COMMAND_DELETE, getLookup()) != null; } @Override @@ -861,8 +850,7 @@ if (p == null) { return; } - ActionProvider ap = p.getLookup().lookup(ActionProvider.class); - ap.invokeAction(ActionProvider.COMMAND_DELETE, getLookup()); + ProjectActions.run(p, ProjectActions.COMMAND_DELETE, getLookup()); } } // end of BadgingNode private static final class BadgingLookup extends ProxyLookup { --- a/projectui/src/org/netbeans/modules/project/ui/actions/Actions.java +++ a/projectui/src/org/netbeans/modules/project/ui/actions/Actions.java @@ -48,14 +48,13 @@ import java.beans.PropertyChangeListener; import javax.swing.Action; import javax.swing.Icon; +import org.netbeans.api.project.ProjectActions; import org.netbeans.modules.project.uiapi.ActionsFactory; -import org.netbeans.spi.project.ActionProvider; import org.netbeans.spi.project.ui.support.FileActionPerformer; import org.netbeans.spi.project.ui.support.ProjectActionPerformer; import org.openide.util.ContextAwareAction; import org.openide.util.Exceptions; import org.openide.util.ImageUtilities; -import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.actions.SystemAction; @@ -179,7 +178,7 @@ public static Action testProject() { Action a = new ProjectAction ( - ActionProvider.COMMAND_TEST, + ProjectActions.COMMAND_TEST, NbBundle.getMessage(Actions.class, "LBL_TestProjectAction_Name"), NbBundle.getMessage(Actions.class, "LBL_TestProjectAction_Name_popup"), ImageUtilities.loadImageIcon("org/netbeans/modules/project/ui/resources/testProject.png", false), @@ -192,7 +191,7 @@ public static Action buildProject() { Action a = new ProjectAction ( - ActionProvider.COMMAND_BUILD, + ProjectActions.COMMAND_BUILD, NbBundle.getMessage(Actions.class, "LBL_BuildProjectAction_Name"), NbBundle.getMessage(Actions.class, "LBL_BuildProjectAction_Name_popup"), ImageUtilities.loadImageIcon("org/netbeans/modules/project/ui/resources/buildCurrentProject.gif", false), @@ -202,8 +201,9 @@ } public static Action cleanProject() { + @SuppressWarnings("deprecation") Action a = new ProjectAction( - ActionProvider.COMMAND_CLEAN, + ProjectActions.COMMAND_CLEAN, NbBundle.getMessage(Actions.class, "LBL_CleanProjectAction_Name"), NbBundle.getMessage(Actions.class, "LBL_CleanProjectAction_Name_popup"), ImageUtilities.loadImageIcon("org/netbeans/modules/project/ui/resources/cleanCurrentProject.gif", false), @@ -214,7 +214,7 @@ public static Action rebuildProject() { Action a = new ProjectAction( - ActionProvider.COMMAND_REBUILD, + ProjectActions.COMMAND_REBUILD, NbBundle.getMessage(Actions.class, "LBL_RebuildProjectAction_Name"), NbBundle.getMessage(Actions.class, "LBL_RebuildProjectAction_Name_popup"), ImageUtilities.loadImageIcon("org/netbeans/modules/project/ui/resources/rebuildCurrentProject.gif", false), @@ -225,7 +225,7 @@ public static Action runProject() { Action a = new ProjectAction( - ActionProvider.COMMAND_RUN, + ProjectActions.COMMAND_RUN, NbBundle.getMessage(Actions.class, "LBL_RunProjectAction_Name"), NbBundle.getMessage(Actions.class, "LBL_RunProjectAction_Name_popup"), ImageUtilities.loadImageIcon("org/netbeans/modules/project/ui/resources/runCurrentProject.gif", false), @@ -236,7 +236,7 @@ public static synchronized Action deleteProject() { final Action a = new ProjectAction( - ActionProvider.COMMAND_DELETE, + ProjectActions.COMMAND_DELETE, NbBundle.getMessage(Actions.class, "LBL_DeleteProjectAction_Name"), null, null ); @@ -259,7 +259,7 @@ public static synchronized Action copyProject() { if (COPY_PROJECT == null) { Action a = new ProjectAction( - ActionProvider.COMMAND_COPY, + ProjectActions.COMMAND_COPY, NbBundle.getMessage(Actions.class, "LBL_CopyProjectAction_Name"), null, //NOI18N null ); @@ -272,7 +272,7 @@ public static synchronized Action moveProject() { if (MOVE_PROJECT == null) { Action a = new ProjectAction( - ActionProvider.COMMAND_MOVE, + ProjectActions.COMMAND_MOVE, NbBundle.getMessage(Actions.class, "LBL_MoveProjectAction_Name"), null, //NOI18N null ); @@ -285,7 +285,7 @@ public static synchronized Action renameProject() { if (RENAME_PROJECT == null) { Action a = new ProjectAction( - ActionProvider.COMMAND_RENAME, + ProjectActions.COMMAND_RENAME, NbBundle.getMessage(Actions.class, "LBL_RenameProjectAction_Name"), null, //NOI18N null ); @@ -299,7 +299,7 @@ public static Action compileSingle() { Action a = new FileAction( - ActionProvider.COMMAND_COMPILE_SINGLE, + ProjectActions.COMMAND_COMPILE_SINGLE, NbBundle.getMessage(Actions.class, "LBL_CompileSingleAction_Name"), ImageUtilities.loadImageIcon("org/netbeans/modules/project/ui/resources/compileSingle.png", true), null); @@ -310,7 +310,7 @@ public static Action runSingle() { Action a = new FileAction( - ActionProvider.COMMAND_RUN_SINGLE, + ProjectActions.COMMAND_RUN_SINGLE, NbBundle.getMessage(Actions.class, "LBL_RunSingleAction_Name"), ImageUtilities.loadImageIcon("org/netbeans/modules/project/ui/resources/runSingle.png", true), null); @@ -321,7 +321,7 @@ public static Action testSingle() { Action a = new FileAction( - ActionProvider.COMMAND_TEST_SINGLE, + ProjectActions.COMMAND_TEST_SINGLE, NbBundle.getMessage(Actions.class, "LBL_TestSingleAction_Name"), ImageUtilities.loadImageIcon("org/netbeans/modules/project/ui/resources/testSingle.png", true), null); @@ -335,7 +335,7 @@ public static Action buildMainProject() { Action a = new MainProjectAction ( - ActionProvider.COMMAND_BUILD, + ProjectActions.COMMAND_BUILD, NbBundle.getMessage(Actions.class, "LBL_BuildMainProjectAction_Name" ),ImageUtilities.loadImageIcon("org/netbeans/modules/project/ui/resources/buildProject.png", false)); //NOI18N a.putValue("iconBase","org/netbeans/modules/project/ui/resources/buildProject.png"); //NOI18N return a; @@ -343,7 +343,7 @@ public static Action cleanMainProject() { Action a = new MainProjectAction( - ActionProvider.COMMAND_CLEAN, + ProjectActions.COMMAND_CLEAN, NbBundle.getMessage(Actions.class, "LBL_CleanMainProjectAction_Name" ),ImageUtilities.loadImageIcon("org/netbeans/modules/project/ui/resources/cleanProject.gif", false)); //NOI18N a.putValue("iconBase","org/netbeans/modules/project/ui/resources/cleanProject.gif"); //NOI18N return a; @@ -351,7 +351,7 @@ public static Action rebuildMainProject() { Action a = new MainProjectAction( - ActionProvider.COMMAND_REBUILD, + ProjectActions.COMMAND_REBUILD, NbBundle.getMessage(Actions.class, "LBL_RebuildMainProjectAction_Name"),ImageUtilities.loadImageIcon("org/netbeans/modules/project/ui/resources/rebuildProject.png", false)); //NOI18N a.putValue("iconBase","org/netbeans/modules/project/ui/resources/rebuildProject.png"); //NOI18N return a; @@ -359,7 +359,7 @@ public static Action runMainProject() { Action a = new MainProjectAction( - ActionProvider.COMMAND_RUN, + ProjectActions.COMMAND_RUN, NbBundle.getMessage(Actions.class, "LBL_RunMainProjectAction_Name"),ImageUtilities.loadImageIcon("org/netbeans/modules/project/ui/resources/runProject.png", false)); //NOI18N a.putValue("iconBase","org/netbeans/modules/project/ui/resources/runProject.png"); //NOI18N return a; --- a/projectui/src/org/netbeans/modules/project/ui/actions/ActionsUtil.java +++ a/projectui/src/org/netbeans/modules/project/ui/actions/ActionsUtil.java @@ -45,20 +45,19 @@ package org.netbeans.modules.project.ui.actions; import java.text.MessageFormat; -import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; import javax.swing.Action; import org.netbeans.api.project.FileOwnerQuery; import org.netbeans.api.project.Project; -import org.netbeans.spi.project.ActionProvider; +import org.netbeans.api.project.ProjectActions; import org.netbeans.api.project.ProjectUtils; import org.openide.filesystems.FileObject; import org.openide.loaders.DataObject; import org.openide.util.Lookup; +import org.openide.util.RequestProcessor; import org.openide.util.WeakSet; /** Nice utility methods to be used in ProjectBased Actions @@ -71,6 +70,8 @@ public static LookupResultsCache lookupResultsCache; */ + public static final RequestProcessor RP = new RequestProcessor(ActionsUtil.class.getName(), Integer.MAX_VALUE); + public static final ShortcutsManager SHORCUTS_MANAGER = new ShortcutsManager(); public static HashMap pattern2format = new HashMap(); @@ -145,19 +146,7 @@ * does not matter. */ public static boolean commandSupported( Project project, String command, Lookup context ) { - //We have to look whether the command is supported by the project - ActionProvider ap = project.getLookup().lookup(ActionProvider.class); - if ( ap != null ) { - List commands = Arrays.asList( ap.getSupportedActions() ); - if ( commands.contains( command ) ) { - if (context == null || ap.isActionEnabled(command, context)) { - //System.err.println("cS: true project=" + project + " command=" + command + " context=" + context); - return true; - } - } - } - //System.err.println("cS: false project=" + project + " command=" + command + " context=" + context); - return false; + return ProjectActions.prepare(project, command, context) != null; } --- a/projectui/src/org/netbeans/modules/project/ui/actions/FileAction.java +++ a/projectui/src/org/netbeans/modules/project/ui/actions/FileAction.java @@ -46,10 +46,13 @@ import java.util.Arrays; import java.util.Collection; +import java.util.concurrent.Callable; import javax.swing.Action; import javax.swing.Icon; import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectActions; import org.netbeans.spi.project.ActionProvider; +import org.netbeans.spi.project.ActionProvider2; import org.netbeans.spi.project.ui.support.FileActionPerformer; import org.openide.awt.Actions; import org.openide.filesystems.FileObject; @@ -58,10 +61,12 @@ import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.Mutex; +import org.openide.util.RequestProcessor; /** An action sensitive to selected node. Used for 1-off actions */ public final class FileAction extends LookupSensitiveAction implements ContextAwareAction { + private String command; private FileActionPerformer performer; private final String namePattern; @@ -177,15 +182,14 @@ if (command != null) { Project[] projects = ActionsUtil.getProjectsFromLookup( context, command ); - if ( projects.length == 1 ) { - ActionProvider ap = projects[0].getLookup().lookup(ActionProvider.class); - ap.invokeAction( command, context ); + if ( projects.length == 1 ) { + ProjectActions.run(projects[0], command, context); return; } - ActionProvider provider = globalProvider(context); + Callable provider = globalProvider(context); if (provider != null) { - provider.invokeAction(command, context); + ActionsUtil.RP.submit(provider); } } else if (performer != null) { Collection dobjs = context.lookupAll(DataObject.class); @@ -200,10 +204,22 @@ return new FileAction( command, performer, namePattern, (Icon)getValue( SMALL_ICON ), actionContext ); } - private ActionProvider globalProvider(Lookup context) { - for (ActionProvider ap : Lookup.getDefault().lookupAll(ActionProvider.class)) { + @SuppressWarnings("deprecation") + private Callable globalProvider(final Lookup context) { + for (ActionProvider2 ap2 : Lookup.getDefault().lookupAll(ActionProvider2.class)) { + Callable c = ap2.prepare(command, context); + if (c != null) { + return c; + } + } + for (final ActionProvider ap : Lookup.getDefault().lookupAll(ActionProvider.class)) { if (Arrays.asList(ap.getSupportedActions()).contains(command) && ap.isActionEnabled(command, context)) { - return ap; + return new Callable() { + @Override public Boolean call() throws Exception { + ap.invokeAction(command, context); + return true; + } + }; } } return null; --- a/projectui/src/org/netbeans/modules/project/ui/actions/MainProjectAction.java +++ a/projectui/src/org/netbeans/modules/project/ui/actions/MainProjectAction.java @@ -50,17 +50,17 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.text.MessageFormat; -import java.util.Arrays; +import java.util.concurrent.Callable; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectActions; import org.netbeans.api.project.ProjectUtils; import org.netbeans.api.project.ui.OpenProjects; import org.netbeans.modules.project.ui.NoMainProjectWarning; import org.netbeans.modules.project.ui.OpenProjectList; -import org.netbeans.spi.project.ActionProvider; import org.netbeans.spi.project.ui.support.ProjectActionPerformer; import org.openide.DialogDescriptor; import org.openide.DialogDisplayer; @@ -155,15 +155,13 @@ } if ( command != null ) { - ActionProvider ap = p.getLookup().lookup(ActionProvider.class); - if (ap != null) { - if (Arrays.asList(ap.getSupportedActions()).contains(command)) { - ap.invokeAction(command, Lookup.EMPTY); - } else { - // #47160: was a supported command (e.g. on a freeform project) but was then removed. - Toolkit.getDefaultToolkit().beep(); - refreshView(null, false); - } + Callable task = ProjectActions.prepare(p, command, Lookup.EMPTY); + if (task != null) { + ActionsUtil.RP.submit(task); + } else { + // #47160: was a supported command (e.g. on a freeform project) but was then removed. + Toolkit.getDefaultToolkit().beep(); + refreshView(null, false); } } else { --- a/projectui/src/org/netbeans/modules/project/ui/actions/ProjectAction.java +++ a/projectui/src/org/netbeans/modules/project/ui/actions/ProjectAction.java @@ -49,7 +49,7 @@ import javax.swing.Action; import javax.swing.Icon; import org.netbeans.api.project.Project; -import org.netbeans.spi.project.ActionProvider; +import org.netbeans.api.project.ProjectActions; import org.netbeans.spi.project.ui.support.ProjectActionPerformer; import org.openide.awt.Actions; import org.openide.awt.DynamicMenuContent; @@ -121,7 +121,6 @@ if ( projects.length == 1 ) { if ( command != null ) { - ActionProvider ap = projects[0].getLookup().lookup(ActionProvider.class); LogRecord r = new LogRecord(Level.FINE, "PROJECT_ACTION"); // NOI18N r.setResourceBundle(NbBundle.getBundle(ProjectAction.class)); r.setParameters(new Object[] { @@ -131,7 +130,7 @@ }); r.setLoggerName(UILOG.getName()); UILOG.log(r); - ap.invokeAction( command, Lookup.EMPTY ); + ProjectActions.run(projects[0], command, Lookup.EMPTY); } else if ( performer != null ) { performer.perform( projects[0] ); --- a/projectuiapi/src/org/netbeans/spi/project/ui/support/FileSensitiveActions.java +++ a/projectuiapi/src/org/netbeans/spi/project/ui/support/FileSensitiveActions.java @@ -49,8 +49,9 @@ import javax.swing.Icon; import org.netbeans.api.annotations.common.NonNull; import org.netbeans.api.annotations.common.NullAllowed; +import org.netbeans.api.project.ProjectActions; import org.netbeans.modules.project.uiapi.Utilities; -import org.netbeans.spi.project.ActionProvider; +import org.netbeans.spi.project.ActionProvider2; /** * Factory for creating file-sensitive actions. @@ -62,11 +63,11 @@ /** * Creates an action sensitive to the set of currently selected files. - * When performed the action will call the given command on the {@link ActionProvider} of + * When performed the action will call the given command using {@link ProjectActions} on * the selected project(s) and pass the proper context to it. Enablement of the * action depends on the behavior of the project's action provider. - *

    As mentioned in {@link ActionProvider} Javadoc, the action may also be enabled - * without the participation of any project in case some globally registered {@link ActionProvider} + *

    As mentioned in {@link ProjectActions} Javadoc, the action may also be enabled + * without the participation of any project in case some globally registered {@link ActionProvider2} * can provide an implementation. * (This since {@code org.netbeans.modules.projectuiapi/1 1.37}.) *

    Shortcuts for actions are shared according to command, i.e. actions based on the same command