diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 007ddd3579e..ff8c4f20915 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -3043,9 +3043,8 @@ public class ExpressionCodegen extends JetVisitor implem JetExpression left = binaryExpression.getLeft(); JetExpression right = binaryExpression.getRight(); Type leftType = expressionType(left); - Type rightType = expressionType(right); - if (leftType.equals(JAVA_STRING_TYPE) && rightType.equals(JAVA_STRING_TYPE)) { + if (leftType.equals(JAVA_STRING_TYPE)) { invokeAppend(left); invokeAppend(right); return; diff --git a/compiler/testData/codegen/box/strings/stringBuilderAppend.kt b/compiler/testData/codegen/box/strings/stringBuilderAppend.kt new file mode 100644 index 00000000000..b370acf3954 --- /dev/null +++ b/compiler/testData/codegen/box/strings/stringBuilderAppend.kt @@ -0,0 +1,16 @@ +class A() { + + override fun toString(): String { + return "A" + } +} + +fun box() : String { + + val s = "1" + "2" + 3 + 4L + 5.0 + 6F + '7' + A() + + if (s != "12345.06.07A") return "fail $s" + + return "OK" +} + diff --git a/compiler/testData/codegen/bytecodeText/stringBuilderAppend.kt b/compiler/testData/codegen/bytecodeText/stringBuilderAppend.kt new file mode 100644 index 00000000000..70b73e9a879 --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/stringBuilderAppend.kt @@ -0,0 +1,16 @@ +class A() { + + override fun toString(): String { + return "A" + } +} + + +fun box() : String { + + val s = "1" + "2" + 3 + 4L + 5.0 + 6F + '7' + A() + + return s +} + +// 1 NEW java/lang/StringBuilder \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/BytecodeTextTestGenerated.java index 55e9436aac8..3084484a0b9 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/BytecodeTextTestGenerated.java @@ -177,6 +177,12 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { doTest(fileName); } + @TestMetadata("stringBuilderAppend.kt") + public void testStringBuilderAppend() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/stringBuilderAppend.kt"); + doTest(fileName); + } + @TestMetadata("topLevelFunWithDefaultArgs.kt") public void testTopLevelFunWithDefaultArgs() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/topLevelFunWithDefaultArgs.kt"); diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java index 5657c063c42..97dfe9eae63 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -5990,6 +5990,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("stringBuilderAppend.kt") + public void testStringBuilderAppend() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/strings/stringBuilderAppend.kt"); + doTest(fileName); + } + } @TestMetadata("compiler/testData/codegen/box/super")