diff --git a/java/java-psi-api/src/com/intellij/codeInsight/AnnotationUtil.java b/java/java-psi-api/src/com/intellij/codeInsight/AnnotationUtil.java index 45e4913fdc62..6ed3843aa0c1 100644 --- a/java/java-psi-api/src/com/intellij/codeInsight/AnnotationUtil.java +++ b/java/java-psi-api/src/com/intellij/codeInsight/AnnotationUtil.java @@ -77,25 +77,30 @@ public class AnnotationUtil { } private static PsiAnnotation findOwnAnnotation(final PsiModifierListOwner listOwner, Collection annotationNames) { + if (listOwner instanceof PsiLocalVariable) { + return findAnnotationDirectly(listOwner, annotationNames); + } Map, PsiAnnotation> map = CachedValuesManager.getCachedValue( listOwner, () -> { - Map, PsiAnnotation> value = ConcurrentFactoryMap.createMap(annotationNames1-> { - final PsiModifierList list = listOwner.getModifierList(); - if (list == null) return null; - for (PsiAnnotation annotation : list.getAnnotations()) { - if (annotationNames1.contains(annotation.getQualifiedName())) { - return annotation; - } - } - return null; - } - ); + Map, PsiAnnotation> value = ConcurrentFactoryMap.createMap(names -> findAnnotationDirectly(listOwner, names)); return CachedValueProvider.Result.create(value, PsiModificationTracker.MODIFICATION_COUNT); }); return map.get(annotationNames); } + @Nullable + private static PsiAnnotation findAnnotationDirectly(PsiModifierListOwner listOwner, Collection annotationNames) { + final PsiModifierList list = listOwner.getModifierList(); + if (list == null) return null; + for (PsiAnnotation annotation : list.getAnnotations()) { + if (annotationNames.contains(annotation.getQualifiedName())) { + return annotation; + } + } + return null; + } + private static PsiAnnotation findNonCodeAnnotation(final PsiModifierListOwner listOwner, Collection annotationNames) { if (listOwner instanceof PsiLocalVariable) { // Non-code annotations for local variables are not supported: don't bother to search them