X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java index 7ecba2c..0ba1930 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java @@ -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; @@ -49,7 +48,7 @@ import net.sourceforge.phpdt.internal.ui.text.JavaWordFinder; import net.sourceforge.phpdt.internal.ui.text.JavaWordIterator; import net.sourceforge.phpdt.internal.ui.text.PHPPairMatcher; import net.sourceforge.phpdt.internal.ui.text.PreferencesAdapter; -import net.sourceforge.phpdt.internal.ui.text.java.JavaExpandHover; +import net.sourceforge.phpdt.internal.ui.text.java.hover.JavaExpandHover; import net.sourceforge.phpdt.internal.ui.viewsupport.ISelectionListenerWithAST; import net.sourceforge.phpdt.internal.ui.viewsupport.IViewPartInputProvider; import net.sourceforge.phpdt.internal.ui.viewsupport.SelectionListenerWithASTManager; @@ -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; @@ -120,6 +118,7 @@ import org.eclipse.jface.text.source.IOverviewRuler; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.jface.text.source.ISourceViewerExtension2; import org.eclipse.jface.text.source.IVerticalRuler; +import org.eclipse.jface.text.source.IVerticalRulerColumn; import org.eclipse.jface.text.source.OverviewRuler; import org.eclipse.jface.text.source.SourceViewerConfiguration; import org.eclipse.jface.text.source.projection.ProjectionSupport; @@ -2186,8 +2185,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 +2899,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 +3139,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 +3315,15 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I * true if search direction is forward, * false 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 +3332,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I setStatusLineMessage(annotation.getText()); } } + return annotation; } /** @@ -3576,15 +3591,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 +4224,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 +4237,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 +4247,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I } if (PreferenceConstants.EDITOR_STICKY_OCCURRENCES.equals(property)) { - fStickyOccurrenceAnnotations= newBooleanValue; + fStickyOccurrenceAnnotations = newBooleanValue; return; } // } @@ -4246,7 +4261,6 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I // if (stickyOccurrenceAnnotations != fStickyOccurrenceAnnotations) // { - ((PHPSourceViewerConfiguration) getSourceViewerConfiguration()).handlePropertyChangeEvent(event); // if (affectsOverrideIndicatorAnnotations(event)) { @@ -4766,8 +4780,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 +4951,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 +4981,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) @@ -5378,12 +5395,53 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I /* * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#createCompositeRuler() */ - protected CompositeRuler createCompositeRuler() { +// protected CompositeRuler createCompositeRuler() { +// if (!getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_ANNOTATION_ROLL_OVER)) +// return super.createCompositeRuler(); +// +// CompositeRuler ruler = new CompositeRuler(); +// AnnotationRulerColumn column = new AnnotationRulerColumn(VERTICAL_RULER_WIDTH, getAnnotationAccess()); +// column.setHover(new JavaExpandHover(ruler, getAnnotationAccess(), new IDoubleClickListener() { +// +// public void doubleClick(DoubleClickEvent event) { +// // for now: just invoke ruler double click action +// triggerAction(ITextEditorActionConstants.RULER_DOUBLE_CLICK); +// } +// +// private void triggerAction(String actionID) { +// IAction action = getAction(actionID); +// if (action != null) { +// if (action instanceof IUpdate) +// ((IUpdate) action).update(); +// // hack to propagate line change +// if (action instanceof ISelectionListener) { +// ((ISelectionListener) action).selectionChanged(null, null); +// } +// if (action.isEnabled()) +// action.run(); +// } +// } +// +// })); +// ruler.addDecorator(0, column); +// +// if (isLineNumberRulerVisible()) +// ruler.addDecorator(1, createLineNumberRulerColumn()); +// else if (isPrefQuickDiffAlwaysOn()) +// ruler.addDecorator(1, createChangeRulerColumn()); +// +// return ruler; +// } + + /* + * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#createAnnotationRulerColumn(org.eclipse.jface.text.source.CompositeRuler) + * @since 3.2 + */ + protected IVerticalRulerColumn createAnnotationRulerColumn(CompositeRuler ruler) { if (!getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_ANNOTATION_ROLL_OVER)) - return super.createCompositeRuler(); + return super.createAnnotationRulerColumn(ruler); - CompositeRuler ruler = new CompositeRuler(); - AnnotationRulerColumn column = new AnnotationRulerColumn(VERTICAL_RULER_WIDTH, getAnnotationAccess()); + AnnotationRulerColumn column= new AnnotationRulerColumn(VERTICAL_RULER_WIDTH, getAnnotationAccess()); column.setHover(new JavaExpandHover(ruler, getAnnotationAccess(), new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { @@ -5392,13 +5450,13 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I } private void triggerAction(String actionID) { - IAction action = getAction(actionID); + IAction action= getAction(actionID); if (action != null) { if (action instanceof IUpdate) ((IUpdate) action).update(); // hack to propagate line change if (action instanceof ISelectionListener) { - ((ISelectionListener) action).selectionChanged(null, null); + ((ISelectionListener)action).selectionChanged(null, null); } if (action.isEnabled()) action.run(); @@ -5406,16 +5464,9 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I } })); - ruler.addDecorator(0, column); - - if (isLineNumberRulerVisible()) - ruler.addDecorator(1, createLineNumberRulerColumn()); - else if (isPrefQuickDiffAlwaysOn()) - ruler.addDecorator(1, createChangeRulerColumn()); - - return ruler; + + return column; } - /** * Returns the folding action group, or null if there is none. * @@ -5567,7 +5618,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 +5629,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 +5637,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 +5650,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 +5663,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 +5722,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);