Итак, в моем классе компиляторов мы используем JDT для представления нашего подмножества Java. У меня уже есть работа, и я подумал, что было бы неплохо реализовать приращение/декремент, понизив ее до назначения. Я понял, набрав это, потому что выражение, увеличивающееся, может иметь эффект, это не действует на 100%. Тем не менее я хочу сделать что-то подобное для петель.checkNewChild вызывает ошибку при понижении кода JDT
Так что у меня этот код
@Override
public boolean visit(final PostfixExpression node) {
//in this we lower an inc/dec expression to an assignment
NumberLiteral one = node.getAST().newNumberLiteral();
one.setToken(new Integer(1).toString());
InfixExpression ie = node.getAST().newInfixExpression();
ie.setLeftOperand(node.getOperand());
ie.setRightOperand(one);
if(node.getOperator() == PostfixExpression.Operator.INCREMENT) {
ie.setOperator(InfixExpression.Operator.PLUS);
} else {
ie.setOperator(InfixExpression.Operator.MINUS);
}
Assignment a = node.getAST().newAssignment();
a.setLeftHandSide(node.getOperand());
a.setRightHandSide(ie);
//finally just lower the increment to the assignment
return this.visit(a);
}
, но когда он выполняет, я получаю сообщение об ошибке, как только я пытаюсь установить левый операнд выражения инфиксной.
ошибка
java.lang.IllegalArgumentException
at org.eclipse.jdt.core.dom.ASTNode.checkNewChild(ASTNode.java:2087)
at org.eclipse.jdt.core.dom.ASTNode.preReplaceChild(ASTNode.java:2149)
at org.eclipse.jdt.core.dom.InfixExpression.setLeftOperand(InfixExpression.java:437)
...
Так моя догадка, что дети должны быть уникальными. Это так? Если это так, то как снижается реализация? Если это не так, что здесь происходит?