From dfe29a3a50f34abca3a14a0d47c2fe5129e90731 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 2 Dec 2015 15:31:27 +0100 Subject: [PATCH] getSuperTypes: reuse correctType and capture (following IDEA-CR-7195) --- .../impl/analysis/GenericsHighlightUtil.java | 7 ++----- .../com/intellij/psi/impl/PsiClassImplUtil.java | 2 +- .../intellij/psi/impl/PsiSuperMethodImplUtil.java | 15 +++++++-------- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java index 3dfb11a9c5e4..9ea3c44e6a6b 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java @@ -360,11 +360,8 @@ public class GenericsHighlightUtil { Map inheritedClasses, Set visited, TextRange textRange) { - final PsiClassType[] superTypes = aClass.getSuperTypes(); - for (PsiClassType superType : superTypes) { - superType = PsiClassImplUtil.correctType(superType, place.getResolveScope()); - if (superType == null) continue; - final PsiClassType.ClassResolveResult result = ((PsiClassType)PsiUtil.captureToplevelWildcards(superType, place)).resolveGenerics(); + final List superTypes = PsiClassImplUtil.getScopeCorrectedSuperTypes(aClass, place.getResolveScope()); + for (PsiClassType.ClassResolveResult result : superTypes) { final PsiClass superClass = result.getElement(); if (superClass == null || visited.contains(superClass)) continue; PsiSubstitutor superTypeSubstitutor = result.getSubstitutor(); diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java index 9c5aec2e2288..2c0a16d03ede 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java @@ -732,7 +732,7 @@ public class PsiClassImplUtil { return new TypeCorrector(resolveScope).correctType(originalType); } - private static List getScopeCorrectedSuperTypes(final PsiClass aClass, GlobalSearchScope resolveScope) { + public static List getScopeCorrectedSuperTypes(final PsiClass aClass, GlobalSearchScope resolveScope) { Map> cache = CachedValuesManager.getCachedValue(aClass, new CachedValueProvider>>() { @Nullable diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiSuperMethodImplUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiSuperMethodImplUtil.java index 5f19f7b659ee..639d62dcf3c2 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiSuperMethodImplUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiSuperMethodImplUtil.java @@ -46,7 +46,7 @@ public class PsiSuperMethodImplUtil { @NotNull @Override public Map fun(PsiClass dom) { - return buildMethodHierarchy(dom, null, PsiSubstitutor.EMPTY, true, new THashSet(), false, dom.getResolveScope(), dom); + return buildMethodHierarchy(dom, null, PsiSubstitutor.EMPTY, true, new THashSet(), false, dom.getResolveScope()); } }); private static final PsiCacheKey>, PsiClass> SIGNATURES_BY_NAME_KEY = PsiCacheKey @@ -57,7 +57,7 @@ public class PsiSuperMethodImplUtil { @Nullable @Override protected Map create(String methodName) { - return buildMethodHierarchy(psiClass, methodName, PsiSubstitutor.EMPTY, true, new THashSet(), false, psiClass.getResolveScope(), psiClass); + return buildMethodHierarchy(psiClass, methodName, PsiSubstitutor.EMPTY, true, new THashSet(), false, psiClass.getResolveScope()); } }; } @@ -133,7 +133,7 @@ public class PsiSuperMethodImplUtil { final boolean includePrivates, @NotNull final Set visited, boolean isInRawContext, - GlobalSearchScope resolveScope, PsiElement place) { + GlobalSearchScope resolveScope) { ProgressManager.checkCanceled(); Map result = new LinkedHashMap(); final Map> sameParameterErasureMethods = new THashMap>(MethodSignatureUtil.METHOD_PARAMETERS_ERASURE_EQUALITY); @@ -190,10 +190,9 @@ public class PsiSuperMethodImplUtil { map.put(signature, newH); } - for (PsiClassType superType : aClass.getSuperTypes()) { - superType = PsiClassImplUtil.correctType(superType, resolveScope); - if (superType == null) continue; //super class doesn't belong to resolve scope - PsiClassType.ClassResolveResult superTypeResolveResult = ((PsiClassType)PsiUtil.captureToplevelWildcards(superType, place)).resolveGenerics(); + final List superTypes = PsiClassImplUtil.getScopeCorrectedSuperTypes(aClass, resolveScope); + + for (PsiClassType.ClassResolveResult superTypeResolveResult : superTypes) { PsiClass superClass = superTypeResolveResult.getElement(); if (superClass == null) continue; if (!visited.add(superClass)) continue; // cyclic inheritance @@ -201,7 +200,7 @@ public class PsiSuperMethodImplUtil { PsiSubstitutor finalSubstitutor = obtainFinalSubstitutor(superClass, superSubstitutor, substitutor, isInRawContext); final boolean isInRawContextSuper = (isInRawContext || PsiUtil.isRawSubstitutor(superClass, superSubstitutor)) && superClass.getTypeParameters().length != 0; - Map superResult = buildMethodHierarchy(superClass, nameHint, finalSubstitutor, false, visited, isInRawContextSuper, resolveScope, place); + Map superResult = buildMethodHierarchy(superClass, nameHint, finalSubstitutor, false, visited, isInRawContextSuper, resolveScope); visited.remove(superClass); List> flattened = new ArrayList>();