From b9e6544c21fc6f5e9cb6d6d690957ae9a39d9918 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Mon, 22 Sep 2025 15:11:03 +0200 Subject: [PATCH] [java-highlighting] IDEA-378301 False compilation error on var initialization GitOrigin-RevId: 09b681b763347bcfcadca137d3e0c57cbe39f33a --- .../java/codeserver/highlighting/TypeChecker.java | 3 +++ .../advLVTI/ComplexInheritanceChain.java | 15 +++++++++++++++ .../daemon/LightAdvLVTIHighlightingTest.java | 6 ++++++ 3 files changed, 24 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/ComplexInheritanceChain.java diff --git a/java/codeserver/highlighting/src/com/intellij/java/codeserver/highlighting/TypeChecker.java b/java/codeserver/highlighting/src/com/intellij/java/codeserver/highlighting/TypeChecker.java index d526bb6c2fb1..6ef6afd80b29 100644 --- a/java/codeserver/highlighting/src/com/intellij/java/codeserver/highlighting/TypeChecker.java +++ b/java/codeserver/highlighting/src/com/intellij/java/codeserver/highlighting/TypeChecker.java @@ -84,6 +84,9 @@ final class TypeChecker { PsiExpression initializer = variable.getInitializer(); // array initializer checked in checkArrayInitializerApplicable if (initializer == null || initializer instanceof PsiArrayInitializerExpression) return; + PsiTypeElement typeElement = variable.getTypeElement(); + // initializer cannot be incompatible with the inferred type + if (typeElement != null && typeElement.isInferredType()) return; PsiType lType = variable.getType(); PsiType rType = initializer.getType(); myVisitor.myExpressionChecker.checkAssignability(lType, rType, initializer, initializer); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/ComplexInheritanceChain.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/ComplexInheritanceChain.java new file mode 100644 index 000000000000..c78ebeca995e --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/ComplexInheritanceChain.java @@ -0,0 +1,15 @@ +class MyTest { + interface BasicResult {} + interface BasicSet {} + interface BasicSession> {} + + interface Result> {} + + static Result create() { + return null; + } + + public void test() { + var x = create(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvLVTIHighlightingTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvLVTIHighlightingTest.java index f8e974651cdd..442a621963c0 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvLVTIHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvLVTIHighlightingTest.java @@ -6,6 +6,7 @@ import com.intellij.codeInsight.daemon.impl.HighlightInfoType; import com.intellij.codeInsight.navigation.actions.GotoDeclarationAction; import com.intellij.codeInspection.AnonymousCanBeLambdaInspection; import com.intellij.codeInspection.redundantCast.RedundantCastInspection; +import com.intellij.idea.TestFor; import com.intellij.openapi.projectRoots.JavaSdkVersion; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.pom.java.LanguageLevel; @@ -93,6 +94,11 @@ public class LightAdvLVTIHighlightingTest extends LightDaemonAnalyzerTestCase { public void testIntersectionTypeMethodRef() { doTest(); } + + @TestFor(issues = "IDEA-378301") + public void testComplexInheritanceChain() { + doTest(); + } public void testTypeObject() { doTest();