[FIR] Insert fake source for FIR for array access temporaries
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 0000000..874c3a3
--- /dev/null
+++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/compoundAssignWithArrayAccessConvention_propertyAccess.kt
@@ -0,0 +1,8 @@
+interface MyMap<K, V> {
+ operator fun get(k: K): V
+ operator fun set(k: K, v: V)
+}
+
+fun test(m: MyMap<String, Int>) {
+ <expr>m</expr>["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 0000000..4129bba
--- /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|<local>/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 0000000..c789010
--- /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<K, V> {
+ operator fun get(k: K): V
+ operator fun set(k: K, v: V): Unit
+}
+
+fun test(m: MyMap<String, A>) {
+ <expr>m["a"]++</expr>
+}
\ 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 0000000..c410716
--- /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|<local>/<array>|.R|SubstitutionOverride</MyMap.set: R|kotlin/Unit|>|(R|<local>/<index_0>|, R|<local>/<unary>|.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 0000000..ae8d8e9
--- /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<K, V> {
+ operator fun get(k: K): V
+ operator fun set(k: K, v: V): Unit
+}
+
+fun test(m: MyMap<String, A>) {
+ <expr>m</expr>["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 0000000..4129bba
--- /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|<local>/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 0000000..9e03f0e
--- /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<K, V> {
+ operator fun get(k: K): V
+ operator fun set(k: K, v: V): Unit
+}
+
+fun test(m: MyMap<String, A>) {
+ <expr>m["a"]</expr>++
+}
\ 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 0000000..a725827
--- /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</MyMap.set: R|kotlin/Unit|>|
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 6e84d6b..95c30df 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
@@ -134,6 +134,12 @@
}
@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 {
runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/calls/compoundAssignWithArrayGetConvention.kt");
@@ -164,6 +170,24 @@
}
@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 {
runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/calls/invokeCallArgumentList.kt");
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 cda55e2..8e7c26d 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 @@
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 23d7c56..a297ce8 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 @@
val arrayVariable = generateTemporaryVariable(
baseModuleData,
- array?.toFirSourceElement(),
+ array?.toFirSourceElement(KtFakeSourceElementKind.ArrayAccessNameReference),
name = SpecialNames.ARRAY,
initializer = arrayReceiver,
).also { statements += it }