1 /*******************************************************************************
2 * Copyright (c) 2000, 2011 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11 package org.eclipse.jdt.internal.ui.javaeditor;
13 import java.util.ArrayList;
14 import java.util.Iterator;
15 import java.util.List;
16 import java.util.ResourceBundle;
18 import org.eclipse.jface.action.IAction;
19 import org.eclipse.jface.action.IMenuManager;
20 import org.eclipse.jface.action.IStatusLineManager;
21 import org.eclipse.jface.action.MenuManager;
22 import org.eclipse.jface.action.Separator;
24 import org.eclipse.ui.IActionBars;
25 import org.eclipse.ui.IEditorPart;
26 import org.eclipse.ui.IWorkbenchActionConstants;
27 import org.eclipse.ui.IWorkbenchPage;
28 import org.eclipse.ui.actions.RetargetAction;
30 import org.eclipse.ui.texteditor.BasicTextEditorActionContributor;
31 import org.eclipse.ui.texteditor.ITextEditor;
32 import org.eclipse.ui.texteditor.ITextEditorActionConstants;
33 import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
34 import org.eclipse.ui.texteditor.RetargetTextEditorAction;
36 import org.eclipse.jdt.ui.actions.IJavaEditorActionDefinitionIds;
38 import org.eclipse.jdt.internal.ui.actions.CopyQualifiedNameAction;
39 import org.eclipse.jdt.internal.ui.actions.FoldingActionGroup;
40 import org.eclipse.jdt.internal.ui.javaeditor.selectionactions.GoToNextPreviousMemberAction;
41 import org.eclipse.jdt.internal.ui.javaeditor.selectionactions.StructureSelectionAction;
44 * Common base class for action contributors for Java editors.
46 public class BasicJavaEditorActionContributor extends BasicTextEditorActionContributor {
48 private List<RetargetAction> fPartListeners= new ArrayList<RetargetAction>();
50 private TogglePresentationAction fTogglePresentation;
51 private ToggleMarkOccurrencesAction fToggleMarkOccurrencesAction;
52 private ToggleBreadcrumbAction fToggleBreadcrumbAction;
54 private RetargetTextEditorAction fGotoMatchingBracket;
55 private RetargetTextEditorAction fShowOutline;
56 private RetargetTextEditorAction fOpenStructure;
57 private RetargetTextEditorAction fOpenHierarchy;
59 private RetargetTextEditorAction fRetargetShowInformationAction;
61 private RetargetTextEditorAction fStructureSelectEnclosingAction;
62 private RetargetTextEditorAction fStructureSelectNextAction;
63 private RetargetTextEditorAction fStructureSelectPreviousAction;
64 private RetargetTextEditorAction fStructureSelectHistoryAction;
66 private RetargetTextEditorAction fGotoNextMemberAction;
67 private RetargetTextEditorAction fGotoPreviousMemberAction;
69 private RetargetTextEditorAction fRemoveOccurrenceAnnotationsAction;
71 public BasicJavaEditorActionContributor() {
74 ResourceBundle b= JavaEditorMessages.getBundleForConstructedKeys();
76 fRetargetShowInformationAction= new RetargetTextEditorAction(b, "Editor.ShowInformation."); //$NON-NLS-1$
77 fRetargetShowInformationAction.setActionDefinitionId(ITextEditorActionDefinitionIds.SHOW_INFORMATION);
79 // actions that are "contributed" to editors, they are considered belonging to the active editor
80 fTogglePresentation= new TogglePresentationAction();
82 fToggleMarkOccurrencesAction= new ToggleMarkOccurrencesAction();
84 fGotoMatchingBracket= new RetargetTextEditorAction(b, "GotoMatchingBracket."); //$NON-NLS-1$
85 fGotoMatchingBracket.setActionDefinitionId(IJavaEditorActionDefinitionIds.GOTO_MATCHING_BRACKET);
87 fShowOutline= new RetargetTextEditorAction(JavaEditorMessages.getBundleForConstructedKeys(), "ShowOutline."); //$NON-NLS-1$
88 fShowOutline.setActionDefinitionId(IJavaEditorActionDefinitionIds.SHOW_OUTLINE);
90 fOpenHierarchy= new RetargetTextEditorAction(JavaEditorMessages.getBundleForConstructedKeys(), "OpenHierarchy."); //$NON-NLS-1$
91 fOpenHierarchy.setActionDefinitionId(IJavaEditorActionDefinitionIds.OPEN_HIERARCHY);
93 fOpenStructure= new RetargetTextEditorAction(JavaEditorMessages.getBundleForConstructedKeys(), "OpenStructure."); //$NON-NLS-1$
94 fOpenStructure.setActionDefinitionId(IJavaEditorActionDefinitionIds.OPEN_STRUCTURE);
96 fStructureSelectEnclosingAction= new RetargetTextEditorAction(b, "StructureSelectEnclosing."); //$NON-NLS-1$
97 fStructureSelectEnclosingAction.setActionDefinitionId(IJavaEditorActionDefinitionIds.SELECT_ENCLOSING);
98 fStructureSelectNextAction= new RetargetTextEditorAction(b, "StructureSelectNext."); //$NON-NLS-1$
99 fStructureSelectNextAction.setActionDefinitionId(IJavaEditorActionDefinitionIds.SELECT_NEXT);
100 fStructureSelectPreviousAction= new RetargetTextEditorAction(b, "StructureSelectPrevious."); //$NON-NLS-1$
101 fStructureSelectPreviousAction.setActionDefinitionId(IJavaEditorActionDefinitionIds.SELECT_PREVIOUS);
102 fStructureSelectHistoryAction= new RetargetTextEditorAction(b, "StructureSelectHistory."); //$NON-NLS-1$
103 fStructureSelectHistoryAction.setActionDefinitionId(IJavaEditorActionDefinitionIds.SELECT_LAST);
105 fGotoNextMemberAction= new RetargetTextEditorAction(b, "GotoNextMember."); //$NON-NLS-1$
106 fGotoNextMemberAction.setActionDefinitionId(IJavaEditorActionDefinitionIds.GOTO_NEXT_MEMBER);
107 fGotoPreviousMemberAction= new RetargetTextEditorAction(b, "GotoPreviousMember."); //$NON-NLS-1$
108 fGotoPreviousMemberAction.setActionDefinitionId(IJavaEditorActionDefinitionIds.GOTO_PREVIOUS_MEMBER);
110 fRemoveOccurrenceAnnotationsAction= new RetargetTextEditorAction(b, "RemoveOccurrenceAnnotations."); //$NON-NLS-1$
111 fRemoveOccurrenceAnnotationsAction.setActionDefinitionId(IJavaEditorActionDefinitionIds.REMOVE_OCCURRENCE_ANNOTATIONS);
114 protected final void markAsPartListener(RetargetAction action) {
115 fPartListeners.add(action);
119 * @see IEditorActionBarContributor#init(IActionBars, IWorkbenchPage)
122 public void init(IActionBars bars, IWorkbenchPage page) {
123 fToggleBreadcrumbAction= new ToggleBreadcrumbAction(page);
124 Iterator<RetargetAction> e= fPartListeners.iterator();
126 page.addPartListener(e.next());
128 super.init(bars, page);
130 bars.setGlobalActionHandler(ITextEditorActionDefinitionIds.TOGGLE_SHOW_SELECTED_ELEMENT_ONLY, fTogglePresentation);
131 bars.setGlobalActionHandler(IJavaEditorActionDefinitionIds.TOGGLE_MARK_OCCURRENCES, fToggleMarkOccurrencesAction);
132 bars.setGlobalActionHandler(IJavaEditorActionDefinitionIds.TOGGLE_BREADCRUMB, fToggleBreadcrumbAction);
136 * @see org.eclipse.ui.part.EditorActionBarContributor#contributeToMenu(org.eclipse.jface.action.IMenuManager)
139 public void contributeToMenu(IMenuManager menu) {
141 super.contributeToMenu(menu);
143 IMenuManager editMenu= menu.findMenuUsingPath(IWorkbenchActionConstants.M_EDIT);
144 if (editMenu != null) {
146 MenuManager structureSelection= new MenuManager(JavaEditorMessages.ExpandSelectionMenu_label, "expandSelection"); //$NON-NLS-1$
147 editMenu.insertAfter(ITextEditorActionConstants.SELECT_ALL, structureSelection);
148 structureSelection.add(fStructureSelectEnclosingAction);
149 structureSelection.add(fStructureSelectNextAction);
150 structureSelection.add(fStructureSelectPreviousAction);
151 structureSelection.add(fStructureSelectHistoryAction);
153 editMenu.appendToGroup(ITextEditorActionConstants.GROUP_INFORMATION, fRetargetShowInformationAction);
156 IMenuManager navigateMenu= menu.findMenuUsingPath(IWorkbenchActionConstants.M_NAVIGATE);
157 if (navigateMenu != null) {
158 navigateMenu.appendToGroup(IWorkbenchActionConstants.SHOW_EXT, fShowOutline);
159 navigateMenu.appendToGroup(IWorkbenchActionConstants.SHOW_EXT, fOpenHierarchy);
162 IMenuManager gotoMenu= menu.findMenuUsingPath("navigate/goTo"); //$NON-NLS-1$
163 if (gotoMenu != null) {
164 gotoMenu.add(new Separator("additions2")); //$NON-NLS-1$
165 gotoMenu.appendToGroup("additions2", fGotoPreviousMemberAction); //$NON-NLS-1$
166 gotoMenu.appendToGroup("additions2", fGotoNextMemberAction); //$NON-NLS-1$
167 gotoMenu.appendToGroup("additions2", fGotoMatchingBracket); //$NON-NLS-1$
172 * @see EditorActionBarContributor#setActiveEditor(IEditorPart)
175 public void setActiveEditor(IEditorPart part) {
177 super.setActiveEditor(part);
179 ITextEditor textEditor= null;
180 if (part instanceof ITextEditor)
181 textEditor= (ITextEditor)part;
183 fTogglePresentation.setEditor(textEditor);
184 fToggleMarkOccurrencesAction.setEditor(textEditor);
186 fGotoMatchingBracket.setAction(getAction(textEditor, GotoMatchingBracketAction.GOTO_MATCHING_BRACKET));
187 fShowOutline.setAction(getAction(textEditor, IJavaEditorActionDefinitionIds.SHOW_OUTLINE));
188 fOpenHierarchy.setAction(getAction(textEditor, IJavaEditorActionDefinitionIds.OPEN_HIERARCHY));
189 fOpenStructure.setAction(getAction(textEditor, IJavaEditorActionDefinitionIds.OPEN_STRUCTURE));
191 fStructureSelectEnclosingAction.setAction(getAction(textEditor, StructureSelectionAction.ENCLOSING));
192 fStructureSelectNextAction.setAction(getAction(textEditor, StructureSelectionAction.NEXT));
193 fStructureSelectPreviousAction.setAction(getAction(textEditor, StructureSelectionAction.PREVIOUS));
194 fStructureSelectHistoryAction.setAction(getAction(textEditor, StructureSelectionAction.HISTORY));
196 fGotoNextMemberAction.setAction(getAction(textEditor, GoToNextPreviousMemberAction.NEXT_MEMBER));
197 fGotoPreviousMemberAction.setAction(getAction(textEditor, GoToNextPreviousMemberAction.PREVIOUS_MEMBER));
199 fRemoveOccurrenceAnnotationsAction.setAction(getAction(textEditor, "RemoveOccurrenceAnnotations")); //$NON-NLS-1$
200 fRetargetShowInformationAction.setAction(getAction(textEditor, ITextEditorActionConstants.SHOW_INFORMATION));
202 if (part instanceof JavaEditor) {
203 JavaEditor javaEditor= (JavaEditor) part;
204 javaEditor.getActionGroup().fillActionBars(getActionBars());
205 FoldingActionGroup foldingActions= javaEditor.getFoldingActionGroup();
206 if (foldingActions != null)
207 foldingActions.updateActionBars();
210 IActionBars actionBars= getActionBars();
211 IStatusLineManager manager= actionBars.getStatusLineManager();
212 manager.setMessage(null);
213 manager.setErrorMessage(null);
215 /** The global actions to be connected with editor actions */
216 IAction action= getAction(textEditor, ITextEditorActionConstants.NEXT);
217 actionBars.setGlobalActionHandler(ITextEditorActionDefinitionIds.GOTO_NEXT_ANNOTATION, action);
218 actionBars.setGlobalActionHandler(ITextEditorActionConstants.NEXT, action);
219 action= getAction(textEditor, ITextEditorActionConstants.PREVIOUS);
220 actionBars.setGlobalActionHandler(ITextEditorActionDefinitionIds.GOTO_PREVIOUS_ANNOTATION, action);
221 actionBars.setGlobalActionHandler(ITextEditorActionConstants.PREVIOUS, action);
222 action= getAction(textEditor, IJavaEditorActionConstants.COPY_QUALIFIED_NAME);
223 actionBars.setGlobalActionHandler(CopyQualifiedNameAction.ACTION_HANDLER_ID, action);
225 actionBars.setGlobalActionHandler(IJavaEditorActionDefinitionIds.SHOW_IN_BREADCRUMB, getAction(textEditor, IJavaEditorActionDefinitionIds.SHOW_IN_BREADCRUMB));
226 actionBars.setGlobalActionHandler("org.eclipse.jdt.internal.ui.actions.OpenHyperlink", getAction(textEditor, ITextEditorActionConstants.OPEN_HYPERLINK)); //$NON-NLS-1$
230 * @see IEditorActionBarContributor#dispose()
233 public void dispose() {
235 Iterator<RetargetAction> e= fPartListeners.iterator();
237 getPage().removePartListener(e.next());
238 fPartListeners.clear();
240 setActiveEditor(null);
241 fToggleBreadcrumbAction.dispose();