diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CDocumentProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CDocumentProvider.java
index b8d3515d59b..c58171f20f5 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CDocumentProvider.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CDocumentProvider.java
@@ -35,26 +35,15 @@ import org.eclipse.jface.text.TextUtilities;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.text.source.AnnotationModel;
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.text.source.ImageUtilities;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Canvas;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IStorageEditorInput;
-import org.eclipse.ui.editors.text.EditorsUI;
import org.eclipse.ui.editors.text.ForwardingDocumentProvider;
import org.eclipse.ui.editors.text.TextFileDocumentProvider;
-import org.eclipse.ui.texteditor.AnnotationPreference;
-import org.eclipse.ui.texteditor.AnnotationPreferenceLookup;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.MarkerAnnotation;
import org.eclipse.ui.texteditor.MarkerUtilities;
@@ -71,11 +60,10 @@ import org.eclipse.cdt.ui.text.ICPartitions;
import org.eclipse.cdt.internal.core.model.IBufferFactory;
-import org.eclipse.cdt.internal.ui.CPluginImages;
import org.eclipse.cdt.internal.ui.text.IProblemRequestorExtension;
/**
- * CDocumentProvider2
+ * A document provider for C/C++ content.
*/
public class CDocumentProvider extends TextFileDocumentProvider {
/**
@@ -86,118 +74,20 @@ public class CDocumentProvider extends TextFileDocumentProvider {
}
/**
- * Annotation representating an IProblem
.
+ * Annotation representing an IProblem
.
*/
- static protected class ProblemAnnotation extends Annotation implements ICAnnotation, IAnnotationPresentation {
+ static protected class ProblemAnnotation extends Annotation implements ICAnnotation {
- private static final String SPELLING_ANNOTATION_TYPE= "org.eclipse.ui.workbench.texteditor.spelling"; //$NON-NLS-1$
-
- //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("org.eclipse.cdt.ui.info", lookup); //$NON-NLS-1$
- WARNING_LAYER= computeLayer("org.eclipse.cdt.ui.warning", lookup); //$NON-NLS-1$
- ERROR_LAYER= computeLayer("org.eclipse.cdt.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;
- return IAnnotationAccessExtension.DEFAULT_LAYER + 1;
- }
-
- private static Image fgQuickFixImage;
- private static Image fgQuickFixErrorImage;
- private static boolean fgQuickFixImagesInitialized= false;
+ private static final String INDEXER_ANNOTATION_TYPE= "org.eclipse.cdt.ui.indexmarker"; //$NON-NLS-1$
private ITranslationUnit fTranslationUnit;
private List fOverlaids;
private IProblem fProblem;
- private Image fImage;
- private boolean fQuickFixImagesInitialized= false;
- private int fLayer= IAnnotationAccessExtension.DEFAULT_LAYER;
-
public ProblemAnnotation(IProblem problem, ITranslationUnit cu) {
-
fProblem= problem;
fTranslationUnit= cu;
-
- //if (SpellProblem.Spelling == fProblem.getID()) {
- // setType(SPELLING_ANNOTATION_TYPE);
- // fLayer= WARNING_LAYER;
- //if (IProblem.Task == fProblem.getID()) {
- // setType(CMarkerAnnotation.TASK_ANNOTATION_TYPE);
- // fLayer= TASK_LAYER;
- if (fProblem.isWarning()) {
- setType(CMarkerAnnotation.WARNING_ANNOTATION_TYPE);
- fLayer= WARNING_LAYER;
- } else if (fProblem.isError()) {
- setType(CMarkerAnnotation.ERROR_ANNOTATION_TYPE);
- fLayer= ERROR_LAYER;
- } else {
- setType(CMarkerAnnotation.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()) { // no light bulb for tasks
- if (!fgQuickFixImagesInitialized) {
- fgQuickFixImage= CPluginImages.get(CPluginImages.IMG_OBJS_FIXABLE_PROBLEM);
- fgQuickFixErrorImage= CPluginImages.get(CPluginImages.IMG_OBJS_FIXABLE_ERROR);
- fgQuickFixImagesInitialized= true;
- }
- if (CMarkerAnnotation.ERROR_ANNOTATION_TYPE.equals(getType()))
- fImage= fgQuickFixErrorImage;
- else
- fImage= fgQuickFixImage;
- }
- fQuickFixImagesInitialized= true;
- }
- }
-
- private boolean indicateQuixFixableProblems() {
- return PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_CORRECTION_INDICATION);
- }
-
- /*
- * @see org.eclipse.jface.text.source.IAnnotationPresentation#paint(org.eclipse.swt.graphics.GC, org.eclipse.swt.widgets.Canvas, org.eclipse.swt.graphics.Rectangle)
- */
- public void paint(GC gc, Canvas canvas, Rectangle r) {
- initializeImages();
- if (fImage != null) {
- ImageUtilities.drawImage(fImage, gc, canvas, r, SWT.CENTER, SWT.TOP);
- }
+ setType(INDEXER_ANNOTATION_TYPE);
}
/*
@@ -225,10 +115,7 @@ public class CDocumentProvider extends TextFileDocumentProvider {
* @see ICAnnotation#isProblem()
*/
public boolean isProblem() {
- String type= getType();
- return CMarkerAnnotation.WARNING_ANNOTATION_TYPE.equals(type) ||
- CMarkerAnnotation.ERROR_ANNOTATION_TYPE.equals(type) ||
- SPELLING_ANNOTATION_TYPE.equals(type);
+ return fProblem.isError() || fProblem.isWarning();
}
/*
@@ -239,7 +126,7 @@ public class CDocumentProvider extends TextFileDocumentProvider {
}
/*
- * @see org.eclipse.cdt.internal.ui.editor.IJavaAnnotation#getOverlay()
+ * @see ICAnnotation#getOverlay()
*/
public ICAnnotation getOverlay() {
return null;
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CAnnotationHover.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CAnnotationHover.java
deleted file mode 100644
index 802a951412b..00000000000
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CAnnotationHover.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- * QNX Software System
- *******************************************************************************/
-package org.eclipse.cdt.internal.ui.text;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.Position;
-import org.eclipse.jface.text.source.IAnnotationHover;
-import org.eclipse.jface.text.source.IAnnotationModel;
-import org.eclipse.jface.text.source.ISourceViewer;
-import org.eclipse.ui.texteditor.MarkerAnnotation;
-
-import org.eclipse.cdt.internal.ui.CUIMessages;
-
-public class CAnnotationHover implements IAnnotationHover {
-
- /**
- * Returns the distance to the ruler line.
- */
- protected int compareRulerLine(Position position, IDocument document, int line) {
-
- if (position.getOffset() > -1 && position.getLength() > -1) {
- try {
- int markerLine= document.getLineOfOffset(position.getOffset());
- if (line == markerLine)
- return 1;
- if (markerLine <= line && line <= document.getLineOfOffset(position.getOffset() + position.getLength()))
- return 2;
- } catch (BadLocationException x) {
- }
- }
-
- return 0;
- }
-
- /**
- * Selects a set of markers from the two lists. By default, it just returns
- * the set of exact matches.
- */
- protected List select(List exactMatch, List including) {
- return exactMatch;
- }
-
- /**
- * Returns one marker which includes the ruler's line of activity.
- */
- protected List getMarkersForLine(ISourceViewer viewer, int line) {
-
- IDocument document= viewer.getDocument();
- IAnnotationModel model= viewer.getAnnotationModel();
-
- if (model == null)
- return null;
-
- List exact= new ArrayList();
- List including= new ArrayList();
-
- Iterator e= model.getAnnotationIterator();
- while (e.hasNext()) {
- Object o= e.next();
- if (o instanceof MarkerAnnotation) {
- MarkerAnnotation a= (MarkerAnnotation) o;
- switch (compareRulerLine(model.getPosition(a), document, line)) {
- case 1:
- exact.add(a.getMarker());
- break;
- case 2:
- including.add(a.getMarker());
- break;
- }
- }
- }
-
- return select(exact, including);
- }
-
- /*
- * @see IVerticalRulerHover#getHoverInfo(ISourceViewer, int)
- */
- public String getHoverInfo(ISourceViewer sourceViewer, int lineNumber) {
- List markers= getMarkersForLine(sourceViewer, lineNumber);
- if (markers != null && markers.size() > 0) {
-
- if (markers.size() == 1) {
-
- // optimization
- IMarker marker= (IMarker) markers.get(0);
- String message= marker.getAttribute(IMarker.MESSAGE, (String) null);
- if (message != null && message.trim().length() > 0)
- return formatSingleMessage(message);
-
- } else {
-
- List messages= new ArrayList();
-
- Iterator e= markers.iterator();
- while (e.hasNext()) {
- IMarker marker= (IMarker) e.next();
- String message= marker.getAttribute(IMarker.MESSAGE, (String) null);
- if (message != null && message.trim().length() > 0)
- messages.add(message.trim());
- }
-
- if (messages.size() == 1)
- return formatSingleMessage((String) messages.get(0));
-
- if (messages.size() > 1)
- return formatMultipleMessages(messages);
- }
- }
-
- return null;
- }
-
-
- /*
- * Formats a message as HTML text.
- */
- private String formatSingleMessage(String message) {
- StringBuffer buffer= new StringBuffer();
- HTMLPrinter.addPageProlog(buffer);
- HTMLPrinter.addParagraph(buffer, HTMLPrinter.convertToHTMLContent(message));
- HTMLPrinter.addPageEpilog(buffer);
- return buffer.toString();
- }
-
- /*
- * Formats several message as HTML text.
- */
- private String formatMultipleMessages(List messages) {
- StringBuffer buffer= new StringBuffer();
- HTMLPrinter.addPageProlog(buffer);
- HTMLPrinter.addParagraph(buffer, HTMLPrinter.convertToHTMLContent(CUIMessages.getString("CAnnotationHover.multipleMarkers"))); //$NON-NLS-1$
-
- HTMLPrinter.startBulletList(buffer);
- Iterator e= messages.iterator();
- while (e.hasNext())
- HTMLPrinter.addBullet(buffer, HTMLPrinter.convertToHTMLContent((String) e.next()));
- HTMLPrinter.endBulletList(buffer);
-
- HTMLPrinter.addPageEpilog(buffer);
- return buffer.toString();
- }
-}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CSourceViewerConfiguration.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CSourceViewerConfiguration.java
index 3860ce5218a..b8040a09963 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CSourceViewerConfiguration.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CSourceViewerConfiguration.java
@@ -46,6 +46,7 @@ import org.eclipse.jface.text.reconciler.IReconciler;
import org.eclipse.jface.text.reconciler.MonoReconciler;
import org.eclipse.jface.text.rules.DefaultDamagerRepairer;
import org.eclipse.jface.text.rules.RuleBasedScanner;
+import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.text.source.IAnnotationHover;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.SourceViewerConfiguration;
@@ -523,7 +524,11 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
* @see SourceViewerConfiguration#getAnnotationHover(ISourceViewer)
*/
public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) {
- return new CAnnotationHover();
+ return new HTMLAnnotationHover() {
+ protected boolean isIncluded(Annotation annotation) {
+ return isShowInVerticalRuler(annotation);
+ }
+ };
}
/*
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/HTMLAnnotationHover.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/HTMLAnnotationHover.java
new file mode 100644
index 00000000000..4dd5bde4710
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/HTMLAnnotationHover.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.internal.ui.text;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.text.source.DefaultAnnotationHover;
+
+import org.eclipse.cdt.internal.ui.CUIMessages;
+
+/**
+ * Determines all annotations for the given line and collects, concatenates, and formats
+ * their messages in HTML.
+ *
+ * @since 4.0
+ */
+public class HTMLAnnotationHover extends DefaultAnnotationHover {
+
+ /*
+ * Formats a message as HTML text.
+ */
+ protected String formatSingleMessage(String message) {
+ StringBuffer buffer= new StringBuffer();
+ HTMLPrinter.addPageProlog(buffer);
+ HTMLPrinter.addParagraph(buffer, HTMLPrinter.convertToHTMLContent(message));
+ HTMLPrinter.addPageEpilog(buffer);
+ return buffer.toString();
+ }
+
+ /*
+ * Formats several message as HTML text.
+ */
+ protected String formatMultipleMessages(List messages) {
+ StringBuffer buffer= new StringBuffer();
+ HTMLPrinter.addPageProlog(buffer);
+ HTMLPrinter.addParagraph(buffer, HTMLPrinter.convertToHTMLContent(CUIMessages.getString("CAnnotationHover.multipleMarkers"))); //$NON-NLS-1$
+
+ HTMLPrinter.startBulletList(buffer);
+ Iterator e= messages.iterator();
+ while (e.hasNext())
+ HTMLPrinter.addBullet(buffer, HTMLPrinter.convertToHTMLContent((String) e.next()));
+ HTMLPrinter.endBulletList(buffer);
+
+ HTMLPrinter.addPageEpilog(buffer);
+ return buffer.toString();
+ }
+}