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..ec23358 100644
--- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPDocumentProvider.java
+++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPDocumentProvider.java
@@ -26,13 +26,13 @@ import net.sourceforge.phpdt.core.IJavaModelStatusConstants;
 import net.sourceforge.phpdt.core.IOpenable;
 import net.sourceforge.phpdt.core.IProblemRequestor;
 import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.core.JavaCore;
 import net.sourceforge.phpdt.core.compiler.IProblem;
 import net.sourceforge.phpdt.internal.ui.PHPStatusConstants;
 import net.sourceforge.phpdt.internal.ui.PHPUIStatus;
 import net.sourceforge.phpdt.internal.ui.text.java.IProblemRequestorExtension;
 import net.sourceforge.phpdt.ui.PreferenceConstants;
 import net.sourceforge.phpdt.ui.text.JavaTextTools;
-import net.sourceforge.phpeclipse.PHPCore;
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 
 import org.eclipse.core.resources.IFile;
@@ -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 <code>IProblem</code>.
-  		 */
-  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 <code>IProblem</code>.
+	 */
+	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
@@ -948,7 +937,7 @@ public class PHPDocumentProvider extends FileDocumentProvider {
    * @param file the file from which to create the compilation unit
    */
   protected ICompilationUnit createCompilationUnit(IFile file) {
-    Object element = PHPCore.create(file);
+    Object element = JavaCore.create(file);
     if (element instanceof ICompilationUnit)
       return (ICompilationUnit) element;
     return null;