Eclipse JDT解决绑定不适用于ASTNode的副本

时间:2019-06-30 10:25:24

标签: java abstract-syntax-tree eclipse-jdt variable-binding

我有一个代码,该代码将逻辑表达式替换为其取反形式。喜欢, 将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 - Bindings are lost after copying subtree。但是似乎没有人回答。所以我还是要发布我的问题。

0 个答案:

没有答案