2014-05-17 57 views
0

我正在使用AST的Eclipse代碼格式化插件。AST日食,試圖創建一個InfixExpression

我想使用此代碼來創建一個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和其他Asgn是該函數返回一個適當的InfixExpression的價值,但問題是它不一定是一個NumberLiteral,所以我不能指望。 當插件讓我看到預覽顯示「3 +」和沒有0 + 0 ....奇怪的東西正在進行。

有什麼建議嗎?

謝謝!

回答

0

發現問題,需要將MoveTarget更改爲CopyTarget。 我把表達式「移動」到條件中的2個位置,但是「移動」在這裏意味着實際移動它而不是複製它,這意味着我試圖將相同的表達式移動到2個位置,但是你只有1個,所以你有將其複製到CopyTarget