diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/IrStatementGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/IrStatementGenerator.kt index 7b134bbd3b2..01ddf00af7d 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/IrStatementGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/IrStatementGenerator.kt @@ -145,15 +145,19 @@ class IrStatementGenerator( } override fun visitStringTemplateExpression(expression: KtStringTemplateExpression, data: Nothing?): IrStatement { - if (expression.entries.size == 1) { - val entry0 = expression.entries[0] - if (entry0 is KtLiteralStringTemplateEntry) { - return entry0.genExpr() + val entries = expression.entries + when { + entries.size == 1 -> { + val entry0 = entries[0] + if (entry0 is KtLiteralStringTemplateEntry) { + return entry0.genExpr() + } } + entries.size == 0 -> return IrLiteralExpressionImpl.string(expression.startOffset, expression.endOffset, getInferredTypeWithSmarcastsOrFail(expression), "") } val irStringTemplate = IrStringConcatenationExpressionImpl(expression.startOffset, expression.endOffset, getInferredTypeWithSmartcasts(expression)) - expression.entries.forEach { it.expression!!.let { + entries.forEach { it.expression!!.let { irStringTemplate.addArgument(TODO()) } } return irStringTemplate diff --git a/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt b/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt index a9588299ba8..29fcbe50ddf 100644 --- a/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt +++ b/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt @@ -91,7 +91,8 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() { } if (treeFiles.isEmpty()) { - treeFiles.add(IrTreeFileLabel(File(dir, testFile.name.replace(".kt", ".txt")), 0)) + val file = createExpectedTextFile(testFile, dir, testFile.name.replace(".kt", ".txt")) + treeFiles.add(IrTreeFileLabel(file, 0)) } return Expectations(regexps, treeFiles) diff --git a/compiler/testData/ir/irText/augmentedAssignmentArray.kt b/compiler/testData/ir/irText/arrayAugmentedAssignment1.kt similarity index 100% rename from compiler/testData/ir/irText/augmentedAssignmentArray.kt rename to compiler/testData/ir/irText/arrayAugmentedAssignment1.kt diff --git a/compiler/testData/ir/irText/augmentedAssignmentArray.txt b/compiler/testData/ir/irText/arrayAugmentedAssignment1.txt similarity index 97% rename from compiler/testData/ir/irText/augmentedAssignmentArray.txt rename to compiler/testData/ir/irText/arrayAugmentedAssignment1.txt index 4f0c4c2405e..2b527404e71 100644 --- a/compiler/testData/ir/irText/augmentedAssignmentArray.txt +++ b/compiler/testData/ir/irText/arrayAugmentedAssignment1.txt @@ -1,4 +1,4 @@ -IrFile /augmentedAssignmentArray.kt +IrFile /arrayAugmentedAssignment1.kt IrFunction public fun foo(): kotlin.IntArray IrExpressionBody BLOCK type= hasResult=false isDesugared=true diff --git a/compiler/testData/ir/irText/arrayAugmentedAssignment2.kt b/compiler/testData/ir/irText/arrayAugmentedAssignment2.kt new file mode 100644 index 00000000000..dd343f8ba0e --- /dev/null +++ b/compiler/testData/ir/irText/arrayAugmentedAssignment2.kt @@ -0,0 +1,11 @@ +interface IA { + operator fun get(index: String): Int +} + +interface IB { + operator fun IA.set(index: String, value: Int) +} + +fun IB.test(a: IA) { + a[""] += 42 +} \ No newline at end of file diff --git a/compiler/testData/ir/irText/arrayAugmentedAssignment2.txt b/compiler/testData/ir/irText/arrayAugmentedAssignment2.txt new file mode 100644 index 00000000000..22cc081e7cd --- /dev/null +++ b/compiler/testData/ir/irText/arrayAugmentedAssignment2.txt @@ -0,0 +1,19 @@ +IrFile /arrayAugmentedAssignment2.kt + DUMMY IA + DUMMY IB + IrFunction public fun IB.test(/*0*/ a: IA): kotlin.Unit + IrExpressionBody + BLOCK type= hasResult=false isDesugared=false + VAR val tmp0_array: IA + GET_VAR a type=IA + VAR val tmp1_index0: kotlin.String + LITERAL String type=kotlin.String value='' + CALL .set type=kotlin.Unit operator=PLUSEQ + $this: $RECEIVER of: test type=IB + $receiver: GET_VAR tmp0_array type=IA + index: GET_VAR tmp1_index0 type=kotlin.String + value: CALL .plus type=kotlin.Int operator=PLUSEQ + $this: CALL .get type=kotlin.Int operator=PLUSEQ + $this: GET_VAR tmp0_array type=IA + index: GET_VAR tmp1_index0 type=kotlin.String + other: LITERAL Int type=kotlin.Int value='42' diff --git a/compiler/testData/ir/irText/smartCastsWithDestructuring.txt b/compiler/testData/ir/irText/smartCastsWithDestructuring.txt index 0747d8047c8..9e4bebc36ad 100644 --- a/compiler/testData/ir/irText/smartCastsWithDestructuring.txt +++ b/compiler/testData/ir/irText/smartCastsWithDestructuring.txt @@ -10,7 +10,7 @@ IrFile /smartCastsWithDestructuring.kt IrExpressionBody BLOCK type= hasResult=false isDesugared=true RETURN type= - ? IrStringConcatenationExpressionImpl type=kotlin.String + LITERAL String type=kotlin.String value='' IrFunction public fun test(/*0*/ x: I1): kotlin.Unit IrExpressionBody BLOCK type= hasResult=false isDesugared=false diff --git a/compiler/tests/org/jetbrains/kotlin/ir/IrTextTestCaseGenerated.java b/compiler/tests/org/jetbrains/kotlin/ir/IrTextTestCaseGenerated.java index 5ec52aded88..32ad3e749c5 100644 --- a/compiler/tests/org/jetbrains/kotlin/ir/IrTextTestCaseGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/ir/IrTextTestCaseGenerated.java @@ -41,6 +41,18 @@ public class IrTextTestCaseGenerated extends AbstractIrTextTestCase { doTest(fileName); } + @TestMetadata("arrayAugmentedAssignment1.kt") + public void testArrayAugmentedAssignment1() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/arrayAugmentedAssignment1.kt"); + doTest(fileName); + } + + @TestMetadata("arrayAugmentedAssignment2.kt") + public void testArrayAugmentedAssignment2() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/arrayAugmentedAssignment2.kt"); + doTest(fileName); + } + @TestMetadata("assignments.kt") public void testAssignments() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/assignments.kt"); @@ -59,12 +71,6 @@ public class IrTextTestCaseGenerated extends AbstractIrTextTestCase { doTest(fileName); } - @TestMetadata("augmentedAssignmentArray.kt") - public void testAugmentedAssignmentArray() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/augmentedAssignmentArray.kt"); - doTest(fileName); - } - @TestMetadata("boxOk.kt") public void testBoxOk() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/boxOk.kt");