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.MarkerAnnotation;
import org.eclipse.ui.texteditor.ResourceMarkerAnnotationModel;
/*
* @see AnnotationModel#addAnnotation(Annotation, Position, boolean)
*/
- protected void addAnnotation(Annotation annotation, Position position, boolean fireModelChanged) {
+ protected void addAnnotation(Annotation annotation, Position position, boolean fireModelChanged) throws BadLocationException {
super.addAnnotation(annotation, position, fireModelChanged);
Object cached = fReverseMap.get(position);
return new Position(start, length);
}
-
/*
* @see IProblemRequestor#endReporting()
*/
public void endReporting() {
if (!isActive())
return;
-
+
if (fProgressMonitor != null && fProgressMonitor.isCanceled())
return;
-
- boolean isCanceled = false;
- boolean temporaryProblemsChanged = false;
- fPreviouslyOverlaid = fCurrentlyOverlaid;
- fCurrentlyOverlaid = new ArrayList();
-
+
+
+ boolean isCanceled= false;
+ boolean temporaryProblemsChanged= false;
+
synchronized (fAnnotations) {
+
+ fPreviouslyOverlaid= fCurrentlyOverlaid;
+ fCurrentlyOverlaid= new ArrayList();
if (fGeneratedAnnotations.size() > 0) {
- temporaryProblemsChanged = true;
+ temporaryProblemsChanged= true;
removeAnnotations(fGeneratedAnnotations, false, true);
fGeneratedAnnotations.clear();
}
-
+
if (fCollectedProblems != null && fCollectedProblems.size() > 0) {
-
- Iterator e = fCollectedProblems.iterator();
+
+ ICompilationUnit cu= getWorkingCopy(fInput);
+ Iterator e= fCollectedProblems.iterator();
while (e.hasNext()) {
-
- IProblem problem = (IProblem) e.next();
-
+
+ IProblem problem= (IProblem) e.next();
+
if (fProgressMonitor != null && fProgressMonitor.isCanceled()) {
- isCanceled = true;
+ isCanceled= true;
break;
}
-
- Position position = createPositionFromProblem(problem);
+
+ Position position= createPositionFromProblem(problem);
if (position != null) {
-
- ProblemAnnotation annotation = new ProblemAnnotation(problem);
- overlayMarkers(position, annotation);
- fGeneratedAnnotations.add(annotation);
- addAnnotation(annotation, position, false);
-
- temporaryProblemsChanged = true;
+ try {
+ ProblemAnnotation annotation= new ProblemAnnotation(problem, cu);
+ addAnnotation(annotation, position, false);
+ overlayMarkers(position, annotation);
+ fGeneratedAnnotations.add(annotation);
+
+ temporaryProblemsChanged= true;
+ } catch (BadLocationException x) {
+ // ignore invalid position
+ }
}
}
-
+
fCollectedProblems.clear();
}
-
+
removeMarkerOverlays(isCanceled);
fPreviouslyOverlaid.clear();
- fPreviouslyOverlaid = null;
+ fPreviouslyOverlaid= null;
}
-
+
if (temporaryProblemsChanged)
- fireModelChanged(new CompilationUnitAnnotationModelEvent(this, getResource(), false));
+ fireModelChanged();
}
+ /*
+ * @see IProblemRequestor#endReporting()
+ */
+// public void endReporting() {
+// if (!isActive())
+// return;
+//
+// if (fProgressMonitor != null && fProgressMonitor.isCanceled())
+// return;
+//
+// boolean isCanceled = false;
+// boolean temporaryProblemsChanged = false;
+// fPreviouslyOverlaid = fCurrentlyOverlaid;
+// fCurrentlyOverlaid = new ArrayList();
+//
+// synchronized (fAnnotations) {
+//
+// if (fGeneratedAnnotations.size() > 0) {
+// temporaryProblemsChanged = true;
+// removeAnnotations(fGeneratedAnnotations, false, true);
+// fGeneratedAnnotations.clear();
+// }
+//
+// if (fCollectedProblems != null && fCollectedProblems.size() > 0) {
+//
+// Iterator e = fCollectedProblems.iterator();
+// while (e.hasNext()) {
+//
+// IProblem problem = (IProblem) e.next();
+//
+// if (fProgressMonitor != null && fProgressMonitor.isCanceled()) {
+// isCanceled = true;
+// break;
+// }
+//
+// Position position = createPositionFromProblem(problem);
+// if (position != null) {
+//
+// ProblemAnnotation annotation = new ProblemAnnotation(problem);
+// overlayMarkers(position, annotation);
+// fGeneratedAnnotations.add(annotation);
+// addAnnotation(annotation, position, false);
+//
+// temporaryProblemsChanged = true;
+// }
+// }
+//
+// fCollectedProblems.clear();
+// }
+//
+// removeMarkerOverlays(isCanceled);
+// fPreviouslyOverlaid.clear();
+// fPreviouslyOverlaid = null;
+// }
+//
+// if (temporaryProblemsChanged)
+// fireModelChanged(new CompilationUnitAnnotationModelEvent(this, getResource(), false));
+// }
private Object getAnnotations(Position position) {
return fReverseMap.get(position);
/**
* Annotation representating an <code>IProblem</code>.
*/
- static protected class ProblemAnnotation extends Annotation implements IJavaAnnotation {
+ 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;
-
- 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 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
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 fType == AnnotationType.WARNING || fType == AnnotationType.ERROR;
+ return WARNING_ANNOTATION_TYPE.equals(fType) || ERROR_ANNOTATION_TYPE.equals(fType);
}
/*
return null;
}
+
public AnnotationType getAnnotationType() {
- return fType;
+ 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;
}
};
/**
}
/*
- * @see AbstractDocumentProvider#resetDocument(Object)
+ * @see org.eclipse.ui.texteditor.AbstractDocumentProvider#doResetDocument(java.lang.Object, org.eclipse.core.runtime.IProgressMonitor)
*/
- public void resetDocument(Object element) throws CoreException {
+ protected void doResetDocument(Object element, IProgressMonitor monitor) throws CoreException {
if (element == null)
return;
-
- ElementInfo elementInfo = getElementInfo(element);
+
+ ElementInfo elementInfo= getElementInfo(element);
if (elementInfo instanceof CompilationUnitInfo) {
- CompilationUnitInfo info = (CompilationUnitInfo) elementInfo;
-
+ CompilationUnitInfo info= (CompilationUnitInfo) elementInfo;
+
IDocument document;
- IStatus status = null;
-
+ IStatus status= null;
+
try {
-
- ICompilationUnit original = (ICompilationUnit) info.fCopy.getOriginalElement();
- IResource resource = original.getResource();
+
+ ICompilationUnit original= (ICompilationUnit) info.fCopy.getOriginalElement();
+ IResource resource= original.getResource();
if (resource instanceof IFile) {
-
- IFile file = (IFile) resource;
-
+
+ IFile file= (IFile) resource;
+
try {
- refreshFile(file);
+ refreshFile(file, monitor);
} catch (CoreException x) {
- handleCoreException(x, PHPEditorMessages.getString("PHPDocumentProvider.error.resetDocument")); //$NON-NLS-1$
+ handleCoreException(x, PHPEditorMessages.getString("CompilationUnitDocumentProvider.error.resetDocument")); //$NON-NLS-1$
}
-
- IFileEditorInput input = new FileEditorInput(file);
- document = super.createDocument(input);
-
+
+ IFileEditorInput input= new FileEditorInput(file);
+ document= super.createDocument(input);
+
} else {
- document = new Document();
+ document= createEmptyDocument();
}
-
+
} catch (CoreException x) {
- document = new Document();
- status = x.getStatus();
+ document= createEmptyDocument();
+ status= x.getStatus();
}
-
+
fireElementContentAboutToBeReplaced(element);
-
+
removeUnchangedElementListeners(element, info);
info.fDocument.set(document.get());
- info.fCanBeSaved = false;
- info.fStatus = status;
+ info.fCanBeSaved= false;
+ info.fStatus= status;
addUnchangedElementListeners(element, info);
-
+
fireElementContentReplaced(element);
fireElementDirtyStateChanged(element, false);
-
+
} else {
- super.resetDocument(element);
+ super.doResetDocument(element, monitor);
}
}
+
+ /*
+ * @see AbstractDocumentProvider#resetDocument(Object)
+ */
+// public void resetDocument(Object element) throws CoreException {
+// if (element == null)
+// return;
+//
+// ElementInfo elementInfo = getElementInfo(element);
+// if (elementInfo instanceof CompilationUnitInfo) {
+// CompilationUnitInfo info = (CompilationUnitInfo) elementInfo;
+//
+// IDocument document;
+// IStatus status = null;
+//
+// try {
+//
+// ICompilationUnit original = (ICompilationUnit) info.fCopy.getOriginalElement();
+// IResource resource = original.getResource();
+// if (resource instanceof IFile) {
+//
+// IFile file = (IFile) resource;
+//
+// try {
+// refreshFile(file);
+// } catch (CoreException x) {
+// handleCoreException(x, PHPEditorMessages.getString("PHPDocumentProvider.error.resetDocument")); //$NON-NLS-1$
+// }
+//
+// IFileEditorInput input = new FileEditorInput(file);
+// document = super.createDocument(input);
+//
+// } else {
+// document = new Document();
+// }
+//
+// } catch (CoreException x) {
+// document = new Document();
+// status = x.getStatus();
+// }
+//
+// fireElementContentAboutToBeReplaced(element);
+//
+// removeUnchangedElementListeners(element, info);
+// info.fDocument.set(document.get());
+// info.fCanBeSaved = false;
+// info.fStatus = status;
+// addUnchangedElementListeners(element, info);
+//
+// fireElementContentReplaced(element);
+// fireElementDirtyStateChanged(element, false);
+//
+// } else {
+// super.resetDocument(element);
+// }
+// }
/**
* Saves the content of the given document to the given element.
* This is only performed when this provider initiated the save.