From e6a49d0ab634dddb815894030d865c07ebb26143 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 19 Feb 2016 15:31:09 +0100 Subject: [PATCH] accessibility: don't check supers during method/field type check --- .../impl/analysis/GenericsHighlightUtil.java | 22 ++++++++++--------- ...edTypeOfVariableImplementsUnknownType.java | 2 ++ ...edTypeOfVariableImplementsUnknownType.java | 2 ++ 3 files changed, 16 insertions(+), 10 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 03101dbb85f3..aa48d6ccbd39 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 @@ -1494,21 +1494,23 @@ public class GenericsHighlightUtil { return "Cannot access " + HighlightUtil.formatClass(aClass); } - if (checkParameters && superType instanceof PsiClassType) { - for (PsiType psiType : ((PsiClassType)superType).getParameters()) { - final String notAccessibleMessage = isSuperTypeAccessible(psiType, classes, checkParameters, resolveScope, factory); + if (checkParameters) { + if (superType instanceof PsiClassType) { + for (PsiType psiType : ((PsiClassType)superType).getParameters()) { + final String notAccessibleMessage = isSuperTypeAccessible(psiType, classes, true, resolveScope, factory); + if (notAccessibleMessage != null) { + return notAccessibleMessage; + } + } + } + + for (PsiClassType type : aClass.getSuperTypes()) { + final String notAccessibleMessage = isSuperTypeAccessible(type, classes, true, resolveScope, factory); if (notAccessibleMessage != null) { return notAccessibleMessage; } } } - - for (PsiClassType type : aClass.getSuperTypes()) { - final String notAccessibleMessage = isSuperTypeAccessible(type, classes, checkParameters, resolveScope, factory); - if (notAccessibleMessage != null) { - return notAccessibleMessage; - } - } } return null; } diff --git a/java/java-tests/testData/codeInsight/multipleJdks/java7/p/DeclaredTypeOfVariableImplementsUnknownType.java b/java/java-tests/testData/codeInsight/multipleJdks/java7/p/DeclaredTypeOfVariableImplementsUnknownType.java index 04012ce23c3c..ed498645c20b 100644 --- a/java/java-tests/testData/codeInsight/multipleJdks/java7/p/DeclaredTypeOfVariableImplementsUnknownType.java +++ b/java/java-tests/testData/codeInsight/multipleJdks/java7/p/DeclaredTypeOfVariableImplementsUnknownType.java @@ -8,6 +8,8 @@ abstract class B { a.bar(); a.myField; + + a.a(); } void f(java.util.List a) { diff --git a/java/java-tests/testData/codeInsight/multipleJdks/java8/p/DeclaredTypeOfVariableImplementsUnknownType.java b/java/java-tests/testData/codeInsight/multipleJdks/java8/p/DeclaredTypeOfVariableImplementsUnknownType.java index f22c03b06c50..045f753ef92b 100644 --- a/java/java-tests/testData/codeInsight/multipleJdks/java8/p/DeclaredTypeOfVariableImplementsUnknownType.java +++ b/java/java-tests/testData/codeInsight/multipleJdks/java8/p/DeclaredTypeOfVariableImplementsUnknownType.java @@ -8,4 +8,6 @@ public abstract class A implements List> { public void bar() {} public Stream myField; + + public A a() {} } \ No newline at end of file