From 7fe1b165a47ff5a334c29fe57be021ab418c0507 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 7 Jun 2024 15:32:42 +0200 Subject: [PATCH] [java-psi] Do not resolve super() call to Object() constructor when superclass is not resolved Needed for incomplete project model. GitOrigin-RevId: 2acbba54f4fd50fb3261601f1cb66175d7f19da6 --- .../src/com/intellij/psi/scope/util/PsiScopesUtil.java | 5 ++++- .../incompleteHighlighting/SuperCall.java | 8 ++++++++ .../incomplete/IncompleteModelHighlightingTest.java | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/incompleteHighlighting/SuperCall.java 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 3b5e7516b2bb..1185965d5b52 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 @@ -2,6 +2,7 @@ package com.intellij.psi.scope.util; +import com.intellij.lang.jvm.types.JvmReferenceType; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProgressIndicatorProvider; import com.intellij.openapi.util.Comparing; @@ -21,6 +22,7 @@ import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.TypeConversionUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.ObjectUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -247,7 +249,8 @@ public final class PsiScopesUtil { throw new MethodProcessorSetupFailedException("Can't resolve class for super expression"); } - final PsiClass superClass = aClass.getSuperClass(); + JvmReferenceType type = aClass.getSuperClassType(); + final PsiClass superClass = type == null ? null : ObjectUtils.tryCast(type.resolve(), PsiClass.class); if (superClass != null) { PsiSubstitutor substitutor = PsiSubstitutor.EMPTY; PsiClass runSuper = superClass; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/incompleteHighlighting/SuperCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/incompleteHighlighting/SuperCall.java new file mode 100644 index 000000000000..9dfffbc7d719 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/incompleteHighlighting/SuperCall.java @@ -0,0 +1,8 @@ + +import com.example.Super; + +class Sub extends Super { + Sub() { + super(123); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/incomplete/IncompleteModelHighlightingTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/incomplete/IncompleteModelHighlightingTest.java index cefab64d7ba6..d0371fae0571 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/incomplete/IncompleteModelHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/incomplete/IncompleteModelHighlightingTest.java @@ -37,4 +37,6 @@ public final class IncompleteModelHighlightingTest extends LightDaemonAnalyzerTe public void testInferenceFailure() { doTest(); } public void testIncompleteRecursiveParameters() { doTest(); } + + public void testSuperCall() { doTest(); } }