diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java index 0c7b103cf0d..81cb2d84753 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java @@ -3175,6 +3175,12 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("js/js.translator/testData/box/expression/stringTemplates"), Pattern.compile("^([^_](.+))\\.kt$"), TargetBackend.JS, true); } + @TestMetadata("nonStrings.kt") + public void testNonStrings() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/expression/stringTemplates/nonStrings.kt"); + doTest(fileName); + } + @TestMetadata("objectWithToString.kt") public void testObjectWithToString() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/expression/stringTemplates/objectWithToString.kt"); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/StringTemplateTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/StringTemplateTranslator.java index b1666823145..91952d66708 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/StringTemplateTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/StringTemplateTranslator.java @@ -112,16 +112,11 @@ public final class StringTemplateTranslator extends AbstractTranslator { private boolean mustCallToString(@NotNull KotlinType type) { Name typeName = DescriptorUtilsKt.getNameIfStandardType(type); - if (typeName != null) { - //TODO: this is a hacky optimization, should use some generic approach - if (NamePredicate.STRING.test(typeName)) { - return false; - } - else if (NamePredicate.PRIMITIVE_NUMBERS.test(typeName)) { - return resultingExpression == null; - } + //TODO: this is a hacky optimization, should use some generic approach + if (typeName != null && NamePredicate.STRING.test(typeName)) { + return false; } - return expressionEntries.length == 1; + return resultingExpression == null; } @Override diff --git a/js/js.translator/testData/box/expression/stringTemplates/nonStrings.kt b/js/js.translator/testData/box/expression/stringTemplates/nonStrings.kt new file mode 100644 index 00000000000..f697630a933 --- /dev/null +++ b/js/js.translator/testData/box/expression/stringTemplates/nonStrings.kt @@ -0,0 +1,23 @@ +// EXPECTED_REACHABLE_NODES: 1024 +fun box(): String { + val x = foo() + val y = bar() + + var r = "$x$y" + if (r != "2342") return "fail: $r" + + r = "$y$x" + if (r != "4223") return "fail: $r" + + r = "$x$x" + if (r != "2323") return "fail: $r" + + r = "$y$y" + if (r != "4242") return "fail: $r" + + return "OK" +} + +fun foo(): Any = 23 + +fun bar() = 42 \ No newline at end of file