From fcabc60471ae2cce2ceb7b12b26681cd153b564a Mon Sep 17 00:00:00 2001 From: Kristoffer Andersen Date: Fri, 23 Sep 2022 17:58:04 +0200 Subject: [PATCH] [FIR] Insert fake source for FIR for array access temporaries --- ...ithArrayAccessConvention_propertyAccess.kt | 8 +++++++ ...thArrayAccessConvention_propertyAccess.txt | 6 +++++ .../calls/incWithArrayAccessConvention.kt | 17 +++++++++++++ .../calls/incWithArrayAccessConvention.txt | 6 +++++ ...ithArrayAccessConvention_propertyAccess.kt | 17 +++++++++++++ ...thArrayAccessConvention_propertyAccess.txt | 6 +++++ .../calls/incWithArrayAccessConvention_set.kt | 12 ++++++++++ .../incWithArrayAccessConvention_set.txt | 6 +++++ .../api/fir/GetOrBuildFirTestGenerated.java | 24 +++++++++++++++++++ .../kotlin/fir/lightTree/PathWalker.kt | 1 + .../kotlin/fir/builder/BaseFirBuilder.kt | 2 +- 11 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 analysis/low-level-api-fir/testdata/getOrBuildFir/calls/compoundAssignWithArrayAccessConvention_propertyAccess.kt create mode 100644 analysis/low-level-api-fir/testdata/getOrBuildFir/calls/compoundAssignWithArrayAccessConvention_propertyAccess.txt create mode 100644 analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention.kt create mode 100644 analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention.txt create mode 100644 analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_propertyAccess.kt create mode 100644 analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_propertyAccess.txt create mode 100644 analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_set.kt create mode 100644 analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_set.txt diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/compoundAssignWithArrayAccessConvention_propertyAccess.kt b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/compoundAssignWithArrayAccessConvention_propertyAccess.kt new file mode 100644 index 00000000000..874c3a3ef33 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/compoundAssignWithArrayAccessConvention_propertyAccess.kt @@ -0,0 +1,8 @@ +interface MyMap { + operator fun get(k: K): V + operator fun set(k: K, v: V) +} + +fun test(m: MyMap) { + m["a"] += 1 +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/compoundAssignWithArrayAccessConvention_propertyAccess.txt b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/compoundAssignWithArrayAccessConvention_propertyAccess.txt new file mode 100644 index 00000000000..4129bba16ca --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/compoundAssignWithArrayAccessConvention_propertyAccess.txt @@ -0,0 +1,6 @@ +KT element: KtNameReferenceExpression +FIR element: FirPropertyAccessExpressionImpl +FIR source kind: KtRealSourceElementKind + +FIR element rendered: +R|/m| diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention.kt b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention.kt new file mode 100644 index 00000000000..c78901015a2 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention.kt @@ -0,0 +1,17 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +interface A { + operator fun inc(): A +} + +interface MyMap { + operator fun get(k: K): V + operator fun set(k: K, v: V): Unit +} + +fun test(m: MyMap) { + m["a"]++ +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention.txt b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention.txt new file mode 100644 index 00000000000..c4107163bb5 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention.txt @@ -0,0 +1,6 @@ +KT element: KtPostfixExpression +FIR element: FirFunctionCallImpl +FIR source kind: DesugaredIncrementOrDecrement + +FIR element rendered: +R|/|.R|SubstitutionOverride|(R|/|, R|/|.R|/A.inc|()) diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_propertyAccess.kt b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_propertyAccess.kt new file mode 100644 index 00000000000..ae8d8e9e6a9 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_propertyAccess.kt @@ -0,0 +1,17 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +interface A { + operator fun inc(): A +} + +interface MyMap { + operator fun get(k: K): V + operator fun set(k: K, v: V): Unit +} + +fun test(m: MyMap) { + m["a"]++ +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_propertyAccess.txt b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_propertyAccess.txt new file mode 100644 index 00000000000..4129bba16ca --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_propertyAccess.txt @@ -0,0 +1,6 @@ +KT element: KtNameReferenceExpression +FIR element: FirPropertyAccessExpressionImpl +FIR source kind: KtRealSourceElementKind + +FIR element rendered: +R|/m| diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_set.kt b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_set.kt new file mode 100644 index 00000000000..9e03f0e24b8 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_set.kt @@ -0,0 +1,12 @@ +interface A { + operator fun inc(): A +} + +interface MyMap { + operator fun get(k: K): V + operator fun set(k: K, v: V): Unit +} + +fun test(m: MyMap) { + m["a"]++ +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_set.txt b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_set.txt new file mode 100644 index 00000000000..a725827af71 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_set.txt @@ -0,0 +1,6 @@ +KT element: KtArrayAccessExpression +FIR element: FirResolvedNamedReferenceImpl +FIR source kind: KtRealSourceElementKind + +FIR element rendered: +R|SubstitutionOverride| diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/GetOrBuildFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/GetOrBuildFirTestGenerated.java index 6e84d6b1d63..95c30dfc9e0 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/GetOrBuildFirTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/GetOrBuildFirTestGenerated.java @@ -133,6 +133,12 @@ public class GetOrBuildFirTestGenerated extends AbstractGetOrBuildFirTest { runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/calls/compoundAssignWithArrayAccessConvention_lhs.kt"); } + @Test + @TestMetadata("compoundAssignWithArrayAccessConvention_propertyAccess.kt") + public void testCompoundAssignWithArrayAccessConvention_propertyAccess() throws Exception { + runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/calls/compoundAssignWithArrayAccessConvention_propertyAccess.kt"); + } + @Test @TestMetadata("compoundAssignWithArrayGetConvention.kt") public void testCompoundAssignWithArrayGetConvention() throws Exception { @@ -163,6 +169,24 @@ public class GetOrBuildFirTestGenerated extends AbstractGetOrBuildFirTest { runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/calls/functionCallArgumentList.kt"); } + @Test + @TestMetadata("incWithArrayAccessConvention.kt") + public void testIncWithArrayAccessConvention() throws Exception { + runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention.kt"); + } + + @Test + @TestMetadata("incWithArrayAccessConvention_propertyAccess.kt") + public void testIncWithArrayAccessConvention_propertyAccess() throws Exception { + runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_propertyAccess.kt"); + } + + @Test + @TestMetadata("incWithArrayAccessConvention_set.kt") + public void testIncWithArrayAccessConvention_set() throws Exception { + runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/calls/incWithArrayAccessConvention_set.kt"); + } + @Test @TestMetadata("invokeCallArgumentList.kt") public void testInvokeCallArgumentList() throws Exception { diff --git a/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/PathWalker.kt b/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/PathWalker.kt index cda55e28eac..8e7c26d3732 100644 --- a/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/PathWalker.kt +++ b/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/PathWalker.kt @@ -13,6 +13,7 @@ fun String.walkTopDown(f: (File) -> Unit) { if (file.isDirectory) continue if (file.path.contains("kotlin-native") || file.path.contains("testData") || + file.path.contains("testdata") || file.path.contains("resources")) continue if (file.extension != "kt") continue diff --git a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt index 23d7c5659ef..a297ce8b9ab 100644 --- a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt +++ b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt @@ -802,7 +802,7 @@ abstract class BaseFirBuilder(val baseSession: FirSession, val context: Conte val arrayVariable = generateTemporaryVariable( baseModuleData, - array?.toFirSourceElement(), + array?.toFirSourceElement(KtFakeSourceElementKind.ArrayAccessNameReference), name = SpecialNames.ARRAY, initializer = arrayReceiver, ).also { statements += it }