Fix for KT-4301: Too many StringBuilders on string concatenations
#KT-4301 Fixed
This commit is contained in:
@@ -3043,9 +3043,8 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
|||||||
JetExpression left = binaryExpression.getLeft();
|
JetExpression left = binaryExpression.getLeft();
|
||||||
JetExpression right = binaryExpression.getRight();
|
JetExpression right = binaryExpression.getRight();
|
||||||
Type leftType = expressionType(left);
|
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(left);
|
||||||
invokeAppend(right);
|
invokeAppend(right);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -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"
|
||||||
|
}
|
||||||
|
|
||||||
@@ -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
|
||||||
@@ -177,6 +177,12 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest {
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("topLevelFunWithDefaultArgs.kt")
|
||||||
public void testTopLevelFunWithDefaultArgs() throws Exception {
|
public void testTopLevelFunWithDefaultArgs() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/topLevelFunWithDefaultArgs.kt");
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/topLevelFunWithDefaultArgs.kt");
|
||||||
|
|||||||
@@ -5990,6 +5990,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("compiler/testData/codegen/box/super")
|
||||||
|
|||||||
Reference in New Issue
Block a user