From 88a2716e2a32a61e35775c6aa05e082555794d2e Mon Sep 17 00:00:00 2001 From: Dmitry Semeniouta Date: Thu, 12 Sep 2013 16:56:01 +0400 Subject: [PATCH] external annotator is allowed to decide if it should handle file with error +review CR-IC --- .../intellij/lang/annotation/ExternalAnnotator.java | 11 ++++++++++- .../codeInsight/daemon/impl/ExternalToolPass.java | 7 ++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/platform/lang-api/src/com/intellij/lang/annotation/ExternalAnnotator.java b/platform/lang-api/src/com/intellij/lang/annotation/ExternalAnnotator.java index 18f3b74ec08a..cadcd96c5f5f 100644 --- a/platform/lang-api/src/com/intellij/lang/annotation/ExternalAnnotator.java +++ b/platform/lang-api/src/com/intellij/lang/annotation/ExternalAnnotator.java @@ -34,12 +34,21 @@ public abstract class ExternalAnnotator { public InitialInfoType collectionInformation(@NotNull PsiFile file) { return null; } - + + /** + * @deprecated use {@link com.intellij.lang.annotation.ExternalAnnotator#collectInformation(PsiFile, Editor, boolean)} + */ @Nullable + @Deprecated() public InitialInfoType collectInformation(@NotNull PsiFile file, @NotNull Editor editor) { return collectionInformation(file); } + @Nullable + public InitialInfoType collectInformation(@NotNull PsiFile file, @NotNull Editor editor, boolean hasErrors) { + return hasErrors ? null : collectionInformation(file); + } + // Lengthy annotation goes here @Nullable public AnnotationResultType doAnnotate(InitialInfoType collectedInfo) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ExternalToolPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ExternalToolPass.java index cdd2148fe5ea..100e1e1140d5 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ExternalToolPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ExternalToolPass.java @@ -94,12 +94,13 @@ public class ExternalToolPass extends TextEditorHighlightingPass { if (!externalAnnotators.isEmpty()) { DaemonCodeAnalyzerEx daemonCodeAnalyzer = DaemonCodeAnalyzerEx.getInstanceEx(myProject); boolean errorFound = daemonCodeAnalyzer.getFileStatusMap().wasErrorFound(myDocument); - if (errorFound) return; for(ExternalAnnotator externalAnnotator: externalAnnotators) { - externalAnnotator.annotate(psiRoot, myAnnotationHolder); + if (!errorFound) { + externalAnnotator.annotate(psiRoot, myAnnotationHolder); + } - final Object collectedInfo = externalAnnotator.collectInformation(psiRoot, myEditor); + final Object collectedInfo = externalAnnotator.collectInformation(psiRoot, myEditor, errorFound); if (collectedInfo != null) { myAnnotator2DataMap.put(externalAnnotator, new MyData(psiRoot, collectedInfo)); }