From 0275ea1ba0709a56f0d101065329df0d2e51d853 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 23 Aug 2012 17:52:48 +0400 Subject: [PATCH] Added method checking if external annotation is writable to ExternalAnnotationsManager. --- .../codeInsight/BaseExternalAnnotationsManager.java | 13 +++++++++++-- .../codeInsight/ExternalAnnotationsManager.java | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/java/java-psi-api/src/com/intellij/codeInsight/BaseExternalAnnotationsManager.java b/java/java-psi-api/src/com/intellij/codeInsight/BaseExternalAnnotationsManager.java index 752184907454..04ec404c480b 100644 --- a/java/java-psi-api/src/com/intellij/codeInsight/BaseExternalAnnotationsManager.java +++ b/java/java-psi-api/src/com/intellij/codeInsight/BaseExternalAnnotationsManager.java @@ -101,6 +101,13 @@ public abstract class BaseExternalAnnotationsManager extends ExternalAnnotations return collectExternalAnnotations(listOwner).get(annotationFQN); } + @Override + public boolean isExternalAnnotationWritable(@NotNull PsiModifierListOwner listOwner, @NotNull String annotationFQN) { + // note that this method doesn't cache it's result + Map map = doCollect(listOwner, true); + return map.containsKey(annotationFQN); + } + @Override @Nullable public PsiAnnotation[] findExternalAnnotations(@NotNull final PsiModifierListOwner listOwner) { @@ -115,7 +122,7 @@ public abstract class BaseExternalAnnotationsManager extends ExternalAnnotations Map map = cache.get(listOwner); if (map == null) { - map = doCollect(listOwner); + map = doCollect(listOwner, false); cache.put(listOwner, map); } return map; @@ -176,7 +183,7 @@ public abstract class BaseExternalAnnotationsManager extends ExternalAnnotations } } - private Map doCollect(@NotNull PsiModifierListOwner listOwner) { + private Map doCollect(@NotNull PsiModifierListOwner listOwner, boolean onlyWritable) { final List files = findExternalAnnotationsFiles(listOwner); if (files == null) { return Collections.emptyMap(); @@ -187,6 +194,8 @@ public abstract class BaseExternalAnnotationsManager extends ExternalAnnotations for (PsiFile file : files) { if (!file.isValid()) continue; + if (onlyWritable && !file.isWritable()) continue; + MultiMap fileData = getDataFromFile(file); for (AnnotationData annotationData : ContainerUtil.concat(fileData.get(externalName), fileData.get(oldExternalName))) { // don't add annotation, if there already is one with this FQ name diff --git a/java/java-psi-api/src/com/intellij/codeInsight/ExternalAnnotationsManager.java b/java/java-psi-api/src/com/intellij/codeInsight/ExternalAnnotationsManager.java index 83ee339ce5b0..1a12129d6f95 100644 --- a/java/java-psi-api/src/com/intellij/codeInsight/ExternalAnnotationsManager.java +++ b/java/java-psi-api/src/com/intellij/codeInsight/ExternalAnnotationsManager.java @@ -48,6 +48,8 @@ public abstract class ExternalAnnotationsManager { @Nullable public abstract PsiAnnotation findExternalAnnotation(@NotNull PsiModifierListOwner listOwner, @NotNull String annotationFQN); + public abstract boolean isExternalAnnotationWritable(@NotNull PsiModifierListOwner listOwner, @NotNull String annotationFQN); + @Nullable public abstract PsiAnnotation[] findExternalAnnotations(@NotNull PsiModifierListOwner listOwner);