From f844ff5d7f4838581435132a1dd0c17493a7c96b Mon Sep 17 00:00:00 2001 From: Benoit Lagae Date: Tue, 26 Feb 2019 09:32:29 +0100 Subject: [PATCH] Support Deque:remove() and removeFirst() This solves errors when using LinkedList reported in #517 --- .../extension/RemoveJavaDependenciesAdapter.java | 11 +++++++++-- .../java/source/nativestructures/Collections.java | 4 ++++ 2 files changed, 13 insertions(+), 2 deletions(-) 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 880969b5..0ab28d90 100644 --- a/transpiler/src/main/java/org/jsweet/transpiler/extension/RemoveJavaDependenciesAdapter.java +++ b/transpiler/src/main/java/org/jsweet/transpiler/extension/RemoveJavaDependenciesAdapter.java @@ -1153,9 +1153,16 @@ public class RemoveJavaDependenciesAdapter extends Java2TypeScriptAdapter { print(invocation.getTargetExpression(), delegate).print(")"); return true; case "remove": - case "removeElement": + case "removeFirst": // in Deque + case "removeElement": // in Vector: functionally equivalent to List.remove(int idx) printMacroName(targetMethodName); - if (Util.isNumber(invocation.getArgument(0).getType()) + /* in Queue: interface contains a no-arg method remove() + * which is functionally identical to Deque.removeFirst() + */ + if (invocation.getArgumentCount() == 0) { + print(invocation.getTargetExpression(), delegate) + .print(".splice(0, 1)[0]"); + } else if (Util.isNumber(invocation.getArgument(0).getType()) && types().isSubtype(types().erasure(invocation.getTargetExpression().getType()), types().erasure(util().getType(List.class)))) { print(invocation.getTargetExpression(), delegate).print(".splice(") diff --git a/transpiler/src/test/java/source/nativestructures/Collections.java b/transpiler/src/test/java/source/nativestructures/Collections.java index 11ecc4e7..c1a9ec9d 100644 --- a/transpiler/src/test/java/source/nativestructures/Collections.java +++ b/transpiler/src/test/java/source/nativestructures/Collections.java @@ -265,6 +265,10 @@ public class Collections implements Cloneable, Serializable { dq.addLast("a"); dq.addLast("b"); dq.addFirst("c"); + dq.remove(); + dq.addFirst("c"); + dq.removeFirst(); + dq.addFirst("c"); trace.push("" + dq.isEmpty());