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 13846162..8ccc2693 100644 --- a/transpiler/src/main/java/org/jsweet/transpiler/extension/RemoveJavaDependenciesAdapter.java +++ b/transpiler/src/main/java/org/jsweet/transpiler/extension/RemoveJavaDependenciesAdapter.java @@ -1056,13 +1056,15 @@ public class RemoveJavaDependenciesAdapter extends Java2TypeScriptAdapter { case "remove": case "removeElement": printMacroName(targetMethodName); - if (Util.isNumber(invocation.getArgument(0).getType())) { + if (Util.isNumber(invocation.getArgument(0).getType()) && types() + .isSubtype(invocation.getMethod().getEnclosingElement().asType(), util().getType(List.class))) { print(invocation.getTargetExpression(), delegate).print(".splice(") .printArgList(invocation.getArguments()).print(", 1)"); } else { - print("(a => a.splice(a.indexOf(").print(invocation.getArgument(0)).print(")") - .print(invocation.getArgumentCount() == 1 ? "" : ", ") - .printArgList(invocation.getArgumentTail()).print(", 1))("); + print("(a => { let index = a.indexOf(").print(invocation.getArgument(0)) + .print("); if(index>=0) { a.splice(index").print(invocation.getArgumentCount() == 1 ? "" : ", ") + .printArgList(invocation.getArgumentTail()) + .print(", 1); return true; } else { return false; }})("); print(invocation.getTargetExpression(), delegate).print(")"); } return true; @@ -1109,7 +1111,8 @@ public class RemoveJavaDependenciesAdapter extends Java2TypeScriptAdapter { return true; case "size": printMacroName(targetMethodName); - print(invocation.getTargetExpression(), delegate).print(".length"); + print("("); + print(invocation.getTargetExpression(), delegate).print(".length)"); return true; case "get": case "elementAt": diff --git a/transpiler/src/main/java/org/jsweet/transpiler/model/support/UtilSupport.java b/transpiler/src/main/java/org/jsweet/transpiler/model/support/UtilSupport.java index bf7d2d30..bc03b273 100644 --- a/transpiler/src/main/java/org/jsweet/transpiler/model/support/UtilSupport.java +++ b/transpiler/src/main/java/org/jsweet/transpiler/model/support/UtilSupport.java @@ -93,6 +93,8 @@ public class UtilSupport implements Util { return context.symtab.noSuchFieldErrorType; case "java.lang.Throwable": return context.symtab.throwableType; + case "java.util.List": + return context.symtab.listType; } return null; } diff --git a/transpiler/src/test/java/source/nativestructures/Maps.java b/transpiler/src/test/java/source/nativestructures/Maps.java index 274a94bf..859d9fbc 100644 --- a/transpiler/src/test/java/source/nativestructures/Maps.java +++ b/transpiler/src/test/java/source/nativestructures/Maps.java @@ -73,6 +73,24 @@ public class Maps { trace.push("" + e.getValue()); } + Map m3 = new HashMap<>(); + m3.put("a", 1); + assert m3.size() == 1; + m3.remove("a"); + assert m3.size() == 0; + m3.put("b", 2); + m3.remove("a"); + assert m3.size() == 1; + + Map m4 = new HashMap<>(); + m4.put(1, 1); + assert m4.size() == 1; + m4.remove(1); + assert m4.size() == 0; + m4.put(2, 2); + m4.remove(1); + assert m4.size() == 1; + $export("trace", trace.join(",")); } diff --git a/transpiler/src/test/java/source/nativestructures/Sets.java b/transpiler/src/test/java/source/nativestructures/Sets.java index 552dac82..5a2a94b2 100644 --- a/transpiler/src/test/java/source/nativestructures/Sets.java +++ b/transpiler/src/test/java/source/nativestructures/Sets.java @@ -21,6 +21,25 @@ public class Sets { System.out.println(map.get(s)); // TODO: make this work (see #196) // assert "bye".equals(map.get(s)); + + Set s3 = new HashSet<>(); + s3.add("1"); + assert s3.size() == 1; + assert s3.remove("1"); + assert s3.size() == 0; + s3.add("2"); + assert !s3.remove("1"); + assert s3.size() == 1; + + Set s4 = new HashSet<>(); + s4.add(1); + assert s4.size() == 1; + assert s4.remove(1); + assert s4.size() == 0; + s4.add(2); + assert !s4.remove(1); + assert s4.size() == 1; + } }