diff --git a/java.navigation/src/org/netbeans/modules/java/navigation/ElementNode.java b/java.navigation/src/org/netbeans/modules/java/navigation/ElementNode.java --- a/java.navigation/src/org/netbeans/modules/java/navigation/ElementNode.java +++ b/java.navigation/src/org/netbeans/modules/java/navigation/ElementNode.java @@ -47,6 +47,8 @@ import java.awt.Image; import java.awt.datatransfer.Transferable; import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Comparator; import java.util.HashMap; @@ -67,6 +69,7 @@ import org.netbeans.modules.java.navigation.actions.OpenAction; import org.netbeans.modules.refactoring.api.ui.RefactoringActionsFactory; import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileUtil; import org.openide.loaders.DataObject; import org.openide.loaders.DataObjectNotFoundException; import org.openide.nodes.AbstractNode; @@ -75,6 +78,7 @@ import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; +import org.openide.util.Utilities; import org.openide.util.datatransfer.PasteType; import org.openide.util.lookup.AbstractLookup; import org.openide.util.lookup.InstanceContent; @@ -127,25 +131,31 @@ return description.htmlHeader; } + private void addActionsFromExtensionPoint (List toPopulate) { + //FIXME decide which layer entry should be referenced + List actionsForPath = Utilities.actionsForPath("Navigator/ContextMenu/text/x-java/"); + if (null != actionsForPath && !actionsForPath.isEmpty()) { + toPopulate.add(null); + toPopulate.addAll(actionsForPath); + } + } + @Override public Action[] getActions( boolean context ) { - - if ( context || description.name == null ) { - return description.ui.getActions(); + final List actions = new ArrayList(); + + if (context || description.name == null) { + actions.addAll(Arrays.asList(description.ui.getActions())); + } else { + actions.add(getOpenAction()); + actions.add(RefactoringActionsFactory.whereUsedAction()); + actions.add(RefactoringActionsFactory.popupSubmenuAction()); + actions.add(null); + actions.addAll(Arrays.asList(description.ui.getActions())); } - else { - Action panelActions[] = description.ui.getActions(); - - Action actions[] = new Action[ 4 + panelActions.length ]; - actions[0] = getOpenAction(); - actions[1] = RefactoringActionsFactory.whereUsedAction(); - actions[2] = RefactoringActionsFactory.popupSubmenuAction(); - actions[3] = null; - for( int i = 0; i < panelActions.length; i++ ){ - actions[4 + i] = panelActions[i]; - } - return actions; - } + // support custom actions + addActionsFromExtensionPoint(actions); + return actions.toArray(new Action[actions.size()]); } @Override diff --git a/java.navigation/src/org/netbeans/modules/java/navigation/hierarchy/Nodes.java b/java.navigation/src/org/netbeans/modules/java/navigation/hierarchy/Nodes.java --- a/java.navigation/src/org/netbeans/modules/java/navigation/hierarchy/Nodes.java +++ b/java.navigation/src/org/netbeans/modules/java/navigation/hierarchy/Nodes.java @@ -52,6 +52,7 @@ import java.lang.reflect.Method; import java.net.URL; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; @@ -307,20 +308,32 @@ updateDisplayName(); } } + + private void addActionsFromExtensionPoint (List toPopulate) { + //FIXME decide which layer entry should be referenced + List actionsForPath = Utilities.actionsForPath("HierarchyView/ContextMenu/text/x-java/"); + if (null != actionsForPath && !actionsForPath.isEmpty()) { + toPopulate.add(null); + toPopulate.addAll(actionsForPath); + } + } @Override public Action[] getActions(boolean context) { + List actions = new ArrayList(); + if (context) { - return globalActions; + actions.addAll(Arrays.asList(globalActions)); } else { - Action actions[] = new Action[ 4 + globalActions.length ]; - actions[0] = getOpenAction(); - actions[1] = FileUtil.getConfigObject(INSPECT_HIERARCHY_ACTION, Action.class); - actions[2] = RefactoringActionsFactory.whereUsedAction(); - actions[3] = null; - System.arraycopy(globalActions, 0, actions, 4, globalActions.length); - return actions; + actions.add(getOpenAction()); + actions.add(FileUtil.getConfigObject(INSPECT_HIERARCHY_ACTION, Action.class)); + actions.add(RefactoringActionsFactory.whereUsedAction()); + actions.add(null); + actions.addAll(Arrays.asList(globalActions)); } + // support custom actions + addActionsFromExtensionPoint(actions); + return actions.toArray(new Action[actions.size()]); } @Override