mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-06 06:21:16 +07:00
don't use ejb super methods for injection annotation searching (IDEA-136292)
This commit is contained in:
+12
-37
@@ -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<PsiAnnotation> all = new HashSet<PsiAnnotation>() {
|
||||
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<MethodSignatureBackedByPsiMethod>() {
|
||||
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<MethodSignatureBackedByPsiMethod>() {
|
||||
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()]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user