2014-05-17 2 views
0

Je travaille sur un plugin de formatage de code Eclipse utilisant l'AST.AST éclipse, essayant de créer une InfixExpression

Je suis en train de créer un InfixExpression en utilisant ce code:

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 $; 
} 

avec cette commande:

makeInfixExpression(t, r, InfixExpression.Operator.PLUS, asgnThen.getRightHandSide(), otherAsgn) 

Déclarations:

final Assignment asgnThen, final Expression otherAsgn; 

Mais le InfixExpression Je reviens de cette fonction est 0 + 0 au lieu de 3 + 4 selon les paramètres que j'ai envoyés. après un débogage, j'ai vu qu'il est foiré dans la partie createMoveTarget mais si je le remplace par juste et à gauche, il lance une exception .... J'ai aussi remarqué que si j'utilise t.newNumberLiteral pour créer 2 nouvelles lietrals et définir la valeur de ce que asgnThen.getRightHandSide et otherAsgn est la fonction renvoie une InfixExpression correcte, mais le problème est qu'il ne doit pas être un NumberLiteral donc je ne peux pas compter sur cela. lorsque le plugin me permet de voir l'aperçu est montre "3 +" et pas de 0 + 0 .... choses wierd en cours.

Des suggestions?

Merci!

Répondre

0

Trouvé le problème, nécessaire pour modifier le MoveTarget à CopyTarget. Je vais "déplacer" l'expression à 2 places dans le conditionnel mais "Déplacer" signifie ici le déplacer et ne pas le copier ce qui signifie que j'ai essayé de déplacer la même expression à 2 endroits mais vous en avez seulement 1 pour le copier avec CopyTarget

Questions connexes