This is an automated email from the ASF dual-hosted git repository. lkishalmi pushed a commit to branch delivery in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/delivery by this push: new 145f06a NETBEANS-5906: treat custom actions as enabled (#3105) 145f06a is described below commit 145f06ae1dcd6cedc91d0ce12f515eb91712c319 Author: Svatopluk Dedic <svatopluk.de...@oracle.com> AuthorDate: Sun Aug 22 21:38:26 2021 +0200 NETBEANS-5906: treat custom actions as enabled (#3105) * [NETBEANS-5918] listener for gradle.properties creation was weak-refed and GCed * [NETBEANS-5919] [NETBEANS-5906] Custom actions are always on. Report custom actions as supported. --- .../modules/gradle/ActionProviderImpl.java | 10 ++--- .../modules/gradle/actions/ActionToTaskUtils.java | 41 ++++++++++++++++-- .../actions/ConfigurableActionsProviderImpl.java | 7 +-- .../ConfigurableActionsProviderImplTest.java | 50 ++++++++++++++++++++++ 4 files changed, 92 insertions(+), 16 deletions(-) diff --git a/extide/gradle/src/org/netbeans/modules/gradle/ActionProviderImpl.java b/extide/gradle/src/org/netbeans/modules/gradle/ActionProviderImpl.java index 3bf4d48..d11d1ed 100644 --- a/extide/gradle/src/org/netbeans/modules/gradle/ActionProviderImpl.java +++ b/extide/gradle/src/org/netbeans/modules/gradle/ActionProviderImpl.java @@ -121,11 +121,7 @@ public class ActionProviderImpl implements ActionProvider { @Override public String[] getSupportedActions() { - List<? extends GradleActionsProvider> providers = ActionToTaskUtils.actionProviders(project); - Set<String> actions = new HashSet<>(); - for (GradleActionsProvider provider : providers) { - actions.addAll(provider.getSupportedActions()); - } + Set<String> actions = new HashSet<>(ActionToTaskUtils.getAllSupportedActions(project)); // add a fixed 'prime build' action actions.add(ActionProvider.COMMAND_PRIME); actions.add(COMMAND_DL_SOURCES); @@ -184,7 +180,7 @@ public class ActionProviderImpl implements ActionProvider { LOG.log(Level.FINEST, "Priming build action for {0} is: {1}", new Object[] { project, enabled }); return enabled; } - return ActionToTaskUtils.isActionEnabled(command, project, context); + return ActionToTaskUtils.isActionEnabled(command, null, project, context); } @NbBundle.Messages({ @@ -259,7 +255,7 @@ public class ActionProviderImpl implements ActionProvider { LOG.log(Level.FINE, "Attempt to run a config-disabled action: {0}", action); return false; } - if (!ActionToTaskUtils.isActionEnabled(action, project, context)) { + if (!ActionToTaskUtils.isActionEnabled(action, mapping, project, context)) { LOG.log(Level.FINE, "Attempt to run action that is not enabled: {0}", action); return false; } diff --git a/extide/gradle/src/org/netbeans/modules/gradle/actions/ActionToTaskUtils.java b/extide/gradle/src/org/netbeans/modules/gradle/actions/ActionToTaskUtils.java index 98c55c6..5c2939d 100644 --- a/extide/gradle/src/org/netbeans/modules/gradle/actions/ActionToTaskUtils.java +++ b/extide/gradle/src/org/netbeans/modules/gradle/actions/ActionToTaskUtils.java @@ -23,7 +23,9 @@ import org.netbeans.modules.gradle.spi.actions.ProjectActionMappingProvider; import org.netbeans.modules.gradle.api.execute.ActionMapping; import org.netbeans.modules.gradle.spi.actions.GradleActionsProvider; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.netbeans.api.annotations.common.NonNull; import org.netbeans.api.project.Project; import org.netbeans.modules.gradle.api.execute.GradleExecConfiguration; @@ -47,10 +49,43 @@ public final class ActionToTaskUtils { providers.addAll(Lookup.getDefault().lookupAll(GradleActionsProvider.class)); return providers; } - - public static boolean isActionEnabled(String action, Project project, Lookup lookup) { - ActionMapping mapping = getActiveMapping(action, project, lookup); + + public static Set<String> getAllSupportedActions(@NonNull Project project) { + Set<String> actions = new HashSet<>(); + for (GradleActionsProvider provider : actionProviders(project)) { + actions.addAll(provider.getSupportedActions()); + } + ProjectActionMappingProvider projectProvider = project.getLookup().lookup(ProjectActionMappingProvider.class); + ConfigurableActionProvider contextProvider = project.getLookup().lookup(ConfigurableActionProvider.class); + ProjectConfigurationProvider<GradleExecConfiguration> pcp = project.getLookup().lookup(ProjectConfigurationProvider.class); + if (contextProvider == null || projectProvider == null) { + return actions; + } + if (pcp == null || contextProvider == null) { + actions.addAll(projectProvider.customizedActions()); + } else { + for (GradleExecConfiguration gec : pcp.getConfigurations()) { + projectProvider = contextProvider.findActionProvider(gec.getId()); + if (projectProvider != null) { + actions.addAll(projectProvider.customizedActions()); + } + } + } + return actions; + } + + public static boolean isCustomMapping(ActionMapping am) { + return am.getName().startsWith(ActionMapping.CUSTOM_PREFIX); + } + + public static boolean isActionEnabled(String action, ActionMapping mapping, Project project, Lookup lookup) { + if (mapping == null) { + mapping = getActiveMapping(action, project, lookup); + } if (!ActionMapping.isDisabled(mapping)) { + if (isCustomMapping(mapping)) { + return true; + } List<? extends GradleActionsProvider> providers = actionProviders(project); for (GradleActionsProvider provider : providers) { if (provider.isActionEnabled(action, project, lookup)) { diff --git a/extide/gradle/src/org/netbeans/modules/gradle/actions/ConfigurableActionsProviderImpl.java b/extide/gradle/src/org/netbeans/modules/gradle/actions/ConfigurableActionsProviderImpl.java index a488d79..3cdee9e 100644 --- a/extide/gradle/src/org/netbeans/modules/gradle/actions/ConfigurableActionsProviderImpl.java +++ b/extide/gradle/src/org/netbeans/modules/gradle/actions/ConfigurableActionsProviderImpl.java @@ -157,12 +157,7 @@ public class ConfigurableActionsProviderImpl implements ProjectActionMappingProv this.project = project; this.projectDirectory = project.getProjectDirectory(); - FileChangeListener wl = WeakListeners.create(FileChangeListener.class, new FileChangeAdapter() { - @Override - public void fileDataCreated(FileEvent fe) { - actionFileChanged(fe.getFile(), null, false); - } - }, this.projectDirectory); + FileChangeListener wl = WeakListeners.create(FileChangeListener.class, fcl, this.projectDirectory); projectDirectory.addFileChangeListener(wl); LOG.log(Level.FINER, "Initializing ConfigurableAP for {0}", project); diff --git a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/actions/ConfigurableActionsProviderImplTest.java b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/actions/ConfigurableActionsProviderImplTest.java index d63ecd7..5152e08 100644 --- a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/actions/ConfigurableActionsProviderImplTest.java +++ b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/actions/ConfigurableActionsProviderImplTest.java @@ -38,10 +38,12 @@ import org.junit.rules.TemporaryFolder; import org.netbeans.api.project.Project; import org.netbeans.api.project.ProjectManager; import org.netbeans.api.project.ui.OpenProjects; +import org.netbeans.modules.gradle.api.execute.ActionMapping; import org.netbeans.modules.gradle.api.execute.GradleCommandLine; import org.netbeans.modules.gradle.api.execute.GradleExecConfiguration; import org.netbeans.modules.gradle.api.execute.RunConfig; import org.netbeans.modules.gradle.api.execute.RunUtilsTest; +import org.netbeans.modules.gradle.customizer.CustomActionMapping; import org.netbeans.modules.gradle.execute.ConfigPersistenceUtilsTest; import org.netbeans.modules.gradle.execute.GradleExecAccessor; import org.netbeans.modules.gradle.execute.GradleExecutor; @@ -349,4 +351,52 @@ public class ConfigurableActionsProviderImplTest { assertTrue("debug.single is supported for java.distribution / default", Arrays.asList(ap.getSupportedActions()).contains("debug.single")); assertTrue("debug.single is enabled for java.distribution / default", ap.isActionEnabled("debug.single", Lookups.singleton(def))); } + + /** + * Checks that if a custom action is made/paersisted, it will be visible in + * action provider. + * @throws IOException + */ + @Test + public void testSaveCustomizedActionVisible() throws Exception { + createGradleProject2(); + + CustomActionRegistrationSupport supp = new CustomActionRegistrationSupport(project); + CustomActionMapping cam = new CustomActionMapping(ActionMapping.CUSTOM_PREFIX + "1"); + cam.setArgs("build"); + + ActionProvider ap = project.getLookup().lookup(ActionProvider.class); + assertFalse(Arrays.asList(ap.getSupportedActions()).contains(cam.getName())); + + supp.registerCustomAction(cam); + supp.save(); + + assertTrue(Arrays.asList(ap.getSupportedActions()).contains(cam.getName())); + } + + /** + * Checks that custom created action is enabled. + */ + @Test + public void testCustomizedActionEnabled() throws Exception { + createGradleProject2(); + + CustomActionRegistrationSupport supp = new CustomActionRegistrationSupport(project); + CustomActionMapping cam = new CustomActionMapping(ActionMapping.CUSTOM_PREFIX + "1"); + cam.setArgs("build"); + + ActionProvider ap = project.getLookup().lookup(ActionProvider.class); + + assertFalse("Nonexistent ation must not be enabled", ap.isActionEnabled(cam.getName(), Lookup.EMPTY)); + + supp.registerCustomAction(cam); + supp.save(); + + assertTrue("Custom actions are always enabled", ap.isActionEnabled(cam.getName(), Lookup.EMPTY)); + + supp.unregisterCustomAction(cam.getName()); + supp.save(); + + assertFalse("Deleted actions must not be enabled", ap.isActionEnabled(cam.getName(), Lookup.EMPTY)); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org For additional commands, e-mail: commits-h...@netbeans.apache.org For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists