X-Git-Url: http://git.phpeclipse.com
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPDocumentProvider.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPDocumentProvider.java
index 5751336..a79460d 100644
--- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPDocumentProvider.java
+++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPDocumentProvider.java
@@ -54,9 +54,11 @@ import org.eclipse.jface.text.ILineTracker;
import org.eclipse.jface.text.Position;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.text.source.AnnotationModelEvent;
+import org.eclipse.jface.text.source.IAnnotationAccessExtension;
import org.eclipse.jface.text.source.IAnnotationModel;
import org.eclipse.jface.text.source.IAnnotationModelListener;
import org.eclipse.jface.text.source.IAnnotationModelListenerExtension;
+import org.eclipse.jface.text.source.IAnnotationPresentation;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.ListenerList;
import org.eclipse.jface.util.PropertyChangeEvent;
@@ -68,11 +70,12 @@ import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.editors.text.EditorsUI;
import org.eclipse.ui.editors.text.FileDocumentProvider;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.texteditor.AbstractMarkerAnnotationModel;
-import org.eclipse.ui.texteditor.DefaultAnnotation;
-import org.eclipse.ui.texteditor.IAnnotationExtension;
+import org.eclipse.ui.texteditor.AnnotationPreference;
+import org.eclipse.ui.texteditor.AnnotationPreferenceLookup;
import org.eclipse.ui.texteditor.MarkerAnnotation;
import org.eclipse.ui.texteditor.ResourceMarkerAnnotationModel;
@@ -533,225 +536,211 @@ public class PHPDocumentProvider extends FileDocumentProvider {
}
/**
- * Annotation representating an IProblem
.
- */
- static protected class ProblemAnnotation extends Annotation implements IJavaAnnotation, IAnnotationExtension{
-
- private static final String TASK_ANNOTATION_TYPE= "org.eclipse.ui.workbench.texteditor.task"; //$NON-NLS-1$
- private static final String ERROR_ANNOTATION_TYPE= "org.eclipse.ui.workbench.texteditor.error"; //$NON-NLS-1$
- private static final String WARNING_ANNOTATION_TYPE= "org.eclipse.ui.workbench.texteditor.warning"; //$NON-NLS-1$
- private static final String INFO_ANNOTATION_TYPE= "org.eclipse.ui.workbench.texteditor.info"; //$NON-NLS-1$
-
- // private static Image fgQuickFixImage;
- // private static Image fgQuickFixErrorImage;
- // private static boolean fgQuickFixImagesInitialized = false;
-
- private ICompilationUnit fCompilationUnit;
- private List fOverlaids;
- private IProblem fProblem;
- private Image fImage;
- // private boolean fQuickFixImagesInitialized = false;
-// private AnnotationType fType;
- private String fType;
-
- public ProblemAnnotation(IProblem problem, ICompilationUnit cu) {
- fProblem= problem;
- fCompilationUnit= cu;
-
- if (IProblem.Task == fProblem.getID()) {
- fType= TASK_ANNOTATION_TYPE;
- setLayer(DefaultAnnotation.TASK_LAYER + 1);
- } else if (fProblem.isWarning()) {
- fType= WARNING_ANNOTATION_TYPE;
- setLayer(DefaultAnnotation.WARNING_LAYER + 1);
- } else if (fProblem.isError()) {
- fType= ERROR_ANNOTATION_TYPE;
- setLayer(DefaultAnnotation.ERROR_LAYER + 1);
- } else {
- fType= INFO_ANNOTATION_TYPE;
- setLayer(DefaultAnnotation.INFO_LAYER + 1);
- }
- }
-// public ProblemAnnotation(IProblem problem) {
-//
-// fProblem = problem;
-// setLayer(MarkerAnnotation.PROBLEM_LAYER + 1);
-//
-// if (IProblem.Task == fProblem.getID())
-// fType = AnnotationType.TASK;
-// else if (fProblem.isWarning())
-// fType = AnnotationType.WARNING;
-// else
-// fType = AnnotationType.ERROR;
-// }
-
- private void initializeImages() {
- // http://bugs.eclipse.org/bugs/show_bug.cgi?id=18936
- // if (!fQuickFixImagesInitialized) {
- // if (indicateQuixFixableProblems() && JavaCorrectionProcessor.hasCorrections(fProblem.getID())) {
- // if (!fgQuickFixImagesInitialized) {
- // fgQuickFixImage = JavaPluginImages.get(JavaPluginImages.IMG_OBJS_FIXABLE_PROBLEM);
- // fgQuickFixErrorImage = JavaPluginImages.get(JavaPluginImages.IMG_OBJS_FIXABLE_ERROR);
- // fgQuickFixImagesInitialized = true;
- // }
- // if (fType == AnnotationType.ERROR)
- // fImage = fgQuickFixErrorImage;
- // else
- // fImage = fgQuickFixImage;
- // }
- // fQuickFixImagesInitialized = true;
- // }
- }
-
- private boolean indicateQuixFixableProblems() {
- return PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_CORRECTION_INDICATION);
- }
-
- /*
- * @see Annotation#paint
- */
- public void paint(GC gc, Canvas canvas, Rectangle r) {
- initializeImages();
- if (fImage != null)
- drawImage(fImage, gc, canvas, r, SWT.CENTER, SWT.TOP);
- }
-
- /*
- * @see IJavaAnnotation#getImage(Display)
- */
- public Image getImage(Display display) {
- initializeImages();
- return fImage;
- }
-
- /*
- * @see IJavaAnnotation#getMessage()
- */
- public String getMessage() {
- return fProblem.getMessage();
- }
-
- /*
- * @see IJavaAnnotation#isTemporary()
- */
- public boolean isTemporary() {
- return true;
- }
-
- /*
- * @see IJavaAnnotation#getArguments()
- */
- public String[] getArguments() {
- return isProblem() ? fProblem.getArguments() : null;
- }
-
- /*
- * @see IJavaAnnotation#getId()
- */
- public int getId() {
- return isProblem() ? fProblem.getID() : -1;
- }
-
-// /*
-// * @see IJavaAnnotation#isProblem()
-// */
-// public boolean isProblem() {
-// return fType == AnnotationType.WARNING || fType == AnnotationType.ERROR;
-// }
- /*
- * @see IJavaAnnotation#isProblem()
- */
- public boolean isProblem() {
- return WARNING_ANNOTATION_TYPE.equals(fType) || ERROR_ANNOTATION_TYPE.equals(fType);
- }
-
- /*
- * @see IJavaAnnotation#isRelevant()
- */
- public boolean isRelevant() {
- return true;
- }
-
- /*
- * @see IJavaAnnotation#hasOverlay()
- */
- public boolean hasOverlay() {
- return false;
- }
-
- /*
- * @see IJavaAnnotation#addOverlaid(IJavaAnnotation)
- */
- public void addOverlaid(IJavaAnnotation annotation) {
- if (fOverlaids == null)
- fOverlaids = new ArrayList(1);
- fOverlaids.add(annotation);
- }
-
- /*
- * @see IJavaAnnotation#removeOverlaid(IJavaAnnotation)
- */
- public void removeOverlaid(IJavaAnnotation annotation) {
- if (fOverlaids != null) {
- fOverlaids.remove(annotation);
- if (fOverlaids.size() == 0)
- fOverlaids = null;
- }
- }
-
- /*
- * @see IJavaAnnotation#getOverlaidIterator()
- */
- public Iterator getOverlaidIterator() {
- if (fOverlaids != null)
- return fOverlaids.iterator();
- return null;
- }
-
-
- public AnnotationType getAnnotationType() {
- if (ERROR_ANNOTATION_TYPE.equals(fType)) {
- return AnnotationType.ERROR;
- }
- if (WARNING_ANNOTATION_TYPE.equals(fType)) {
- return AnnotationType.WARNING;
- }
- if (TASK_ANNOTATION_TYPE.equals(fType)) {
- return AnnotationType.TASK;
- }
-// if (INFO_ANNOTATION_TYPE.equals(fType)) {
-// return AnnotationType.INFO;
-// }
- return AnnotationType.UNKNOWN;
- }
-
- /*
- * @see IAnnotationExtension#getMarkerType()
- */
- public String getMarkerType() {
- if (isProblem() || INFO_ANNOTATION_TYPE.equals(fType))
- return IMarker.PROBLEM;
- else
- return IMarker.TASK;
- }
- /*
- * @see IAnnotationExtension#getSeverity()
- */
- public int getSeverity() {
- if (ERROR_ANNOTATION_TYPE.equals(fType))
- return IMarker.SEVERITY_ERROR;
- if (WARNING_ANNOTATION_TYPE.equals(fType))
- return IMarker.SEVERITY_WARNING;
- return IMarker.SEVERITY_INFO;
- }
-
- /*
- * @see org.eclipse.jdt.internal.ui.javaeditor.IJavaAnnotation#getCompilationUnit()
- */
- public ICompilationUnit getCompilationUnit() {
- return fCompilationUnit;
- }
- };
+ * Annotation representating an IProblem
.
+ */
+ static protected class ProblemAnnotation extends Annotation implements IJavaAnnotation, IAnnotationPresentation {
+
+ private static final String SPELLING_ANNOTATION_TYPE= "org.eclipse.ui.workbench.texteditor.spelling";
+
+ //XXX: To be fully correct these constants should be non-static
+ /**
+ * The layer in which task problem annotations are located.
+ */
+ private static final int TASK_LAYER;
+ /**
+ * The layer in which info problem annotations are located.
+ */
+ private static final int INFO_LAYER;
+ /**
+ * The layer in which warning problem annotations representing are located.
+ */
+ private static final int WARNING_LAYER;
+ /**
+ * The layer in which error problem annotations representing are located.
+ */
+ private static final int ERROR_LAYER;
+
+ static {
+ AnnotationPreferenceLookup lookup= EditorsUI.getAnnotationPreferenceLookup();
+ TASK_LAYER= computeLayer("org.eclipse.ui.workbench.texteditor.task", lookup); //$NON-NLS-1$
+ INFO_LAYER= computeLayer("net.sourceforge.phpdt.ui.info", lookup); //$NON-NLS-1$
+ WARNING_LAYER= computeLayer("net.sourceforge.phpdt.ui.warning", lookup); //$NON-NLS-1$
+ ERROR_LAYER= computeLayer("net.sourceforge.phpdt.ui.error", lookup); //$NON-NLS-1$
+ }
+
+ private static int computeLayer(String annotationType, AnnotationPreferenceLookup lookup) {
+ Annotation annotation= new Annotation(annotationType, false, null);
+ AnnotationPreference preference= lookup.getAnnotationPreference(annotation);
+ if (preference != null)
+ return preference.getPresentationLayer() + 1;
+ else
+ return IAnnotationAccessExtension.DEFAULT_LAYER + 1;
+ }
+
+// private static Image fgQuickFixImage;
+// private static Image fgQuickFixErrorImage;
+// private static boolean fgQuickFixImagesInitialized= false;
+
+ private ICompilationUnit fCompilationUnit;
+ private List fOverlaids;
+ private IProblem fProblem;
+ private Image fImage;
+ private boolean fQuickFixImagesInitialized= false;
+ private int fLayer= IAnnotationAccessExtension.DEFAULT_LAYER;
+
+ public ProblemAnnotation(IProblem problem, ICompilationUnit cu) {
+
+ fProblem= problem;
+ fCompilationUnit= cu;
+
+// if (SpellProblem.Spelling == fProblem.getID()) {
+// setType(SPELLING_ANNOTATION_TYPE);
+// fLayer= WARNING_LAYER;
+// } else
+ if (IProblem.Task == fProblem.getID()) {
+ setType(JavaMarkerAnnotation.TASK_ANNOTATION_TYPE);
+ fLayer= TASK_LAYER;
+ } else if (fProblem.isWarning()) {
+ setType(JavaMarkerAnnotation.WARNING_ANNOTATION_TYPE);
+ fLayer= WARNING_LAYER;
+ } else if (fProblem.isError()) {
+ setType(JavaMarkerAnnotation.ERROR_ANNOTATION_TYPE);
+ fLayer= ERROR_LAYER;
+ } else {
+ setType(JavaMarkerAnnotation.INFO_ANNOTATION_TYPE);
+ fLayer= INFO_LAYER;
+ }
+ }
+
+ /*
+ * @see org.eclipse.jface.text.source.IAnnotationPresentation#getLayer()
+ */
+ public int getLayer() {
+ return fLayer;
+ }
+
+ private void initializeImages() {
+ // http://bugs.eclipse.org/bugs/show_bug.cgi?id=18936
+// if (!fQuickFixImagesInitialized) {
+// if (isProblem() && indicateQuixFixableProblems() && JavaCorrectionProcessor.hasCorrections(this)) { // no light bulb for tasks
+// if (!fgQuickFixImagesInitialized) {
+// fgQuickFixImage= JavaPluginImages.get(JavaPluginImages.IMG_OBJS_FIXABLE_PROBLEM);
+// fgQuickFixErrorImage= JavaPluginImages.get(JavaPluginImages.IMG_OBJS_FIXABLE_ERROR);
+// fgQuickFixImagesInitialized= true;
+// }
+// if (JavaMarkerAnnotation.ERROR_ANNOTATION_TYPE.equals(getType()))
+// fImage= fgQuickFixErrorImage;
+// else
+// fImage= fgQuickFixImage;
+// }
+// fQuickFixImagesInitialized= true;
+// }
+ }
+
+ private boolean indicateQuixFixableProblems() {
+ return PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_CORRECTION_INDICATION);
+ }
+
+ /*
+ * @see Annotation#paint
+ */
+ public void paint(GC gc, Canvas canvas, Rectangle r) {
+ initializeImages();
+ if (fImage != null)
+ drawImage(fImage, gc, canvas, r, SWT.CENTER, SWT.TOP);
+ }
+
+ /*
+ * @see IJavaAnnotation#getImage(Display)
+ */
+ public Image getImage(Display display) {
+ initializeImages();
+ return fImage;
+ }
+
+ /*
+ * @see IJavaAnnotation#getMessage()
+ */
+ public String getText() {
+ return fProblem.getMessage();
+ }
+
+ /*
+ * @see IJavaAnnotation#getArguments()
+ */
+ public String[] getArguments() {
+ return isProblem() ? fProblem.getArguments() : null;
+ }
+
+ /*
+ * @see IJavaAnnotation#getId()
+ */
+ public int getId() {
+ return fProblem.getID();
+ }
+
+ /*
+ * @see IJavaAnnotation#isProblem()
+ */
+ public boolean isProblem() {
+ String type= getType();
+ return JavaMarkerAnnotation.WARNING_ANNOTATION_TYPE.equals(type) ||
+ JavaMarkerAnnotation.ERROR_ANNOTATION_TYPE.equals(type) ||
+ SPELLING_ANNOTATION_TYPE.equals(type);
+ }
+
+ /*
+ * @see IJavaAnnotation#hasOverlay()
+ */
+ public boolean hasOverlay() {
+ return false;
+ }
+
+ /*
+ * @see org.eclipse.jdt.internal.ui.javaeditor.IJavaAnnotation#getOverlay()
+ */
+ public IJavaAnnotation getOverlay() {
+ return null;
+ }
+
+ /*
+ * @see IJavaAnnotation#addOverlaid(IJavaAnnotation)
+ */
+ public void addOverlaid(IJavaAnnotation annotation) {
+ if (fOverlaids == null)
+ fOverlaids= new ArrayList(1);
+ fOverlaids.add(annotation);
+ }
+
+ /*
+ * @see IJavaAnnotation#removeOverlaid(IJavaAnnotation)
+ */
+ public void removeOverlaid(IJavaAnnotation annotation) {
+ if (fOverlaids != null) {
+ fOverlaids.remove(annotation);
+ if (fOverlaids.size() == 0)
+ fOverlaids= null;
+ }
+ }
+
+ /*
+ * @see IJavaAnnotation#getOverlaidIterator()
+ */
+ public Iterator getOverlaidIterator() {
+ if (fOverlaids != null)
+ return fOverlaids.iterator();
+ return null;
+ }
+
+ /*
+ * @see org.eclipse.jdt.internal.ui.javaeditor.IJavaAnnotation#getCompilationUnit()
+ */
+ public ICompilationUnit getCompilationUnit() {
+ return fCompilationUnit;
+ }
+ }
+
+
/**
* Internal structure for mapping positions to some value.
* The reason for this specific structure is that positions can