Java 使用EclipseJDT从变量声明中提取所有变量名

Java 使用EclipseJDT从变量声明中提取所有变量名,java,eclipse,parsing,abstract-syntax-tree,eclipse-jdt,Java,Eclipse,Parsing,Abstract Syntax Tree,Eclipse Jdt,我一直在使用EclipseJDT分析源代码。 目前,我有一个程序,可以获取一些代码,将其转换为AST,然后进行一些注释 现在,我想做的是,对于每个变量声明,获取所有涉及的变量。例如: int a = 10; 这很简单,只是变量a 但在以下情况下: int a = b +c ; 我需要分析正确的部分并提取每个变量。 到目前为止,我所拥有的是: 对于每个变量声明: //get the fragment List<Var

我一直在使用EclipseJDT分析源代码。 目前,我有一个程序,可以获取一些代码,将其转换为AST,然后进行一些注释

现在,我想做的是,对于每个变量声明,获取所有涉及的变量。例如:

int  a = 10;
这很简单,只是变量
a

但在以下情况下:

int a = b +c ;
我需要分析正确的部分并提取每个变量。 到目前为止,我所拥有的是:

对于每个变量声明:

//get the fragment                                   
List<VariableDeclarationFragment> ff = vds_p.fragments();

//foreach fragment, get the name of the variable and the value associated
for(VariableDeclarationFragment f_p : ff){
   SimpleName name = f_p.getName();
   Expression exp  =  f_p.getInitializer();
   ChildPropertyDescriptor exp_prop = f_p.getInitializerProperty();

   System.out.println("name: "+name);
   System.out.println("expression: "+exp);
}                                                                       
我想得到
b
c
。 我知道我可以得到“b+c”字符串并基于操作符应用手动解析,但我想知道是否有一种更自动化的方法使用JDT


谢谢

实际上,您正在寻找具有“org.eclipse.jdt.core.dom.SimpleName”节点的“org.eclipse.jdt.core.dom.IVariableBinding”。您应该创建一个“org.eclipse.jdt.core.dom.ASTVisitor”并重写“org.eclipse.jdt.core.dom.ASTVisitor.visit(SimpleName)”。然后使用ASTVisitor分析变量声明的右侧表达式


您可能会发现“如何查找AST节点”部分很有用。您可能也会发现这个问题很有用。

我会在eclipse.org的JDT论坛上发布这个问题。JDT提交者就在那里,他们会回答这个问题。
int a = b + c ;