繁体   English   中英

AST eclipse,尝试创建一个InfixExpression

[英]AST eclipse, trying to create an InfixExpression

我正在使用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个新的笔尖并定义作为asgnThen.getRightHandSide和otherAsgn的值,该函数将返回适当的InfixExpression,但问题是它不一定是NumberLiteral,所以我不能指望它。 当插件让我看到预览时,显示的是“ 3 +”,没有0 + 0 ....发生了一些奇怪的事情。

有什么建议么?

谢谢!

找到了问题,需要将MoveTarget更改为CopyTarget。 我尝试在条件中将表达式“移动”到2个位置,但是“移动”在这里意味着实际上将其移动而不是复制它,这意味着我试图将相同的表达式移动到2个位置,但是您只有一个他,所以您必须用CopyTarget复制它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM