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 5a8d714c9270..3ab65343b609 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 @@ -1852,8 +1852,9 @@ public final class HighlightMethodUtil { } private static HighlightInfo checkInferredReturnTypeAccessible(@NotNull MethodCandidateInfo info, @NotNull PsiMethodCallExpression methodCall) { - PsiClass targetClass = PsiUtil.resolveClassInClassTypeOnly(info.getElement().getReturnType()); - if (targetClass instanceof PsiTypeParameter) { + PsiMethod method = info.getElement(); + PsiClass targetClass = PsiUtil.resolveClassInClassTypeOnly(method.getReturnType()); + if (targetClass instanceof PsiTypeParameter && ((PsiTypeParameter)targetClass).getOwner() == method) { PsiClass inferred = PsiUtil.resolveClassInClassTypeOnly(info.getSubstitutor().substitute((PsiTypeParameter)targetClass)); if (inferred != null && !PsiUtil.isAccessible(inferred, methodCall, null)) { return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR) diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advFixture/ProtectedInnerClass1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advFixture/ProtectedInnerClass1.java new file mode 100644 index 000000000000..ddaa5f97d024 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advFixture/ProtectedInnerClass1.java @@ -0,0 +1,7 @@ +package a.b; +import a.*; +class Foo { + void m(Outer o){ + Object obj = o.getData(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvHighlightingFixtureTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvHighlightingFixtureTest.java index 848a80cc4d80..06735d8902c6 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvHighlightingFixtureTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvHighlightingFixtureTest.java @@ -266,6 +266,18 @@ public class LightAdvHighlightingFixtureTest extends LightJavaCodeInsightFixture "}"); doTest(); } + + public void testProtectedInnerClass1() { + myFixture.addClass("package a;\n" + + "public class A {\n" + + " public T getData() {return null;}\n" + + "}"); + myFixture.addClass("package a;\n" + + "public class Outer extends A {\n" + + " protected class Inner {}\n" + + "}"); + doTest(); + } private void doTest() { myFixture.configureByFile(getTestName(false) + ".java");