Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除方法中源自Java JDT解析器中的字段变量的所有调用_Java_Eclipse_Abstract Syntax Tree_Eclipse Jdt - Fatal编程技术网

删除方法中源自Java JDT解析器中的字段变量的所有调用

删除方法中源自Java JDT解析器中的字段变量的所有调用,java,eclipse,abstract-syntax-tree,eclipse-jdt,Java,Eclipse,Abstract Syntax Tree,Eclipse Jdt,我想检测并消除类中来自类类型/字段声明的方法的所有调用。我试图删除FieldDeclaration节点,但没有任何帮助。我试着胡乱摆弄绑定,但找不到任何有用的东西 比如说, import java.util.ArrayList; public class TestList implements Closeable { ArrayList<String> arrayListOne = new ArrayList<String>(); p

我想检测并消除类中来自类类型/字段声明的方法的所有调用。我试图删除
FieldDeclaration
节点,但没有任何帮助。我试着胡乱摆弄绑定,但找不到任何有用的东西

比如说,

    import java.util.ArrayList;

    public class TestList implements Closeable {

    ArrayList<String> arrayListOne = new ArrayList<String>();

    public void add2arrayList() {
      String arg01; 
      boolean b1; 
      b1 = arrayListOne.add((arg01 = new String())); 

      return; 
    }
}
import java.util.ArrayList;
公共类TestList实现了Closeable{
ArrayList ArrayList=新的ArrayList();
public void add2arrayList(){
字符串arg01;
布尔b1;
b1=arrayListOne.add((arg01=newstring());
返回;
}
}
如果这是进入JDT解析器的代码,我不希望在输出中看到“add”调用


任何关于如何解决这个问题的意见都将受到高度赞赏。我来自计算机科学的一个非常不同的领域,因此我对
JDT
的了解非常业余,非常欢迎详细的解释。

在访问AST之前存储对您的成员
FieldDeclaration
s的绑定引用,并使用它们来比较
SimpleName
节点绑定

有关详细方法,请参阅以下链接:


如果您通过
ASTVisitor
浏览AST,则
add
(属于
arrayListOne.add(…
)将在
visit(SimpleName节点)
中进行访问,
node.resolveBinding()
将是
IMethodBinding
的一个实例(其方法类似于
getDeclaringClass()
)。但是您必须显示代码,以便有人能在您遇到困难时帮助您。谢谢!我可以按照您建议的方式进行操作。您认为从getDeclaringClass()可以方法,我可以推断它是否源自字段变量?如果是,您有什么建议吗?我将尝试在这里合并一些更相关的代码。您是指字段
arrayListOne
?我猜在
arrayListOne.add中(…
节点
arrayListOne
add
将具有相同的父节点。这里节点
arrayListOne
的绑定实例是
IVariableBinding
,它具有方法
isField()
。我使用了getParent()但遗憾的是,这似乎没有什么帮助。我无法从MethodInvocation/MethodDeclaration中的任何位置访问声明变量