FunctionCallExpr extends Expr { @Override public FunctionCallExpr clone() { return new FunctionCallExpr(callee, args.stream().map(x -> x.clone()).collect(Collectors.toList())); } FunctionCallExpr(String callee, List<Expr> args);  FunctionCallExpr(String callee, Expr... args); String getCallee(); void setCallee(String callee); List<Expr> getArgs(); int getNumArgs(); Expr getArg(int index); void setArg(int index, Expr expr); void removeArg(int index); @Override void accept(IAstVisitor visitor); @Override FunctionCallExpr clone(); @Override boolean hasChild(IAstNode candidateChild); @Override Expr getChild(int index); @Override void setChild(int index, Expr expr); @Override int getNumChildren();  }
@Test public void testClone() throws Exception { FunctionCallExpr fce2 = fce.clone(); assertEquals(fce.getText(), fce2.getText()); assertFalse(fce == fce2); }