Eclipse JDT разрешает связывание, не работающее с копией ASTNode - PullRequest
0 голосов
/ 30 июня 2019

У меня есть код, в котором я заменяю логическое выражение его отрицательной формой.Мол, заменив 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 - привязки теряются после копирования поддерева .Но никто, казалось, не ответил на это.Так что я все равно отправляю свой вопрос.

...