Eclipse JDT разрешает связывание, не работающее с копией ASTNode
У меня есть код, в котором я заменяю логическое выражение его отрицательной формой. Вроде, замена A || B
с участием !A && !B
, Для этого я использую JDT ASTNode copySubtree()
функция, чтобы сделать копию исходного узла. Затем измените копию и замените оригинал. Но после замены resolveBinding()
метод всегда возвращается null
, Но если я не делаю копию и просто изменяю исходный узел, то resolveBinding()
метод работает отлично. Теперь мне нужно иметь как оригинальный, так и модифицированный узел. Вот почему создание копии любого из них необходимо. Но после создания копии JDT больше не может разрешать привязки внутренней переменной.
Моя функция, которая отрицает простое логическое выражение, дана ниже:
public ASTNode negateLogicalExpression(ASTNode expression) {
AST nAST = expression.getAST();
ASTNode copyExpression = ASTNode.copySubtree(nAST, expression);
copyExpression.accept(new ASTVisitor() {
@Override
public void endVisit(InfixExpression node) {
InfixExpression.Operator op = node.getOperator();
if(op.equals(Operator.LESS)) {
node.setOperator(Operator.GREATER_EQUALS);
} else if(op.equals(Operator.LESS_EQUALS)) {
node.setOperator(Operator.GREATER);
} else if(op.equals(Operator.GREATER)) {
node.setOperator(Operator.LESS_EQUALS);
} else if(op.equals(Operator.GREATER_EQUALS)) {
node.setOperator(Operator.LESS);
} else if(op.equals(Operator.EQUALS)) {
node.setOperator(Operator.NOT_EQUALS);
} else if(op.equals(Operator.NOT_EQUALS)) {
node.setOperator(Operator.EQUALS);
} else if(op.equals(Operator.CONDITIONAL_OR)) {
node.setOperator(Operator.CONDITIONAL_AND);
} else if(op.equals(Operator.CONDITIONAL_AND)) {
node.setOperator(Operator.CONDITIONAL_OR);
}
}
});
return copyExpression;
}
Если кто-то может, пожалуйста, дайте мне знать, если есть способ разрешить привязки переменных из скопированного узла. Также мой вопрос похож на JDT - привязки теряются после копирования поддерева. Но никто, казалось, не ответил на это. Так что я все равно отправляю свой вопрос.