1

我有一个代码,我用它的否定形式替换一个逻辑表达式。比如,替换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。但似乎没有人回答它。所以无论如何我都会发布我的问题。

4

0 回答 0