2014-05-17 1 views
0

AST를 사용하여 Eclipse 코드 형식화 플러그인을 작성 중입니다.AST Eclipse, InfixExpression을 작성하려고합니다.

이 코드 사용하여 InfixExpression를 만들기 위해 노력하고 있어요 :

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

선언 :

final Assignment asgnThen, final Expression otherAsgn; 

하지만에서 다시 점점 오전 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 $; 
} 

을 이 함수는 내가 보낸 매개 변수에 따라 3 + 4 대신 0 + 0입니다. 일부 디버깅 후 createMoveTarget 부분이 엉망이된다는 것을 알았지 만 그냥 바꿔서 예외를 던지면 .... t.newNumberLiteral을 사용하여 2 개의 새로운 lietrals를 만들고 무엇을 asgnThen.getRightHandSide 및 otherAsgn 함수가 적절한 InfixExpression을 반환하는지에 대한 값을 정의하십시오. 그러나 문제는 NumberLiteral 일 필요가 없으므로 문제가되지 않습니다. 플러그인에서 미리보기를 볼 수있게하면 "3 +"이고 0 + 0 ... wierd는 계속 진행됩니다.

제안 사항?

감사합니다.

답변

0

MoveTarget을 CopyTarget으로 변경해야하는 문제가 있습니다. 조건부에서 표현식을 "이동"하는 것은 간단하지만 여기에서 "이동"은 실제로 그것을 이동하고 복사하지 않음을 의미합니다. 이는 동일한 표현식을 2 곳으로 이동하려고했지만 그 중 1 명만 가지고 있으므로 의미가 있습니다. CopyTarget을 사용하여 복사하려면