我正在使用AST编写Eclipse代码格式化插件。
我正在尝试使用以下代码创建InfixExpression:
public static InfixExpression makeInfixExpression(final AST t, final ASTRewrite r, final InfixExpression.Operator o,
final Expression left, final Expression right) {
final InfixExpression $ = t.newInfixExpression();
$.setOperator(o);
$.setRightOperand(right.getParent() == null ? right : (Expression) r.createMoveTarget(right));
$.setLeftOperand(left.getParent() == null ? left : (Expression) r.createMoveTarget(left));
return $;
}
使用此命令:
makeInfixExpression(t, r, InfixExpression.Operator.PLUS, asgnThen.getRightHandSide(), otherAsgn)
声明:
final Assignment asgnThen, final Expression otherAsgn;
但根据我发送的参数,我从这个函数返回的InfixExpression是0 + 0而不是3 + 4。 经过一些调试后,我发现它在createMoveTarget部分搞砸了,但是如果我用右边和左边替换它会引发异常.... 我还注意到,如果我使用t.newNumberLiteral创建2个新的lietrals并定义为asgnThen.getRightHandSide和otherAsgn的值,该函数返回一个正确的InfixExpression但问题是它不必是NumberLiteral所以我不能依靠那个。 当插件让我看到预览显示" 3 +"并且没有0 + 0 ......正在发生的事情。
有什么建议吗?
谢谢!
答案 0 :(得分:0)
发现问题,需要将MoveTarget更改为CopyTarget。 我试图将表达式“移动”到条件中的2个位置但这里的“移动”意味着实际移动它而不是复制它意味着我试图将相同的表达式移动到2个位置但是你只有1个他所以你必须用CopyTarget复制它