diff --git a/java/java-psi-impl/src/com/intellij/psi/util/JavaImplicitClassUtil.java b/java/java-psi-api/src/com/intellij/psi/util/JavaImplicitClassUtil.java similarity index 100% rename from java/java-psi-impl/src/com/intellij/psi/util/JavaImplicitClassUtil.java rename to java/java-psi-api/src/com/intellij/psi/util/JavaImplicitClassUtil.java diff --git a/java/java-psi-api/src/com/intellij/psi/util/PsiSuperMethodUtil.java b/java/java-psi-api/src/com/intellij/psi/util/PsiSuperMethodUtil.java index 5c8ab41d6c23..41f38d14d8b7 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/PsiSuperMethodUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/util/PsiSuperMethodUtil.java @@ -90,12 +90,12 @@ public final class PsiSuperMethodUtil { * For the multi-module projects which use different jdks or libraries, * it's important to map e.g. super class hierarchy to the current jdk. *

Example:

- * Suppose there is an abstract reader in a module with jdk 1.6 which inherits {@link Closeable} (no super interfaces!). + * Suppose there is an abstract reader in a module with jdk 1.6 which inherits {@link Closeable} (no super interfaces!). * In another module with jdk 1.7+ an inheritor of this reader should implement {@link AutoCloseable} though. - * - * @param psiClass a class to remap - * @param resolveScope scope where class should be found - * @return remapped class or same, if no other candidates were found + * + * @param psiClass a class to remap + * @param resolveScope scope where class should be found + * @return remapped class or same, if no other candidates were found */ public static @Nullable PsiClass correctClassByScope(@NotNull PsiClass psiClass, @NotNull GlobalSearchScope resolveScope) { String qualifiedName = psiClass.getQualifiedName(); @@ -107,7 +107,10 @@ public final class PsiSuperMethodUtil { if (file == null || !file.getViewProvider().isPhysical()) { return psiClass; } - + //it shouldn't be corrected because it is not inside indexes and doesn't have FQN + if (JavaImplicitClassUtil.isFileWithImplicitClass(file)) { + return psiClass; + } final VirtualFile vFile = file.getVirtualFile(); if (vFile == null) { return psiClass; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/implicitClass/InheritedMembers.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/implicitClass/InheritedMembers.java new file mode 100644 index 000000000000..8b7c925213f4 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/implicitClass/InheritedMembers.java @@ -0,0 +1,27 @@ +void main() { + new A() { public void a() {}}.a(); + new A.B() { public void a() {}}.b(); + + + var user = new MyUser(); + user.name = "test"; +} + +interface A { + void a(); + interface B extends A { + default void b() { + a(); + } + } +} + +class Person{ + public String name; + public int age; +} + +class MyUser extends Person{ + public String email; + public String password; +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/ImplicitClassHighlightingTest.kt b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/ImplicitClassHighlightingTest.kt index 40f128869268..6c5e6b9b71c4 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/ImplicitClassHighlightingTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/ImplicitClassHighlightingTest.kt @@ -280,6 +280,10 @@ class ImplicitClassHighlightingTest : LightJavaCodeInsightFixtureTestCase() { }) } + fun testInheritedMembers() { + doTest() + } + private fun doTest() { myFixture.configureByFile(getTestName(false) + ".java") myFixture.checkHighlighting()