Bug 38190 - Ant refid and pathid should be hyperlinks
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java
index 21a7333..90641a9 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java
@@ -27,12 +27,14 @@
import org.eclipse.ant.internal.ui.model.IAntUIHelpContextIds;
import org.eclipse.ant.internal.ui.preferences.AntEditorPreferenceConstants;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.text.source.IAnnotationAccess;
import org.eclipse.jface.text.source.IOverviewRuler;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.IVerticalRuler;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
@@ -339,4 +341,19 @@
getAntModel().setResolveFully(resolveFully);
}
+
+ public void openReferenceElement() {
+ ISelection selection= getSelectionProvider().getSelection();
+ if (selection instanceof ITextSelection) {
+ ITextSelection textSelection= (ITextSelection)selection;
+ String text= textSelection.getText();
+ AntElementNode node= getAntModel().getReferenceNode(text);
+ if (node != null) {
+ setSelection(node, true);
+ return;
+ }
+ }
+ setStatusLineErrorMessage(AntEditorMessages.getString("AntEditor.3")); //$NON-NLS-1$
+ getSite().getShell().getDisplay().beep();
+ }
}
\ No newline at end of file
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorActionContributor.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorActionContributor.java
index 5a84739..8f642e1 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorActionContributor.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorActionContributor.java
@@ -18,6 +18,7 @@
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.Separator;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchActionConstants;
@@ -32,6 +33,7 @@
public class AntEditorActionContributor extends TextEditorActionContributor {
protected RetargetTextEditorAction fContentAssistProposal;
+ private OpenDeclarationAction fOpenDeclarationAction;
private ValidateBuildfileAction fValidateAction;
public AntEditorActionContributor() {
@@ -40,6 +42,10 @@
fValidateAction= new ValidateBuildfileAction();
}
+ protected void initializeActions(AntEditor editor) {
+ fOpenDeclarationAction= new OpenDeclarationAction(editor);
+ }
+
private void doSetActiveEditor(IEditorPart part) {
super.setActiveEditor(part);
@@ -49,8 +55,35 @@
}
fContentAssistProposal.setAction(getAction(editor, "ContentAssistProposal")); //$NON-NLS-1$
+
+ if (part instanceof AntEditor) {
+ if (fOpenDeclarationAction == null) {
+ initializeActions((AntEditor) part);
+ contributeToMenu(getActionBars().getMenuManager());
+ }
+ }
+
+ if (fOpenDeclarationAction != null) {
+ fOpenDeclarationAction.setEditor((AntEditor) part);
+ }
}
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.EditorActionBarContributor#contributeToMenu(org.eclipse.jface.action.IMenuManager)
+ */
+ public void contributeToMenu(IMenuManager menu) {
+ if (fOpenDeclarationAction == null) {
+ return;
+ }
+ super.contributeToMenu(menu);
+
+ IMenuManager navigateMenu= menu.findMenuUsingPath(IWorkbenchActionConstants.M_NAVIGATE);
+ if (navigateMenu != null) {
+ navigateMenu.appendToGroup(IWorkbenchActionConstants.OPEN_EXT, fOpenDeclarationAction);
+ navigateMenu.setVisible(true);
+ }
+ }
+
/* (non-Javadoc)
* @see org.eclipse.ui.part.EditorActionBarContributor#init(org.eclipse.ui.IActionBars)
*/
@@ -60,10 +93,9 @@
IMenuManager menuManager= bars.getMenuManager();
IMenuManager editMenu= menuManager.findMenuUsingPath(IWorkbenchActionConstants.M_EDIT);
if (editMenu != null) {
- editMenu.add(new org.eclipse.jface.action.Separator());
+ editMenu.add(new Separator());
editMenu.add(fContentAssistProposal);
- }
-
+ }
}
/* (non-Javadoc)
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/OpenDeclarationAction.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/OpenDeclarationAction.java
new file mode 100644
index 0000000..e2a7e2c
--- /dev/null
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/OpenDeclarationAction.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ant.internal.ui.editor;
+
+import org.eclipse.jdt.ui.actions.IJavaEditorActionDefinitionIds;
+import org.eclipse.jdt.ui.actions.OpenAction;
+import org.eclipse.jface.text.ITextSelection;
+
+public class OpenDeclarationAction extends OpenAction {
+
+ private AntEditor fEditor;
+
+ public OpenDeclarationAction(AntEditor antEditor) {
+ super(antEditor.getSite());
+ fEditor= antEditor;
+ setActionDefinitionId(IJavaEditorActionDefinitionIds.OPEN_EDITOR);
+ antEditor.getSite().getKeyBindingService().registerAction(this);
+
+ setText(AntEditorMessages.getString("OpenDeclarationAction.0")); //$NON-NLS-1$
+ setDescription(AntEditorMessages.getString("OpenDeclarationAction.1")); //$NON-NLS-1$
+ setToolTipText(AntEditorMessages.getString("OpenDeclarationAction.2")); //$NON-NLS-1$
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.action.IAction#run()
+ */
+ public void run() {
+ if (fEditor == null) {
+ return;
+ }
+
+ fEditor.openReferenceElement();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#selectionChanged(org.eclipse.jface.text.ITextSelection)
+ */
+ public void selectionChanged(ITextSelection selection) {
+ setEnabled(fEditor != null);
+ }
+
+ public void setEditor(AntEditor editor) {
+ fEditor= editor;
+ }
+}
\ No newline at end of file
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntModel.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntModel.java
index 998ad7b..1901f5c 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntModel.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntModel.java
@@ -25,6 +25,7 @@
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Target;
import org.apache.tools.ant.Task;
+import org.apache.tools.ant.UnknownElement;
import org.eclipse.ant.core.AntCorePlugin;
import org.eclipse.ant.core.AntCorePreferences;
import org.eclipse.ant.internal.ui.editor.model.AntElementNode;
@@ -197,7 +198,6 @@
} finally {
resolveBuildfile();
endReporting();
- fTaskToNode= new HashMap();
}
}
@@ -757,13 +757,37 @@
return null;
}
- /**
- * @param resolveFully
- */
public void setResolveFully(boolean resolveFully) {
fValidateFully= resolveFully;
resolveBuildfile();
}
+
+ public AntElementNode getReferenceNode(String text) {
+ Object reference= getReferenceObject(text);
+ if (reference == null) {
+ return null;
+ }
+
+ Collection nodes= fTaskToNode.keySet();
+ Iterator iter= nodes.iterator();
+ while (iter.hasNext()) {
+ Object original = iter.next();
+ Object object= original;
+ if (object instanceof UnknownElement) {
+ UnknownElement element= (UnknownElement) object;
+ object= element.getRealThing();
+ if (object == null) {
+ //element.maybeConfigure();
+ //object= element.getRealThing();
+ continue;
+ }
+ }
+ if (object == reference) {
+ return (AntElementNode)fTaskToNode.get(original);
+ }
+ }
+ return null;
+ }
private ClassLoader getClassLoader() {
AntCorePreferences corePreferences = AntCorePlugin.getPlugin().getPreferences();
diff --git a/ant/org.eclipse.ant.ui/plugin.xml b/ant/org.eclipse.ant.ui/plugin.xml
index 1a6f746..6dc9682 100644
--- a/ant/org.eclipse.ant.ui/plugin.xml
+++ b/ant/org.eclipse.ant.ui/plugin.xml
@@ -28,6 +28,7 @@
<import plugin="org.eclipse.ui.console"/>
<import plugin="org.eclipse.debug.core"/>
<import plugin="org.eclipse.debug.ui"/>
+ <import plugin="org.eclipse.jdt.ui"/>
<import plugin="org.eclipse.jdt.debug.ui"/>
<import plugin="org.eclipse.jdt.launching"/>
<import plugin="org.eclipse.core.runtime.compatibility"/>