From 6b5e7ae8254e537de8c616ef8feb156a1891e03d Mon Sep 17 00:00:00 2001 From: Brian Norman Date: Tue, 13 Jun 2023 10:07:09 -0500 Subject: [PATCH] [FIR] Transform children independently when callee is an error To make sure all possible types are resolved and any additional errors are reported, resolve children of function calls using independent resolution mode when the callee reference is an error. #KT-59041 Fixed --- .../DiagnosticCompilerTestFE10TestdataTestGenerated.java | 6 ++++++ ...ReversedDiagnosticCompilerFE10TestDataTestGenerated.java | 6 ++++++ .../FirLightTreeOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ .../runners/FirPsiOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ .../body/resolve/FirExpressionsResolveTransformer.kt | 2 +- .../diagnostics/tests/incompleteCode/kt59041.fir.kt | 6 ++++++ .../testData/diagnostics/tests/incompleteCode/kt59041.kt | 6 ++++++ .../kotlin/test/runners/DiagnosticTestGenerated.java | 6 ++++++ 8 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/diagnostics/tests/incompleteCode/kt59041.fir.kt create mode 100644 compiler/testData/diagnostics/tests/incompleteCode/kt59041.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index 30c5e78439d..33b4338e7c6 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -14428,6 +14428,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/incompleteCode/kt4866UnresolvedArrayAccess.kt"); } + @Test + @TestMetadata("kt59041.kt") + public void testKt59041() throws Exception { + runTest("compiler/testData/diagnostics/tests/incompleteCode/kt59041.kt"); + } + @Test @TestMetadata("NoSenselessComparisonForErrorType.kt") public void testNoSenselessComparisonForErrorType() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index b9ab4ed0919..b939fe2f6c3 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -14428,6 +14428,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/incompleteCode/kt4866UnresolvedArrayAccess.kt"); } + @Test + @TestMetadata("kt59041.kt") + public void testKt59041() throws Exception { + runTest("compiler/testData/diagnostics/tests/incompleteCode/kt59041.kt"); + } + @Test @TestMetadata("NoSenselessComparisonForErrorType.kt") public void testNoSenselessComparisonForErrorType() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index c3f87e84ccf..59aeb55cd58 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -14428,6 +14428,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/incompleteCode/kt4866UnresolvedArrayAccess.kt"); } + @Test + @TestMetadata("kt59041.kt") + public void testKt59041() throws Exception { + runTest("compiler/testData/diagnostics/tests/incompleteCode/kt59041.kt"); + } + @Test @TestMetadata("NoSenselessComparisonForErrorType.kt") public void testNoSenselessComparisonForErrorType() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index 58bce3717ff..5988ae78115 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -14434,6 +14434,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/incompleteCode/kt4866UnresolvedArrayAccess.kt"); } + @Test + @TestMetadata("kt59041.kt") + public void testKt59041() throws Exception { + runTest("compiler/testData/diagnostics/tests/incompleteCode/kt59041.kt"); + } + @Test @TestMetadata("NoSenselessComparisonForErrorType.kt") public void testNoSenselessComparisonForErrorType() throws Exception { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index f3cceddeff4..3763702fd1c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -413,7 +413,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT // The callee reference can be resolved as an error very early, e.g., `super` as a callee during raw FIR creation. // We still need to visit/transform other parts, e.g., call arguments, to check if any other errors are there. if (calleeReference !is FirResolvedNamedReference) { - functionCall.transformChildren(transformer, data) + functionCall.transformChildren(transformer, ResolutionMode.ContextIndependent) } return functionCall } diff --git a/compiler/testData/diagnostics/tests/incompleteCode/kt59041.fir.kt b/compiler/testData/diagnostics/tests/incompleteCode/kt59041.fir.kt new file mode 100644 index 00000000000..5fcbf3f1bd3 --- /dev/null +++ b/compiler/testData/diagnostics/tests/incompleteCode/kt59041.fir.kt @@ -0,0 +1,6 @@ +// COMPARE_WITH_LIGHT_TREE +// !DIAGNOSTICS: -UNUSED_VARIABLE + +fun main() { + val list = mutable ListOf<Int>(1) {} +} diff --git a/compiler/testData/diagnostics/tests/incompleteCode/kt59041.kt b/compiler/testData/diagnostics/tests/incompleteCode/kt59041.kt new file mode 100644 index 00000000000..87860776cb2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/incompleteCode/kt59041.kt @@ -0,0 +1,6 @@ +// COMPARE_WITH_LIGHT_TREE +// !DIAGNOSTICS: -UNUSED_VARIABLE + +fun main() { + val list = mutable ListOf<Int>(1) {} +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 9e1a7476bc6..b30bdcfef18 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -14434,6 +14434,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/incompleteCode/kt4866UnresolvedArrayAccess.kt"); } + @Test + @TestMetadata("kt59041.kt") + public void testKt59041() throws Exception { + runTest("compiler/testData/diagnostics/tests/incompleteCode/kt59041.kt"); + } + @Test @TestMetadata("NoSenselessComparisonForErrorType.kt") public void testNoSenselessComparisonForErrorType() throws Exception {