From 0426946f75f143d66082821524870fa42c7ce582 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 3 Sep 2015 17:58:58 +0300 Subject: [PATCH] varargs formal parameters inaccessible: extend for non-parameterized methods (IDEA-140600) --- .../impl/analysis/HighlightMethodUtil.java | 29 ++++++++----------- ...essibleInferredTypeForVarargsArgument.java | 13 ++++++++- 2 files changed, 24 insertions(+), 18 deletions(-) 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(); + } +} -- 2.32.0