diff --git a/transpiler/src/main/java/org/jsweet/transpiler/extension/RemoveJavaDependenciesAdapter.java b/transpiler/src/main/java/org/jsweet/transpiler/extension/RemoveJavaDependenciesAdapter.java index 2c9216dc..3957a61e 100644 --- a/transpiler/src/main/java/org/jsweet/transpiler/extension/RemoveJavaDependenciesAdapter.java +++ b/transpiler/src/main/java/org/jsweet/transpiler/extension/RemoveJavaDependenciesAdapter.java @@ -674,14 +674,21 @@ public class RemoveJavaDependenciesAdapter extends Java2TypeScriptAdapter { case "append": printMacroName(targetMethodName); if (invocation.getArgumentCount() == 1) { - print("(sb => sb.str = sb.str.concat(").printArgList(invocation.getArguments()).print("))("); + print("(sb => { sb.str = sb.str.concat(").printArgList(invocation.getArguments()) + .print("); return sb; })("); print(invocation.getTargetExpression(), delegate).print(")"); } else { - print("(sb => sb.str = sb.str.concat((").print(invocation.getArgument(0)).print(").substr(") - .printArgList(invocation.getArgumentTail()).print(")))("); + print("(sb => { sb.str = sb.str.concat((").print(invocation.getArgument(0)).print(").substr(") + .printArgList(invocation.getArgumentTail()).print(")); return sb; })("); print(invocation.getTargetExpression(), delegate).print(")"); } return true; + case "insert": + printMacroName(targetMethodName); + print("((sb, index, c) => { sb.str = sb.str.substr(0, index) + c + sb.str.substr(index); return sb; })("); + print(invocation.getTargetExpression(), delegate).print(", ").printArgList(invocation.getArguments()) + .print(")"); + return true; case "setCharAt": printMacroName(targetMethodName); print("((sb, index, c) => sb.str = sb.str.substr(0, index) + c + sb.str.substr(index + 1))("); @@ -690,13 +697,13 @@ public class RemoveJavaDependenciesAdapter extends Java2TypeScriptAdapter { return true; case "deleteCharAt": printMacroName(targetMethodName); - print("((sb, index) => sb.str = sb.str.substr(0, index) + sb.str.substr(index + 1))("); + print("((sb, index) => { sb.str = sb.str.substr(0, index) + sb.str.substr(index + 1); return sb; })("); print(invocation.getTargetExpression(), delegate).print(", ").printArgList(invocation.getArguments()) .print(")"); return true; case "delete": printMacroName(targetMethodName); - print("((sb, i1, i2) => sb.str = sb.str.substr(0, i1) + sb.str.substr(i2))("); + print("((sb, i1, i2) => { sb.str = sb.str.substr(0, i1) + sb.str.substr(i2); return sb; })("); print(invocation.getTargetExpression(), delegate).print(", ").printArgList(invocation.getArguments()) .print(")"); return true; diff --git a/transpiler/src/test/java/org/jsweet/test/transpiler/NativeStructuresTests.java b/transpiler/src/test/java/org/jsweet/test/transpiler/NativeStructuresTests.java index 5a0856fd..d70ee7c2 100644 --- a/transpiler/src/test/java/org/jsweet/test/transpiler/NativeStructuresTests.java +++ b/transpiler/src/test/java/org/jsweet/test/transpiler/NativeStructuresTests.java @@ -50,7 +50,7 @@ public class NativeStructuresTests extends AbstractTest { public void testStringBuilder() { eval((logHandler, result) -> { Assert.assertEquals("There should be no errors", 0, logHandler.reportedProblems.size()); - assertEquals("a,abc,a,abc,ab,X,tEst,E,4,tst,tt", result.get("trace")); + assertEquals("a,abc,a,abc,ab,X,tEst,E,4,tst,tt,:qqqq,:aaaaqqqq", result.get("trace")); }, getSourceFile(NativeStringBuilder.class)); } diff --git a/transpiler/src/test/java/source/nativestructures/NativeStringBuilder.java b/transpiler/src/test/java/source/nativestructures/NativeStringBuilder.java index fc761ca1..34589314 100644 --- a/transpiler/src/test/java/source/nativestructures/NativeStringBuilder.java +++ b/transpiler/src/test/java/source/nativestructures/NativeStringBuilder.java @@ -58,6 +58,14 @@ public class NativeStringBuilder { trace.push(""+sb3); + StringBuilder result = new StringBuilder(); + final String variableName = "qqqq"; + result.append(":").append(variableName); + trace.push(result.toString()); + + result.insert(1, "aaaa"); + trace.push(result.toString()); + $export("trace", trace.join(",")); }