Eclipse 3M7
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / phpeditor / JavaSelectMarkerRulerAction.java
index b32d137..6e01d7b 100644 (file)
@@ -13,44 +13,54 @@ package net.sourceforge.phpeclipse.phpeditor;
 import java.util.Iterator;
 import java.util.ResourceBundle;
 
+import net.sourceforge.phpdt.core.ICompilationUnit;
+import net.sourceforge.phpdt.core.IJavaElement;
+import net.sourceforge.phpdt.core.JavaCore;
 import net.sourceforge.phpdt.internal.ui.IJavaHelpContextIds;
+import net.sourceforge.phpdt.ui.PreferenceConstants;
+import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.ITextOperationTarget;
 import org.eclipse.jface.text.Position;
 import org.eclipse.jface.text.source.Annotation;
 import org.eclipse.jface.text.source.IVerticalRulerInfo;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IFileEditorInput;
 import org.eclipse.ui.help.WorkbenchHelp;
 import org.eclipse.ui.texteditor.AbstractMarkerAnnotationModel;
 import org.eclipse.ui.texteditor.ITextEditor;
 import org.eclipse.ui.texteditor.ITextEditorExtension;
 import org.eclipse.ui.texteditor.SelectMarkerRulerAction;
 
+
 /**
  * A special select marker ruler action which activates quick fix if clicked on a quick fixable problem.
  */
 public class JavaSelectMarkerRulerAction extends SelectMarkerRulerAction {
 
-       private ITextEditor fMyTextEditor;
+       private ITextEditor fTextEditor;
        private Position fPosition;
 
        public JavaSelectMarkerRulerAction(ResourceBundle bundle, String prefix, ITextEditor editor, IVerticalRulerInfo ruler) {
                super(bundle, prefix, editor, ruler);
-               fMyTextEditor= editor;
+               fTextEditor= editor;
                WorkbenchHelp.setHelp(this, IJavaHelpContextIds.JAVA_SELECT_MARKER_RULER_ACTION);
        }
        
        public void run() {
-               superCall: {
-                       if (fPosition == null)
-                               break superCall;
-                       ITextOperationTarget operation= (ITextOperationTarget) fMyTextEditor.getAdapter(ITextOperationTarget.class);
-//                     final int opCode= CompilationUnitEditor.CORRECTIONASSIST_PROPOSALS;
-                       if (operation == null ) { //|| !operation.canDoOperation(opCode)) {
-                               break superCall;
-                       }
-                       fMyTextEditor.selectAndReveal(fPosition.getOffset(), 0);
-//                     operation.doOperation(opCode);
+//             if (PHPeclipsePlugin.getDefault().getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_ANNOTATION_ROLL_OVER))
+//                     return;
+
+               if (fPosition != null) {
+                       ITextOperationTarget operation= (ITextOperationTarget) fTextEditor.getAdapter(ITextOperationTarget.class);
+//                     final int opCode= PHPUnitEditor.CORRECTIONASSIST_PROPOSALS;
+//                     if (operation != null && operation.canDoOperation(opCode)) {
+//                             fTextEditor.selectAndReveal(fPosition.getOffset(), fPosition.getLength());
+//                             operation.doOperation(opCode);
+//                             return;
+//                     }
                        return;
                }
                super.run();
@@ -58,7 +68,7 @@ public class JavaSelectMarkerRulerAction extends SelectMarkerRulerAction {
        
        public void update() {
                // Begin Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20114
-               if (!(fMyTextEditor instanceof ITextEditorExtension) || ((ITextEditorExtension) fMyTextEditor).isEditorInputReadOnly()) {
+               if (!(fTextEditor instanceof ITextEditorExtension) || ((ITextEditorExtension) fTextEditor).isEditorInputReadOnly()) {
                        fPosition= null;
                        super.update();
                        return;
@@ -76,17 +86,47 @@ public class JavaSelectMarkerRulerAction extends SelectMarkerRulerAction {
                IDocument document= getDocument();
                if (model == null)
                        return null;
+               ICompilationUnit cu= getCompilationUnit();
+               if (cu == null) {
+                       return null;
+               }
+               
+//             boolean hasAssistLightbulb= PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.APPEARANCE_QUICKASSIST_LIGHTBULB);
+               Annotation assistAnnotation= null;
+                       
                Iterator iter= model.getAnnotationIterator();
                while (iter.hasNext()) {
                        Annotation annotation= (Annotation) iter.next();
                        if (annotation instanceof IJavaAnnotation) {
                                IJavaAnnotation javaAnnotation= (IJavaAnnotation)annotation;
-                               if (javaAnnotation.isRelevant()) {
+                               if (!javaAnnotation.isMarkedDeleted()) {
                                        Position position= model.getPosition(annotation);
 //                                     if (includesRulerLine(position, document) && JavaCorrectionProcessor.hasCorrections(javaAnnotation))
 //                                             return position;
                                }
-                       }
+                       } 
+//                     else if (hasAssistLightbulb && annotation instanceof AssistAnnotation) {
+//                             // there is only one AssistAnnotation at a time
+//                             assistAnnotation= annotation; 
+//                     }
+               }
+               if (assistAnnotation != null) {
+                       Position position= model.getPosition(assistAnnotation);
+                       // no need to check 'JavaCorrectionProcessor.hasAssists': annotation only created when
+                       // there are assists
+                       if (includesRulerLine(position, document))
+                               return position;
+               }
+               return null;
+       }
+       
+       private ICompilationUnit getCompilationUnit() {
+               IEditorInput input= fTextEditor.getEditorInput();
+               if (input instanceof IFileEditorInput) {
+                       IFile file= ((IFileEditorInput) input).getFile();
+                       IJavaElement element= JavaCore.create(file);
+                       if (element instanceof ICompilationUnit)
+                               return (ICompilationUnit) element;
                }
                return null;
        }