我试图在MethodInvocation的参数列表中添加参数,它似乎不起作用,我可以删除对象,但我不能看到添加它们。 我的最终目标是采用2个MethodInvocation,它使用不同的参数调用相同的方法,并将其转换为1个具有ConditionalExpression作为参数的MethodInvocation。 例如:
if (A){
System.out.println("hi");
} else {
System.out.println("hey");
}
将转换为:
System.out.println((A ? "hi" : "hey"));
所以如果有人知道如何将参数列表转换为可以放在ConditionalExpression中的1个大表达式,我也会感激。
谢谢!
编辑:抱歉忘记提及它是ecplise的代码格式化插件EDIT2:我正在尝试运行的代码:
final ExpressionStatement thenStmnt=(ExpressionStatement)((Block)node.getThenStatement()).statements().get(0),
elseStmnt=(ExpressionStatement)((Block)node.getElseStatement()).statements().get(0);
MethodInvocation thenMethod=(MethodInvocation)thenStmnt.getExpression(),
elseMethod=(MethodInvocation)elseStmnt.getExpression();
final MethodInvocation method=ast.newMethodInvocation();
method.setName(ast.newSimpleName("add"));
method.arguments().add(0, elseMethod.arguments().get(0));
ast是给定的leagal AST,节点是给定的leagal IfStatement。
答案 0 :(得分:0)
解决了,问题在这里:
method.arguments().add(0, elseMethod.arguments().get(0));
如果您想要或复制已经是原始代码一部分的东西,意味着已经存在于AST中,您必须使用r.createCopyTarget,如下所示:
method.arguments().add(0, r.createCopyTarget(elseMethod.arguments().get(0)));