From d971724a0036d5c7ef4c7739ec90bf6033e269f9 Mon Sep 17 00:00:00 2001 From: Pavel Dolgov Date: Wed, 26 Apr 2017 15:30:27 +0300 Subject: [PATCH] Java: Inspection that checks if a field or method accessed via reflection does exist and is visible - review follow up (IDEA-168837, IDEA-CR-20535) --- .../impl/JavaReflectionReferenceUtil.java | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/JavaReflectionReferenceUtil.java b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/JavaReflectionReferenceUtil.java index 7fc407172b88..3e2c27476853 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/JavaReflectionReferenceUtil.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/JavaReflectionReferenceUtil.java @@ -144,11 +144,9 @@ public class JavaReflectionReferenceUtil { if (!isJavaLangClass(resolvedElement)) return null; final PsiTypeParameter[] parameters = resolvedElement.getTypeParameters(); if (parameters.length == 1) { - PsiType typeArgument = resolveResult.getSubstitutor().substitute(parameters[0]); - if (typeArgument instanceof PsiCapturedWildcardType) { - typeArgument = ((PsiCapturedWildcardType)typeArgument).getUpperBound(); - } - final PsiClass argumentClass = unwrapTypeParameter(PsiTypesUtil.getPsiClass(typeArgument)); + final PsiType typeArgument = resolveResult.getSubstitutor().substitute(parameters[0]); + final PsiType erasure = TypeConversionUtil.erasure(typeArgument); + final PsiClass argumentClass = PsiTypesUtil.getPsiClass(erasure); if (argumentClass != null && !isJavaLangObject(argumentClass)) { return ReflectiveType.create(argumentClass); } @@ -200,17 +198,6 @@ public class JavaReflectionReferenceUtil { return ReflectiveType.create(expression.getType(), expression); } - @Contract("null -> null") - @Nullable - private static PsiClass unwrapTypeParameter(@Nullable PsiClass psiClass) { - int preventEndlessLoop = 5; - while (psiClass instanceof PsiTypeParameter && --preventEndlessLoop > 0) { - final PsiClassType[] extendsList = psiClass.getExtendsListTypes(); - psiClass = extendsList.length != 0 ? extendsList[0].resolve() : null; - } - return psiClass; - } - @Contract("null,_->null") @Nullable public static T computeConstantExpression(@Nullable PsiExpression expression, @NotNull Class expectedType) {