+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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 net.sourceforge.phpeclipse.phpeditor;
-
-import net.sourceforge.phpdt.core.ICompilationUnit;
-import net.sourceforge.phpdt.core.IJavaElement;
-import net.sourceforge.phpdt.core.IJavaProject;
-import net.sourceforge.phpdt.core.IMember;
-import net.sourceforge.phpdt.core.IWorkingCopy;
-import net.sourceforge.phpdt.core.JavaCore;
-import net.sourceforge.phpdt.core.JavaModelException;
-import net.sourceforge.phpdt.internal.corext.util.JavaModelUtil;
-import net.sourceforge.phpdt.ui.JavaUI;
-import net.sourceforge.phpeclipse.PHPeclipsePlugin;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.jface.action.Action;
-import org.eclipse.swt.SWT;
-import org.eclipse.ui.IEditorDescriptor;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IEditorRegistry;
-import org.eclipse.ui.IFileEditorInput;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.ide.IDE;
-import org.eclipse.ui.part.FileEditorInput;
-import org.eclipse.ui.texteditor.ITextEditor;
-
-/**
- * A number of routines for working with JavaElements in editors
- *
- * Use 'isOpenInEditor' to test if an element is already open in a editor Use
- * 'openInEditor' to force opening an element in a editor With 'getWorkingCopy'
- * you get the working copy (element in the editor) of an element
- */
-public class EditorUtility {
-
- public static boolean isEditorInput(Object element, IEditorPart editor) {
- if (editor != null) {
- try {
- return editor.getEditorInput().equals(getEditorInput(element));
- } catch (JavaModelException x) {
- PHPeclipsePlugin.log(x.getStatus());
- }
- }
- return false;
- }
-
- /**
- * Tests if a cu is currently shown in an editor
- *
- * @return the IEditorPart if shown, null if element is not open in an
- * editor
- */
- public static IEditorPart isOpenInEditor(Object inputElement) {
- IEditorInput input = null;
-
- try {
- input = getEditorInput(inputElement);
- } catch (JavaModelException x) {
- PHPeclipsePlugin.log(x.getStatus());
- }
-
- if (input != null) {
- IWorkbenchPage p = PHPeclipsePlugin.getActivePage();
- if (p != null) {
- return p.findEditor(input);
- }
- }
-
- return null;
- }
-
- /**
- * Opens a Java editor for an element such as <code>IJavaElement</code>,
- * <code>IFile</code>, or <code>IStorage</code>. The editor is
- * activated by default.
- *
- * @return the IEditorPart or null if wrong element type or opening failed
- */
- public static IEditorPart openInEditor(Object inputElement)
- throws JavaModelException, PartInitException {
- return openInEditor(inputElement, true);
- }
-
- /**
- * Opens a Java editor for an element (IJavaElement, IFile, IStorage...)
- *
- * @return the IEditorPart or null if wrong element type or opening failed
- */
- public static IEditorPart openInEditor(Object inputElement, boolean activate)
- throws JavaModelException, PartInitException {
-
- if (inputElement instanceof IFile)
- return openInEditor((IFile) inputElement, activate);
-
- IEditorInput input = getEditorInput(inputElement);
- if (input instanceof IFileEditorInput) {
- IFileEditorInput fileInput = (IFileEditorInput) input;
- return openInEditor(fileInput.getFile(), activate);
- }
-
- if (input != null)
- return openInEditor(input, getEditorID(input, inputElement),
- activate);
-
- return null;
- }
-
- /**
- * Selects a Java Element in an editor
- */
- public static void revealInEditor(IEditorPart part, IJavaElement element) {
- if (element != null && part instanceof PHPEditor) {
- ((PHPEditor) part).setSelection(element);
- }
- }
-
- private static IEditorPart openInEditor(IFile file, boolean activate)
- throws PartInitException {
- if (file != null) {
- IWorkbenchPage p = PHPeclipsePlugin.getActivePage();
- if (p != null) {
- IEditorPart editorPart = IDE.openEditor(p, file, activate);
- initializeHighlightRange(editorPart);
- return editorPart;
- }
- }
- return null;
- }
-
- private static IEditorPart openInEditor(IEditorInput input,
- String editorID, boolean activate) throws PartInitException {
- if (input != null) {
- IWorkbenchPage p = PHPeclipsePlugin.getActivePage();
- if (p != null) {
- IEditorPart editorPart = p
- .openEditor(input, editorID, activate);
- initializeHighlightRange(editorPart);
- return editorPart;
- }
- }
- return null;
- }
-
- private static void initializeHighlightRange(IEditorPart editorPart) {
- if (editorPart instanceof ITextEditor) {
- TogglePresentationAction toggleAction = new TogglePresentationAction();
- // Initialize editor
- toggleAction.setEditor((ITextEditor) editorPart);
- // Reset action
- toggleAction.setEditor(null);
- }
- }
-
- /**
- * @deprecated Made it public again for java debugger UI.
- */
- public static String getEditorID(IEditorInput input, Object inputObject) {
- IEditorRegistry registry = PlatformUI.getWorkbench()
- .getEditorRegistry();
- IEditorDescriptor descriptor = registry.getDefaultEditor(input
- .getName());
- if (descriptor != null)
- return descriptor.getId();
- return null;
- }
-
- private static IEditorInput getEditorInput(IJavaElement element)
- throws JavaModelException {
- while (element != null) {
- if (element instanceof IWorkingCopy
- && ((IWorkingCopy) element).isWorkingCopy())
- element = ((IWorkingCopy) element).getOriginalElement();
-
- if (element instanceof ICompilationUnit) {
- ICompilationUnit unit = (ICompilationUnit) element;
- IResource resource = unit.getResource();
- if (resource instanceof IFile)
- return new FileEditorInput((IFile) resource);
- }
-
- // if (element instanceof IClassFile)
- // return new InternalClassFileEditorInput((IClassFile) element);
- //
- element = element.getParent();
- }
-
- return null;
- }
-
- public static IEditorInput getEditorInput(Object input)
- throws JavaModelException {
-
- if (input instanceof IJavaElement)
- return getEditorInput((IJavaElement) input);
-
- if (input instanceof IFile)
- return new FileEditorInput((IFile) input);
-
- // if (input instanceof IStorage)
- // return new JarEntryEditorInput((IStorage)input);
-
- return null;
- }
-
- /**
- * If the current active editor edits a java element return it, else return
- * null
- */
- public static IJavaElement getActiveEditorJavaInput() {
- IWorkbenchPage page = PHPeclipsePlugin.getActivePage();
- if (page != null) {
- IEditorPart part = page.getActiveEditor();
- if (part != null) {
- IEditorInput editorInput = part.getEditorInput();
- if (editorInput != null) {
- return (IJavaElement) editorInput
- .getAdapter(IJavaElement.class);
- }
- }
- }
- return null;
- }
-
- /**
- * Gets the working copy of an compilation unit opened in an editor
- *
- * @param part
- * the editor part
- * @param cu
- * the original compilation unit (or another working copy)
- * @return the working copy of the compilation unit, or null if not found
- */
- public static ICompilationUnit getWorkingCopy(ICompilationUnit cu) {
- if (cu == null)
- return null;
- if (cu.isWorkingCopy())
- return cu;
-
- return (ICompilationUnit) cu.findSharedWorkingCopy(JavaUI
- .getBufferFactory());
- }
-
- /**
- * Gets the working copy of an member opened in an editor
- *
- * @param member
- * the original member or a member in a working copy
- * @return the corresponding member in the shared working copy or
- * <code>null</code> if not found
- */
- public static IMember getWorkingCopy(IMember member)
- throws JavaModelException {
- ICompilationUnit cu = member.getCompilationUnit();
- if (cu != null) {
- ICompilationUnit workingCopy = getWorkingCopy(cu);
- if (workingCopy != null) {
- return JavaModelUtil.findMemberInCompilationUnit(workingCopy,
- member);
- }
- }
- return null;
- }
-
- /**
- * Returns the compilation unit for the given java element.
- *
- * @param element
- * the java element whose compilation unit is searched for
- * @return the compilation unit of the given java element
- */
- private static ICompilationUnit getCompilationUnit(IJavaElement element) {
-
- if (element == null)
- return null;
-
- if (element instanceof IMember)
- return ((IMember) element).getCompilationUnit();
-
- int type = element.getElementType();
- if (IJavaElement.COMPILATION_UNIT == type)
- return (ICompilationUnit) element;
- if (IJavaElement.CLASS_FILE == type)
- return null;
-
- return getCompilationUnit(element.getParent());
- }
-
- /**
- * Returns the working copy of the given java element.
- *
- * @param javaElement
- * the javaElement for which the working copyshould be found
- * @param reconcile
- * indicates whether the working copy must be reconcile prior to
- * searching it
- * @return the working copy of the given element or <code>null</code> if
- * none
- */
- public static IJavaElement getWorkingCopy(IJavaElement element,
- boolean reconcile) throws JavaModelException {
- ICompilationUnit unit = getCompilationUnit(element);
- if (unit == null)
- return null;
-
- if (unit.isWorkingCopy())
- return element;
-
- ICompilationUnit workingCopy = getWorkingCopy(unit);
- if (workingCopy != null) {
- if (reconcile) {
- synchronized (workingCopy) {
- workingCopy.reconcile();
- return JavaModelUtil.findInCompilationUnit(workingCopy,
- element);
- }
- } else {
- return JavaModelUtil
- .findInCompilationUnit(workingCopy, element);
- }
- }
-
- return null;
- }
-
- /**
- * Maps the localized modifier name to a code in the same manner as
- * #findModifier.
- *
- * @return the SWT modifier bit, or <code>0</code> if no match was found
- * @see findModifier
- * @since 2.1.1
- */
- public static int findLocalizedModifier(String token) {
- if (token == null)
- return 0;
-
- if (token.equalsIgnoreCase(Action.findModifierString(SWT.CTRL)))
- return SWT.CTRL;
- if (token.equalsIgnoreCase(Action.findModifierString(SWT.SHIFT)))
- return SWT.SHIFT;
- if (token.equalsIgnoreCase(Action.findModifierString(SWT.ALT)))
- return SWT.ALT;
- if (token.equalsIgnoreCase(Action.findModifierString(SWT.COMMAND)))
- return SWT.COMMAND;
-
- return 0;
- }
-
- /**
- * Returns the modifier string for the given SWT modifier modifier bits.
- *
- * @param stateMask
- * the SWT modifier bits
- * @return the modifier string
- * @since 2.1.1
- */
- public static String getModifierString(int stateMask) {
- String modifierString = ""; //$NON-NLS-1$
- if ((stateMask & SWT.CTRL) == SWT.CTRL)
- modifierString = appendModifierString(modifierString, SWT.CTRL);
- if ((stateMask & SWT.ALT) == SWT.ALT)
- modifierString = appendModifierString(modifierString, SWT.ALT);
- if ((stateMask & SWT.SHIFT) == SWT.SHIFT)
- modifierString = appendModifierString(modifierString, SWT.SHIFT);
- if ((stateMask & SWT.COMMAND) == SWT.COMMAND)
- modifierString = appendModifierString(modifierString, SWT.COMMAND);
-
- return modifierString;
- }
-
- /**
- * Appends to modifier string of the given SWT modifier bit to the given
- * modifierString.
- *
- * @param modifierString
- * the modifier string
- * @param modifier
- * an int with SWT modifier bit
- * @return the concatenated modifier string
- * @since 2.1.1
- */
- private static String appendModifierString(String modifierString,
- int modifier) {
- if (modifierString == null)
- modifierString = ""; //$NON-NLS-1$
- String newModifierString = Action.findModifierString(modifier);
- if (modifierString.length() == 0)
- return newModifierString;
- return PHPEditorMessages
- .getFormattedString(
- "EditorUtility.concatModifierStrings", new String[] { modifierString, newModifierString }); //$NON-NLS-1$
- }
-
- /**
- * Returns the Java project for a given editor input or <code>null</code>
- * if no corresponding Java project exists.
- *
- * @param input
- * the editor input
- * @return the corresponding Java project
- *
- * @since 3.0
- */
- public static IJavaProject getJavaProject(IEditorInput input) {
- IJavaProject jProject = null;
- if (input instanceof IFileEditorInput) {
- IProject project = ((IFileEditorInput) input).getFile()
- .getProject();
- if (project != null) {
- jProject = JavaCore.create(project);
- if (!jProject.exists())
- jProject = null;
- }
- }
- // else if (input instanceof IClassFileEditorInput) {
- // jProject=
- // ((IClassFileEditorInput)input).getClassFile().getJavaProject();
- // }
- return jProject;
- }
-}