diff --git a/java/java-psi-impl/src/com/intellij/psi/scope/util/PsiScopesUtil.java b/java/java-psi-impl/src/com/intellij/psi/scope/util/PsiScopesUtil.java index 5220f842a8b1..2c3bb5cf9c80 100644 --- a/java/java-psi-impl/src/com/intellij/psi/scope/util/PsiScopesUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/scope/util/PsiScopesUtil.java @@ -439,9 +439,15 @@ public class PsiScopesUtil { } else if (resolve instanceof PsiClass) { PsiExpression qualifier = methodCall.getMethodExpression().getQualifierExpression(); - if (!(qualifier instanceof PsiSuperExpression) || ((PsiSuperExpression)qualifier).getQualifier() != null && PsiUtil.isLanguageLevel8OrHigher(methodCall)) { + if (!(qualifier instanceof PsiSuperExpression)) { processor.setAccessClass((PsiClass)PsiUtil.getAccessObjectClass(qualifier).getElement()); } + else if (((PsiSuperExpression)qualifier).getQualifier() != null && PsiUtil.isLanguageLevel8OrHigher(qualifier)) { + final PsiClass accessClass = (PsiClass)PsiUtil.getAccessObjectClass(qualifier).getElement(); + if (accessClass != null && accessClass.isInterface()) { + processor.setAccessClass(accessClass); + } + } } processor.setIsConstructor(false); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/interfaceMethods/SuperProtectedCalls.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/interfaceMethods/SuperProtectedCalls.java new file mode 100644 index 000000000000..feaf0d43b72c --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/interfaceMethods/SuperProtectedCalls.java @@ -0,0 +1,9 @@ +package p2; + +import p.*; + +class Test extends Foo { + { + Test.super.foo(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/Interface8MethodsHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/Interface8MethodsHighlightingTest.java index 11f9e860db10..b11732ddc2fc 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/Interface8MethodsHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/Interface8MethodsHighlightingTest.java @@ -15,10 +15,13 @@ */ package com.intellij.codeInsight.daemon.lambda; -import com.intellij.codeInsight.daemon.LightDaemonAnalyzerTestCase; +import com.intellij.JavaTestUtil; +import com.intellij.testFramework.LightProjectDescriptor; +import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; -public class Interface8MethodsHighlightingTest extends LightDaemonAnalyzerTestCase { +public class Interface8MethodsHighlightingTest extends LightCodeInsightFixtureTestCase { @NonNls static final String BASE_PATH = "/codeInsight/daemonCodeAnalyzer/lambda/interfaceMethods"; public void testStaticMethod() { doTest(); } @@ -39,6 +42,13 @@ public class Interface8MethodsHighlightingTest extends LightDaemonAnalyzerTestCa doTest(false, false); } + public void testSuperProtectedCalls() throws Exception { + myFixture.addClass("package p; public class Foo {" + + " protected void foo(){}" + + "}"); + doTest(); + } + public void testIDEA120498() { doTest(false, false); } private void doTest() { @@ -46,6 +56,19 @@ public class Interface8MethodsHighlightingTest extends LightDaemonAnalyzerTestCa } private void doTest(boolean checkWarnings, boolean checkInfos) { - doTestNewInference(BASE_PATH + "/" + getTestName(false) + ".java", checkWarnings, checkInfos); + String filePath = BASE_PATH + "/" + getTestName(false) + ".java"; + myFixture.configureByFile(filePath); + myFixture.checkHighlighting(checkWarnings, checkInfos, false); + } + + @Override + protected String getTestDataPath() { + return JavaTestUtil.getJavaTestDataPath(); + } + + @NotNull + @Override + protected LightProjectDescriptor getProjectDescriptor() { + return JAVA_8; } }