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);