From ec06654a731f80f94ac7f550708523155281190f Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Thu, 7 Mar 2024 22:40:58 +0100 Subject: [PATCH] KT-66411 [AA] Add test for the `getOrBuildFir` on array assignment expression as a single `when`/`if` branch expression --- ...rayAssignOperatorAsSingleExpressionInIf.kt | 10 ++++++ ...ayAssignOperatorAsSingleExpressionInIf.txt | 33 +++++++++++++++++++ ...yAssignOperatorAsSingleExpressionInWhen.kt | 10 ++++++ ...AssignOperatorAsSingleExpressionInWhen.txt | 33 +++++++++++++++++++ ...ContentRootGetOrBuildFirTestGenerated.java | 12 +++++++ .../fir/SourceGetOrBuildFirTestGenerated.java | 12 +++++++ 6 files changed, 110 insertions(+) create mode 100644 analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInIf.kt create mode 100644 analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInIf.txt create mode 100644 analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInWhen.kt create mode 100644 analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInWhen.txt diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInIf.kt b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInIf.kt new file mode 100644 index 00000000000..b5e2a193aba --- /dev/null +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInIf.kt @@ -0,0 +1,10 @@ +// LOOK_UP_FOR_ELEMENT_OF_TYPE: org.jetbrains.kotlin.psi.KtBinaryExpression + +class Foo { + operator fun set(n: Int, value: String) {} +} + +fun usageFoo(flag: Boolean, foo: Foo) { + if (flag) foo[10] = "" +} + diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInIf.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInIf.txt new file mode 100644 index 00000000000..f1f13c5eaf4 --- /dev/null +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInIf.txt @@ -0,0 +1,33 @@ +KT element: KtBinaryExpression +FIR element: FirBlockImpl +FIR source kind: KtRealSourceElementKind + +FIR element rendered: + { + R|/foo|.R|/Foo.set|(Int(10), String()) + Unit +} + +FIR FILE: +FILE: [ResolvedTo(IMPORTS)] arrayAssignOperatorAsSingleExpressionInIf.kt + public final [ResolvedTo(STATUS)] class Foo : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=Foo] constructor(): R|Foo| { + LAZY_super + } + + public final operator [ResolvedTo(CONTRACTS)] fun set([ResolvedTo(CONTRACTS)] n: R|kotlin/Int|, [ResolvedTo(CONTRACTS)] value: R|kotlin/String|): R|kotlin/Unit| { + } + + } + public final [ResolvedTo(BODY_RESOLVE)] fun usageFoo([ResolvedTo(BODY_RESOLVE)] flag: R|kotlin/Boolean|, [ResolvedTo(BODY_RESOLVE)] foo: R|Foo|): R|kotlin/Unit| { + when () { + R|/flag| -> { + { + R|/foo|.R|/Foo.set|(Int(10), String()) + Unit + } + + } + } + + } diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInWhen.kt b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInWhen.kt new file mode 100644 index 00000000000..f381494099f --- /dev/null +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInWhen.kt @@ -0,0 +1,10 @@ +// LOOK_UP_FOR_ELEMENT_OF_TYPE: org.jetbrains.kotlin.psi.KtBinaryExpression + +class Foo { + operator fun set(n: Int, value: String) {} +} + +fun usageFoo(foo: Foo) { + when { else -> foo[10] = "" } +} + diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInWhen.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInWhen.txt new file mode 100644 index 00000000000..01c3a3565f4 --- /dev/null +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInWhen.txt @@ -0,0 +1,33 @@ +KT element: KtBinaryExpression +FIR element: FirBlockImpl +FIR source kind: KtRealSourceElementKind + +FIR element rendered: + { + R|/foo|.R|/Foo.set|(Int(10), String()) + Unit +} + +FIR FILE: +FILE: [ResolvedTo(IMPORTS)] arrayAssignOperatorAsSingleExpressionInWhen.kt + public final [ResolvedTo(STATUS)] class Foo : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=Foo] constructor(): R|Foo| { + LAZY_super + } + + public final operator [ResolvedTo(CONTRACTS)] fun set([ResolvedTo(CONTRACTS)] n: R|kotlin/Int|, [ResolvedTo(CONTRACTS)] value: R|kotlin/String|): R|kotlin/Unit| { + } + + } + public final [ResolvedTo(BODY_RESOLVE)] fun usageFoo([ResolvedTo(BODY_RESOLVE)] foo: R|Foo|): R|kotlin/Unit| { + when () { + else -> { + { + R|/foo|.R|/Foo.set|(Int(10), String()) + Unit + } + + } + } + + } diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java index 55c1d45142a..78f3de135fb 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java @@ -299,6 +299,18 @@ public class OutOfContentRootGetOrBuildFirTestGenerated extends AbstractOutOfCon KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testData/getOrBuildFir/calls"), Pattern.compile("^(.+)\\.(kt)$"), null, true); } + @Test + @TestMetadata("arrayAssignOperatorAsSingleExpressionInIf.kt") + public void testArrayAssignOperatorAsSingleExpressionInIf() { + runTest("analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInIf.kt"); + } + + @Test + @TestMetadata("arrayAssignOperatorAsSingleExpressionInWhen.kt") + public void testArrayAssignOperatorAsSingleExpressionInWhen() { + runTest("analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInWhen.kt"); + } + @Test @TestMetadata("arrayMinusAssignOperatorsInVariousScopes.kt") public void testArrayMinusAssignOperatorsInVariousScopes() { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java index 6458f613410..173c2be5e05 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java @@ -299,6 +299,18 @@ public class SourceGetOrBuildFirTestGenerated extends AbstractSourceGetOrBuildFi KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testData/getOrBuildFir/calls"), Pattern.compile("^(.+)\\.(kt)$"), null, true); } + @Test + @TestMetadata("arrayAssignOperatorAsSingleExpressionInIf.kt") + public void testArrayAssignOperatorAsSingleExpressionInIf() { + runTest("analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInIf.kt"); + } + + @Test + @TestMetadata("arrayAssignOperatorAsSingleExpressionInWhen.kt") + public void testArrayAssignOperatorAsSingleExpressionInWhen() { + runTest("analysis/low-level-api-fir/testData/getOrBuildFir/calls/arrayAssignOperatorAsSingleExpressionInWhen.kt"); + } + @Test @TestMetadata("arrayMinusAssignOperatorsInVariousScopes.kt") public void testArrayMinusAssignOperatorsInVariousScopes() {