From 3069ff8713f07d9932f014d84a9a5e988cd05f8c Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Tue, 6 Sep 2011 19:03:29 +0400 Subject: [PATCH] parameterized external annotator with type of information used in first (in read action) and second stage (without read action) --- .../intellij/lang/annotation/ExternalAnnotator.java | 12 +++++++----- .../openapi/paths/WebReferencesAnnotatorBase.java | 12 +++++------- 2 files changed, 12 insertions(+), 12 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 fe15412d2e9c..a74db2d1aa44 100644 --- a/platform/lang-api/src/com/intellij/lang/annotation/ExternalAnnotator.java +++ b/platform/lang-api/src/com/intellij/lang/annotation/ExternalAnnotator.java @@ -27,19 +27,21 @@ import org.jetbrains.annotations.Nullable; * @author ven * @see com.intellij.lang.ExternalLanguageAnnotators */ -public abstract class ExternalAnnotator { - +public abstract class ExternalAnnotator { + // Invoked initially in read action @Nullable - public Object collectionInformation(@NotNull PsiFile file) { + public InitialInfoType collectionInformation(@NotNull PsiFile file) { return null; } + // Lengthy annotation goes here @Nullable - public Object doAnnotate(Object collectedInfo) { + public AnnotationResultType doAnnotate(InitialInfoType collectedInfo) { return null; } - public void apply(@NotNull PsiFile file, Object annotationResult, @NotNull AnnotationHolder holder) { + // Result of annotation is applied in read action + public void apply(@NotNull PsiFile file, AnnotationResultType annotationResult, @NotNull AnnotationHolder holder) { } /** diff --git a/platform/lang-impl/src/com/intellij/openapi/paths/WebReferencesAnnotatorBase.java b/platform/lang-impl/src/com/intellij/openapi/paths/WebReferencesAnnotatorBase.java index 3bcf9b6164d1..0fd60b3501bc 100644 --- a/platform/lang-impl/src/com/intellij/openapi/paths/WebReferencesAnnotatorBase.java +++ b/platform/lang-impl/src/com/intellij/openapi/paths/WebReferencesAnnotatorBase.java @@ -36,7 +36,7 @@ import java.util.Collection; /** * @author Eugene.Kudelevsky */ -public abstract class WebReferencesAnnotatorBase extends ExternalAnnotator { +public abstract class WebReferencesAnnotatorBase extends ExternalAnnotator { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.paths.WebReferencesAnnotatorBase"); protected static final WebReference[] EMPTY_ARRAY = new WebReference[0]; @@ -67,7 +67,7 @@ public abstract class WebReferencesAnnotatorBase extends ExternalAnnotator { } @Override - public Object collectionInformation(@NotNull PsiFile file) { + public MyInfo[] collectionInformation(@NotNull PsiFile file) { final WebReference[] references = collectWebReferences(file); final MyInfo[] infos = new MyInfo[references.length]; @@ -79,8 +79,7 @@ public abstract class WebReferencesAnnotatorBase extends ExternalAnnotator { } @Override - public Object doAnnotate(Object collectedInfo) { - final MyInfo[] infos = (MyInfo[])collectedInfo; + public MyInfo[] doAnnotate(MyInfo[] infos) { for (MyInfo info : infos) { if (checkUrl(info.myUrl)) { info.myResult = true; @@ -90,8 +89,7 @@ public abstract class WebReferencesAnnotatorBase extends ExternalAnnotator { } @Override - public void apply(@NotNull PsiFile file, Object annotationResult, @NotNull AnnotationHolder holder) { - final MyInfo[] infos = (MyInfo[])annotationResult; + public void apply(@NotNull PsiFile file, MyInfo[] infos, @NotNull AnnotationHolder holder) { for (MyInfo info : infos) { if (!info.myResult) { final PsiElement element = info.myAnchor.retrieve(); @@ -122,7 +120,7 @@ public abstract class WebReferencesAnnotatorBase extends ExternalAnnotator { } } - private static class MyInfo { + protected static class MyInfo { final PsiAnchor myAnchor; final String myUrl; final TextRange myRangeInElement;