Added method checking if external annotation is writable to ExternalAnnotationsManager.

This commit is contained in:
Evgeny Gerashchenko
2012-08-24 19:12:13 +04:00
parent c8df423935
commit 0275ea1ba0
2 changed files with 13 additions and 2 deletions
@@ -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<String, PsiAnnotation> 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<String, PsiAnnotation> 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<String, PsiAnnotation> doCollect(@NotNull PsiModifierListOwner listOwner) {
private Map<String, PsiAnnotation> doCollect(@NotNull PsiModifierListOwner listOwner, boolean onlyWritable) {
final List<PsiFile> 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<String, AnnotationData> 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
@@ -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);