From 1842f65da7aa8f10ab76abd5e7faab8514c10f34 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 11 Feb 2015 19:44:45 +0100 Subject: [PATCH] don't use ejb super methods for injection annotation searching (IDEA-136292) --- .../intelliLang/util/AnnotationUtilEx.java | 49 +++++-------------- 1 file changed, 12 insertions(+), 37 deletions(-) diff --git a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java index fa8e1ce4bd7a..c73b52880c78 100644 --- a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java +++ b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java @@ -19,9 +19,10 @@ import com.intellij.codeInsight.AnnotationUtil; import com.intellij.openapi.util.Pair; import com.intellij.psi.*; import com.intellij.psi.impl.PsiConstantEvaluationHelperImpl; -import com.intellij.psi.search.searches.SuperMethodsSearch; -import com.intellij.psi.util.*; -import com.intellij.util.Processor; +import com.intellij.psi.util.CachedValueProvider; +import com.intellij.psi.util.CachedValuesManager; +import com.intellij.psi.util.PsiModificationTracker; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -284,49 +285,23 @@ public class AnnotationUtilEx { } private static PsiAnnotation[] getHierarchyAnnotations(PsiModifierListOwner listOwner) { - PsiModifierList modifierList = listOwner.getModifierList(); - final Set all = new HashSet() { public boolean add(PsiAnnotation o) { // don't overwrite "higher level" annotations return !contains(o) && super.add(o); } }; - if (listOwner instanceof PsiMethod) { + + PsiModifierList modifierList = listOwner.getModifierList(); + if (modifierList != null) { + ContainerUtil.addAll(all, modifierList.getAnnotations()); + } + for (PsiModifierListOwner superOwner : AnnotationUtil.getSuperAnnotationOwners(listOwner)) { + modifierList = superOwner.getModifierList(); if (modifierList != null) { ContainerUtil.addAll(all, modifierList.getAnnotations()); } - SuperMethodsSearch.search((PsiMethod)listOwner, null, true, true).forEach(new Processor() { - public boolean process(final MethodSignatureBackedByPsiMethod superMethod) { - ContainerUtil.addAll(all, superMethod.getMethod().getModifierList().getAnnotations()); - return true; - } - }); - return all.toArray(new PsiAnnotation[all.size()]); } - if (listOwner instanceof PsiParameter) { - PsiParameter parameter = (PsiParameter)listOwner; - PsiElement declarationScope = parameter.getDeclarationScope(); - PsiParameterList parameterList; - if (declarationScope instanceof PsiMethod && parameter.getParent() == (parameterList = ((PsiMethod)declarationScope).getParameterList())) { - PsiMethod method = (PsiMethod)declarationScope; - final int parameterIndex = parameterList.getParameterIndex(parameter); - if (modifierList != null) { - ContainerUtil.addAll(all, modifierList.getAnnotations()); - } - SuperMethodsSearch.search(method, null, true, true).forEach(new Processor() { - public boolean process(final MethodSignatureBackedByPsiMethod superMethod) { - PsiParameter superParameter = superMethod.getMethod().getParameterList().getParameters()[parameterIndex]; - PsiModifierList modifierList = superParameter.getModifierList(); - if (modifierList != null) { - ContainerUtil.addAll(all, modifierList.getAnnotations()); - } - return true; - } - }); - return all.toArray(new PsiAnnotation[all.size()]); - } - } - return modifierList == null ? PsiAnnotation.EMPTY_ARRAY : modifierList.getAnnotations(); + return all.isEmpty() ? PsiAnnotation.EMPTY_ARRAY : all.toArray(new PsiAnnotation[all.size()]); } }