diff --git a/compiler/fir/resolve/testData/resolve/invokeInWhenSubjectVariableInitializer.kt b/compiler/fir/resolve/testData/resolve/invokeInWhenSubjectVariableInitializer.kt new file mode 100644 index 00000000000..43a77a68bab --- /dev/null +++ b/compiler/fir/resolve/testData/resolve/invokeInWhenSubjectVariableInitializer.kt @@ -0,0 +1,3 @@ +fun test(func: () -> String?) { + val x = func() ?: "" +} diff --git a/compiler/fir/resolve/testData/resolve/invokeInWhenSubjectVariableInitializer.txt b/compiler/fir/resolve/testData/resolve/invokeInWhenSubjectVariableInitializer.txt new file mode 100644 index 00000000000..19d74110a31 --- /dev/null +++ b/compiler/fir/resolve/testData/resolve/invokeInWhenSubjectVariableInitializer.txt @@ -0,0 +1,12 @@ +FILE: invokeInWhenSubjectVariableInitializer.kt + public final fun test(func: R|() -> kotlin/String?|): R|kotlin/Unit| { + lval x: R|kotlin/String| = when (lval : R|kotlin/String?| = R|/func|.R|FakeOverride|()) { + ==($subj$, Null(null)) -> { + String() + } + else -> { + R|/| + } + } + + } diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsTestGenerated.java index f1dbfed5f78..110ccafef41 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsTestGenerated.java @@ -203,6 +203,11 @@ public class FirDiagnosticsTestGenerated extends AbstractFirDiagnosticsTest { runTest("compiler/fir/resolve/testData/resolve/intersectionTypes.kt"); } + @TestMetadata("invokeInWhenSubjectVariableInitializer.kt") + public void testInvokeInWhenSubjectVariableInitializer() throws Exception { + runTest("compiler/fir/resolve/testData/resolve/invokeInWhenSubjectVariableInitializer.kt"); + } + @TestMetadata("invokeOfLambdaWithReceiver.kt") public void testInvokeOfLambdaWithReceiver() throws Exception { runTest("compiler/fir/resolve/testData/resolve/invokeOfLambdaWithReceiver.kt"); diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithLightTreeTestGenerated.java index 848935c4b76..a7bf136fadd 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithLightTreeTestGenerated.java @@ -203,6 +203,11 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos runTest("compiler/fir/resolve/testData/resolve/intersectionTypes.kt"); } + @TestMetadata("invokeInWhenSubjectVariableInitializer.kt") + public void testInvokeInWhenSubjectVariableInitializer() throws Exception { + runTest("compiler/fir/resolve/testData/resolve/invokeInWhenSubjectVariableInitializer.kt"); + } + @TestMetadata("invokeOfLambdaWithReceiver.kt") public void testInvokeOfLambdaWithReceiver() throws Exception { runTest("compiler/fir/resolve/testData/resolve/invokeOfLambdaWithReceiver.kt"); diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirWhenExpressionImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirWhenExpressionImpl.kt index e1bcc8361d3..dff34f286e5 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirWhenExpressionImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirWhenExpressionImpl.kt @@ -58,6 +58,7 @@ internal class FirWhenExpressionImpl( override fun transformSubject(transformer: FirTransformer, data: D): FirWhenExpressionImpl { if (subjectVariable != null) { subjectVariable = subjectVariable?.transformSingle(transformer, data) + subject = subjectVariable?.initializer } else { subject = subject?.transformSingle(transformer, data) } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/implementation.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/implementation.kt index bc365d42ffe..096664b5f82 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/implementation.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/implementation.kt @@ -266,6 +266,7 @@ fun SmartPrinter.printImplementation(implementation: Implementation) { """ |if (subjectVariable != null) { | subjectVariable = subjectVariable?.transformSingle(transformer, data) + | subject = subjectVariable?.initializer | } else { | subject = subject?.transformSingle(transformer, data) | }