make compilable in 3.2
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / phpeditor / PHPEditor.java
index 7ecba2c..e692e83 100644 (file)
@@ -37,7 +37,6 @@ import net.sourceforge.phpdt.core.compiler.ITerminalSymbols;
 import net.sourceforge.phpdt.core.compiler.InvalidInputException;
 import net.sourceforge.phpdt.internal.compiler.parser.Scanner;
 import net.sourceforge.phpdt.internal.compiler.parser.SyntaxError;
-import net.sourceforge.phpdt.internal.core.CompilationUnit;
 import net.sourceforge.phpdt.internal.ui.actions.CompositeActionGroup;
 import net.sourceforge.phpdt.internal.ui.actions.FoldingActionGroup;
 import net.sourceforge.phpdt.internal.ui.actions.SelectionConverter;
@@ -98,7 +97,6 @@ import org.eclipse.jface.text.ITextPresentationListener;
 import org.eclipse.jface.text.ITextSelection;
 import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.ITextViewerExtension2;
-import org.eclipse.jface.text.ITextViewerExtension3;
 import org.eclipse.jface.text.ITextViewerExtension4;
 import org.eclipse.jface.text.ITextViewerExtension5;
 import org.eclipse.jface.text.ITypedRegion;
@@ -2186,8 +2184,8 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
 
                        try {
                                int widgetLocation = styledText.getOffsetAtLocation(new Point(x, y));
-                               if (textViewer instanceof ITextViewerExtension3) {
-                                       ITextViewerExtension3 extension = (ITextViewerExtension3) textViewer;
+                               if (textViewer instanceof ITextViewerExtension5) {
+                                       ITextViewerExtension5 extension = (ITextViewerExtension5) textViewer;
                                        return extension.widgetOffset2ModelOffset(widgetLocation);
                                } else {
                                        IRegion visibleRegion = textViewer.getVisibleRegion();
@@ -2900,15 +2898,21 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
                        doSelectionChanged(event);
                }
        }
+
        /**
         * The internal shell activation listener for updating occurrences.
+        *
         * @since 3.0
         */
-       private ActivationListener fActivationListener= new ActivationListener();
+       private ActivationListener fActivationListener = new ActivationListener();
+
        private ISelectionListenerWithAST fPostSelectionListenerWithAST;
+
        private OccurrencesFinderJob fOccurrencesFinderJob;
+
        /** The occurrences finder job canceler */
        private OccurrencesFinderJobCanceler fOccurrencesFinderJobCanceler;
+
        /**
         * Holds the current occurrence annotations.
         *
@@ -3134,16 +3138,24 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
                // setSourceViewerConfiguration(new
                // JavaSourceViewerConfiguration(textTools.getColorManager(), store,
                // this, IJavaPartitions.JAVA_PARTITIONING));
-               fMarkOccurrenceAnnotations= store.getBoolean(PreferenceConstants.EDITOR_MARK_OCCURRENCES);
-               fStickyOccurrenceAnnotations= store.getBoolean(PreferenceConstants.EDITOR_STICKY_OCCURRENCES);
-//             fMarkTypeOccurrences= store.getBoolean(PreferenceConstants.EDITOR_MARK_TYPE_OCCURRENCES);
-//             fMarkMethodOccurrences= store.getBoolean(PreferenceConstants.EDITOR_MARK_METHOD_OCCURRENCES);
-//             fMarkConstantOccurrences= store.getBoolean(PreferenceConstants.EDITOR_MARK_CONSTANT_OCCURRENCES);
-//             fMarkFieldOccurrences= store.getBoolean(PreferenceConstants.EDITOR_MARK_FIELD_OCCURRENCES);
-//             fMarkLocalVariableypeOccurrences= store.getBoolean(PreferenceConstants.EDITOR_MARK_LOCAL_VARIABLE_OCCURRENCES);
-//             fMarkExceptions= store.getBoolean(PreferenceConstants.EDITOR_MARK_EXCEPTION_OCCURRENCES);
-//             fMarkImplementors= store.getBoolean(PreferenceConstants.EDITOR_MARK_IMPLEMENTORS);
-//             fMarkMethodExitPoints= store.getBoolean(PreferenceConstants.EDITOR_MARK_METHOD_EXIT_POINTS);
+               fMarkOccurrenceAnnotations = store.getBoolean(PreferenceConstants.EDITOR_MARK_OCCURRENCES);
+               fStickyOccurrenceAnnotations = store.getBoolean(PreferenceConstants.EDITOR_STICKY_OCCURRENCES);
+               // fMarkTypeOccurrences=
+               // store.getBoolean(PreferenceConstants.EDITOR_MARK_TYPE_OCCURRENCES);
+               // fMarkMethodOccurrences=
+               // store.getBoolean(PreferenceConstants.EDITOR_MARK_METHOD_OCCURRENCES);
+               // fMarkConstantOccurrences=
+               // store.getBoolean(PreferenceConstants.EDITOR_MARK_CONSTANT_OCCURRENCES);
+               // fMarkFieldOccurrences=
+               // store.getBoolean(PreferenceConstants.EDITOR_MARK_FIELD_OCCURRENCES);
+               // fMarkLocalVariableypeOccurrences=
+               // store.getBoolean(PreferenceConstants.EDITOR_MARK_LOCAL_VARIABLE_OCCURRENCES);
+               // fMarkExceptions=
+               // store.getBoolean(PreferenceConstants.EDITOR_MARK_EXCEPTION_OCCURRENCES);
+               // fMarkImplementors=
+               // store.getBoolean(PreferenceConstants.EDITOR_MARK_IMPLEMENTORS);
+               // fMarkMethodExitPoints=
+               // store.getBoolean(PreferenceConstants.EDITOR_MARK_METHOD_EXIT_POINTS);
 
        }
 
@@ -3302,14 +3314,15 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
         *          <code>true</code> if search direction is forward,
         *          <code>false</code> if backward
         */
-       public void gotoAnnotation(boolean forward) {
+       public Annotation gotoAnnotation(boolean forward) {
                ITextSelection selection = (ITextSelection) getSelectionProvider().getSelection();
                Position position = new Position(0, 0);
+               Annotation annotation=null;
                if (false /* delayed - see bug 18316 */) {
-                       getNextAnnotation(selection.getOffset(), selection.getLength(), forward, position);
+                       annotation=getNextAnnotation(selection.getOffset(), selection.getLength(), forward, position);
                        selectAndReveal(position.getOffset(), position.getLength());
                } else /* no delay - see bug 18316 */{
-                       Annotation annotation = getNextAnnotation(selection.getOffset(), selection.getLength(), forward, position);
+                       annotation = getNextAnnotation(selection.getOffset(), selection.getLength(), forward, position);
                        setStatusLineErrorMessage(null);
                        setStatusLineMessage(null);
                        if (annotation != null) {
@@ -3318,6 +3331,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
                                setStatusLineMessage(annotation.getText());
                        }
                }
+               return annotation;
        }
 
        /**
@@ -3576,15 +3590,15 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
                if (isBrowserLikeLinks())
                        disableBrowserLikeLinks();
 
-//      cancel possible running computation
-               fMarkOccurrenceAnnotations= false;
+               // cancel possible running computation
+               fMarkOccurrenceAnnotations = false;
                uninstallOccurrencesFinder();
 
                uninstallOverrideIndicator();
 
                if (fActivationListener != null) {
                        PlatformUI.getWorkbench().removeWindowListener(fActivationListener);
-                       fActivationListener= null;
+                       fActivationListener = null;
                }
 
                if (fEncodingSupport != null) {
@@ -4209,10 +4223,10 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
                                return;
                        }
 
-                       boolean newBooleanValue= false;
-                       Object newValue= event.getNewValue();
+                       boolean newBooleanValue = false;
+                       Object newValue = event.getNewValue();
                        if (newValue != null)
-                               newBooleanValue= Boolean.valueOf(newValue.toString()).booleanValue();
+                               newBooleanValue = Boolean.valueOf(newValue.toString()).booleanValue();
 
                        if (PreferenceConstants.EDITOR_SYNC_OUTLINE_ON_CURSOR_MOVE.equals(property)) {
                                if (newBooleanValue)
@@ -4222,7 +4236,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
 
                        if (PreferenceConstants.EDITOR_MARK_OCCURRENCES.equals(property)) {
                                if (newBooleanValue != fMarkOccurrenceAnnotations) {
-                                       fMarkOccurrenceAnnotations= newBooleanValue;
+                                       fMarkOccurrenceAnnotations = newBooleanValue;
                                        if (!fMarkOccurrenceAnnotations)
                                                uninstallOccurrencesFinder();
                                        else
@@ -4232,7 +4246,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
                        }
 
                        if (PreferenceConstants.EDITOR_STICKY_OCCURRENCES.equals(property)) {
-                               fStickyOccurrenceAnnotations= newBooleanValue;
+                               fStickyOccurrenceAnnotations = newBooleanValue;
                                return;
                        }
                        // }
@@ -4246,7 +4260,6 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
                        // if (stickyOccurrenceAnnotations != fStickyOccurrenceAnnotations)
                        // {
 
-
                        ((PHPSourceViewerConfiguration) getSourceViewerConfiguration()).handlePropertyChangeEvent(event);
 
                        // if (affectsOverrideIndicatorAnnotations(event)) {
@@ -4766,8 +4779,8 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
                int targetOffset = (PHPPairMatcher.RIGHT == anchor) ? offset : offset + length - 1;
 
                boolean visible = false;
-               if (sourceViewer instanceof ITextViewerExtension3) {
-                       ITextViewerExtension3 extension = (ITextViewerExtension3) sourceViewer;
+               if (sourceViewer instanceof ITextViewerExtension5) {
+                       ITextViewerExtension5 extension = (ITextViewerExtension5) sourceViewer;
                        visible = (extension.modelOffset2WidgetOffset(targetOffset) > -1);
                } else {
                        IRegion visibleRegion = sourceViewer.getVisibleRegion();
@@ -4937,7 +4950,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
         *         otherwise
         * @since 3.0
         */
-       private boolean isNavigationTarget(Annotation annotation) {
+       protected boolean isNavigationTarget(Annotation annotation) {
                Preferences preferences = EditorsUI.getPluginPreferences();
                AnnotationPreference preference = getAnnotationPreferenceLookup().getAnnotationPreference(annotation);
                // See bug 41689
@@ -4967,8 +4980,11 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
 
                List segmentation = new ArrayList();
                for (int i = 0; i < linePartitioning.length; i++) {
-                       if (IPHPPartitions.PHP_STRING_DQ.equals(linePartitioning[i].getType()))
+                       if (IPHPPartitions.PHP_STRING_DQ.equals(linePartitioning[i].getType())) {
                                segmentation.add(linePartitioning[i]);
+                       } else if (IPHPPartitions.PHP_STRING_HEREDOC.equals(linePartitioning[i].getType())) {
+                               segmentation.add(linePartitioning[i]);
+                       }
                }
 
                if (segmentation.size() == 0)
@@ -5567,7 +5583,10 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
         *          the compilation unit AST
         * @since 3.0
         */
-       protected void updateOccurrenceAnnotations(ITextSelection selection) {//, CompilationUnit astRoot) {
+       protected void updateOccurrenceAnnotations(ITextSelection selection) {// ,
+               // CompilationUnit
+               // astRoot)
+               // {
 
                if (fOccurrencesFinderJob != null)
                        fOccurrencesFinderJob.cancel();
@@ -5575,7 +5594,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
                if (!fMarkOccurrenceAnnotations)
                        return;
 
-//             if (astRoot == null || selection == null)
+               // if (astRoot == null || selection == null)
                if (selection == null)
                        return;
 
@@ -5583,6 +5602,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
                if (document == null)
                        return;
 
+               fMarkOccurrenceTargetRegion = null;
                if (document instanceof IDocumentExtension4) {
                        int offset = selection.getOffset();
                        long currentModificationStamp = ((IDocumentExtension4) document).getModificationStamp();
@@ -5595,6 +5615,10 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
                        fMarkOccurrenceModificationStamp = currentModificationStamp;
                }
 
+               if (fMarkOccurrenceTargetRegion == null || fMarkOccurrenceTargetRegion.getLength() == 0) {
+                       return;
+               }
+
                List matches = null;
 
                if (matches == null) {
@@ -5604,32 +5628,37 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
                                Scanner fScanner = new Scanner();
                                fScanner.setSource(document.get().toCharArray());
                                fScanner.setPHPMode(false);
+                               String wordStr;
                                char[] word;
 
-                               word = document.get(fMarkOccurrenceTargetRegion.getOffset(), fMarkOccurrenceTargetRegion.getLength()).toCharArray();
-
-                               int fToken = ITerminalSymbols.TokenNameEOF;
-                               try {
-                                       fToken = fScanner.getNextToken();
-                                       while (fToken != ITerminalSymbols.TokenNameEOF) { // && fToken !=
-                                               // TokenNameERROR) {
-                                               if (fToken == ITerminalSymbols.TokenNameVariable || fToken == ITerminalSymbols.TokenNameIdentifier) {
-                                                       // global variable
-                                                       if (fScanner.equalsCurrentTokenSource(word)) {
-                                                               matches.add(new Region(fScanner.getCurrentTokenStartPosition(), fScanner.getCurrentTokenEndPosition()
-                                                                               - fScanner.getCurrentTokenStartPosition()+1));
+                               wordStr = document.get(fMarkOccurrenceTargetRegion.getOffset(), fMarkOccurrenceTargetRegion.getLength());
+                               if (wordStr != null) {
+                                       word = wordStr.toCharArray();
+                                       int fToken = ITerminalSymbols.TokenNameEOF;
+                                       try {
+                                               fToken = fScanner.getNextToken();
+                                               while (fToken != ITerminalSymbols.TokenNameEOF) { // && fToken !=
+                                                       // TokenNameERROR) {
+                                                       if (fToken == ITerminalSymbols.TokenNameVariable || fToken == ITerminalSymbols.TokenNameIdentifier) {
+                                                               // global variable
+                                                               if (fScanner.equalsCurrentTokenSource(word)) {
+                                                                       matches.add(new Region(fScanner.getCurrentTokenStartPosition(), fScanner.getCurrentTokenEndPosition()
+                                                                                       - fScanner.getCurrentTokenStartPosition() + 1));
+                                                               }
                                                        }
+                                                       fToken = fScanner.getNextToken();
                                                }
-                                               fToken = fScanner.getNextToken();
+                                       } catch (InvalidInputException e) {
+                                               // ignore errors
+                                       } catch (SyntaxError e) {
+                                               // ignore errors
                                        }
-                               } catch (InvalidInputException e) {
-                                       // ignore errors
-                               } catch (SyntaxError e) {
-                                       // ignore errors
                                }
-
                        } catch (BadLocationException e1) {
                                // ignore errors
+                       } catch (Exception e) {
+                               e.printStackTrace();
+                               // ignore errors
                        }
 
                }
@@ -5658,8 +5687,11 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
                fMarkOccurrenceAnnotations = true;
 
                fPostSelectionListenerWithAST = new ISelectionListenerWithAST() {
-                       public void selectionChanged(IEditorPart part, ITextSelection selection) { //, CompilationUnit astRoot) {
-                               updateOccurrenceAnnotations(selection);//, astRoot);
+                       public void selectionChanged(IEditorPart part, ITextSelection selection) { // ,
+                               // CompilationUnit
+                               // astRoot)
+                               // {
+                               updateOccurrenceAnnotations(selection);// , astRoot);
                        }
                };
                SelectionListenerWithASTManager.getDefault().addListener(this, fPostSelectionListenerWithAST);