Modified: 1216132 - Error when debugging eval()'d code
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / phpeditor / EditorUtility.java
index 2cff713..7c1747a 100644 (file)
 
 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;
@@ -27,98 +35,106 @@ 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
+ * 
+ * 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 {
+                       try {
                                return editor.getEditorInput().equals(getEditorInput(element));
-//                     } catch (JavaModelException x) {
-//                             JavaPlugin.log(x.getStatus());
-//                     }
+                       } 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
-        */     
+        * 
+        * @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) {
-//                     JavaPlugin.log(x.getStatus());
-//             }
-               
+               IEditorInput input = null;
+
+               try {
+                       input = getEditorInput(inputElement);
+               } catch (JavaModelException x) {
+                       PHPeclipsePlugin.log(x.getStatus());
+               }
+
                if (input != null) {
-                       IWorkbenchPage p= PHPeclipsePlugin.getActivePage();
+                       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.
+        * 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 {
+       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 {
-               
+       public static IEditorPart openInEditor(Object inputElement, boolean activate)
+                       throws JavaModelException, PartInitException {
+
                if (inputElement instanceof IFile)
                        return openInEditor((IFile) inputElement, activate);
-               
-               IEditorInput input= getEditorInput(inputElement);
+
+               IEditorInput input = getEditorInput(inputElement);
                if (input instanceof IFileEditorInput) {
-                       IFileEditorInput fileInput= (IFileEditorInput) input;
+                       IFileEditorInput fileInput = (IFileEditorInput) input;
                        return openInEditor(fileInput.getFile(), activate);
                }
-               
+
                if (input != null)
-                       return openInEditor(input, getEditorID(input, inputElement), activate);
-                       
+                       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 {
+        */
+       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();
+                       IWorkbenchPage p = PHPeclipsePlugin.getActivePage();
                        if (p != null) {
-                               IEditorPart editorPart= p.openEditor(file, null, activate);
+                               IEditorPart editorPart = IDE.openEditor(p, file, activate);
                                initializeHighlightRange(editorPart);
                                return editorPart;
                        }
@@ -126,11 +142,13 @@ public class EditorUtility {
                return null;
        }
 
-       private static IEditorPart openInEditor(IEditorInput input, String editorID, boolean activate) throws PartInitException {
+       private static IEditorPart openInEditor(IEditorInput input,
+                       String editorID, boolean activate) throws PartInitException {
                if (input != null) {
-                       IWorkbenchPage p= PHPeclipsePlugin.getActivePage();
+                       IWorkbenchPage p = PHPeclipsePlugin.getActivePage();
                        if (p != null) {
-                               IEditorPart editorPart= p.openEditor(input, editorID, activate);
+                               IEditorPart editorPart = p
+                                               .openEditor(input, editorID, activate);
                                initializeHighlightRange(editorPart);
                                return editorPart;
                        }
@@ -140,165 +158,188 @@ public class EditorUtility {
 
        private static void initializeHighlightRange(IEditorPart editorPart) {
                if (editorPart instanceof ITextEditor) {
-                       TogglePresentationAction toggleAction= new TogglePresentationAction();
+                       TogglePresentationAction toggleAction = new TogglePresentationAction();
                        // Initialize editor
-                       toggleAction.setEditor((ITextEditor)editorPart);
+                       toggleAction.setEditor((ITextEditor) editorPart);
                        // Reset action
                        toggleAction.setEditor(null);
                }
        }
-       
+
        /**
-        *@deprecated   Made it public again for java debugger UI.
+        * @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());
+               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 {
-       
+
+       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) 
+
+               if (input instanceof IFile)
                        return new FileEditorInput((IFile) input);
-               
-//             if (input instanceof IStorage) 
-//                     return new JarEntryEditorInput((IStorage)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
+        * If the current active editor edits a java element return it, else return
+        * null
         */
        public static IJavaElement getActiveEditorJavaInput() {
-               IWorkbenchPage page= PHPeclipsePlugin.getActivePage();
+               IWorkbenchPage page = PHPeclipsePlugin.getActivePage();
                if (page != null) {
-                       IEditorPart part= page.getActiveEditor();
+                       IEditorPart part = page.getActiveEditor();
                        if (part != null) {
-                               IEditorInput editorInput= part.getEditorInput();
+                               IEditorInput editorInput = part.getEditorInput();
                                if (editorInput != null) {
-                                       return (IJavaElement)editorInput.getAdapter(IJavaElement.class);
+                                       return (IJavaElement) editorInput
+                                                       .getAdapter(IJavaElement.class);
                                }
                        }
                }
-               return null;    
+               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)
+        * 
+        * @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());
-//     }
-       
-       /** 
+        */
+       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;
-//     }
-       
+        * 
+        * @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
+        * 
+        * @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());
-//     }
-       
-       /** 
+       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;
-//     }
+        * 
+        * @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.
+        * 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
@@ -307,7 +348,7 @@ public class EditorUtility {
        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)))
@@ -321,42 +362,75 @@ public class EditorUtility {
        }
 
        /**
-        * Returns the modifier string for the given SWT modifier
-        * modifier bits.
+        * Returns the modifier string for the given SWT modifier modifier bits.
         * 
-        * @param stateMask     the SWT 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$
+               String modifierString = ""; //$NON-NLS-1$
                if ((stateMask & SWT.CTRL) == SWT.CTRL)
-                       modifierString= appendModifierString(modifierString, SWT.CTRL);
+                       modifierString = appendModifierString(modifierString, SWT.CTRL);
                if ((stateMask & SWT.ALT) == SWT.ALT)
-                       modifierString= appendModifierString(modifierString, SWT.ALT);
+                       modifierString = appendModifierString(modifierString, SWT.ALT);
                if ((stateMask & SWT.SHIFT) == SWT.SHIFT)
-                       modifierString= appendModifierString(modifierString, SWT.SHIFT);
+                       modifierString = appendModifierString(modifierString, SWT.SHIFT);
                if ((stateMask & SWT.COMMAND) == SWT.COMMAND)
-                       modifierString= appendModifierString(modifierString,  SWT.COMMAND);
-               
+                       modifierString = appendModifierString(modifierString, SWT.COMMAND);
+
                return modifierString;
        }
 
        /**
-        * Appends to modifier string of the given SWT modifier bit
-        * to the given 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
+        * @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) {
+       private static String appendModifierString(String modifierString,
+                       int modifier) {
                if (modifierString == null)
-                       modifierString= ""; //$NON-NLS-1$
-               String newModifierString= Action.findModifierString(modifier);
+                       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$
+               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;
        }
 }