From: Anna Kozlova Date: Thu, 3 Sep 2015 14:58:58 +0000 (+0300) Subject: varargs formal parameters inaccessible: extend for non-parameterized methods (IDEA... X-Git-Tag: webstorm/142.4576~10^2~5 X-Git-Url: https://git.jetbrains.org/?p=idea%2Fcommunity.git;a=commitdiff_plain;h=0426946f75f143d66082821524870fa42c7ce582 varargs formal parameters inaccessible: extend for non-parameterized methods (IDEA-140600) --- diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java index bdd7901acdc6..aa59638fd2fd 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java @@ -1550,23 +1550,18 @@ public class HighlightMethodUtil { private static HighlightInfo checkVarargParameterErasureToBeAccessible(MethodCandidateInfo info, PsiCall place) { final PsiMethod method = info.getElement(); if (info.isVarargs() || method.isVarArgs() && !PsiUtil.isLanguageLevel8OrHigher(place)) { - if (method.hasTypeParameters()) { - final PsiParameter[] parameters = method.getParameterList().getParameters(); - final PsiType componentType = ((PsiEllipsisType)parameters[parameters.length - 1].getType()).getComponentType(); - final PsiClass classOfComponent = PsiUtil.resolveClassInClassTypeOnly(componentType); - if (classOfComponent instanceof PsiTypeParameter) { - final PsiType substitutedTypeErasure = TypeConversionUtil.erasure(info.getSubstitutor().substitute(componentType)); - final PsiClass targetClass = PsiUtil.resolveClassInClassTypeOnly(substitutedTypeErasure); - if (targetClass != null && !PsiUtil.isAccessible(targetClass, place, null)) { - final PsiExpressionList argumentList = place.getArgumentList(); - return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR) - .descriptionAndTooltip("Formal varargs element type " + - PsiFormatUtil.formatClass(targetClass, PsiFormatUtilBase.SHOW_FQ_NAME) + - " is inaccessible here") - .range(argumentList != null ? argumentList : place) - .create(); - } - } + final PsiParameter[] parameters = method.getParameterList().getParameters(); + final PsiType componentType = ((PsiEllipsisType)parameters[parameters.length - 1].getType()).getComponentType(); + final PsiType substitutedTypeErasure = TypeConversionUtil.erasure(info.getSubstitutor().substitute(componentType)); + final PsiClass targetClass = PsiUtil.resolveClassInClassTypeOnly(substitutedTypeErasure); + if (targetClass != null && !PsiUtil.isAccessible(targetClass, place, null)) { + final PsiExpressionList argumentList = place.getArgumentList(); + return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR) + .descriptionAndTooltip("Formal varargs element type " + + PsiFormatUtil.formatClass(targetClass, PsiFormatUtilBase.SHOW_FQ_NAME) + + " is inaccessible here") + .range(argumentList != null ? argumentList : place) + .create(); } } return null; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/InaccessibleInferredTypeForVarargsArgument.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/InaccessibleInferredTypeForVarargsArgument.java index 5ed7852fc771..01b27976c594 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/InaccessibleInferredTypeForVarargsArgument.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/InaccessibleInferredTypeForVarargsArgument.java @@ -10,4 +10,15 @@ class Outer { private static class A {} public static class B extends A {} public static class C extends A {} -} \ No newline at end of file +} + +class An { + private class B {} + public static void foo(B... x){} +} + +class C { + { + An.foo(); + } +}