我需要为我的源代码中的所有变量获取、IField或IJavaElement引用。我使用插件,获得一个ICompilationUnit,从它可以读取所有顶级对象,使用:
for( IJavaElement i:unit.getTypes().getChildren() )
或
( IJavaElement i:unit.getAllTypes() )
如何访问局部变量?我试图将ICompilationUnit解析为CompilationUnit,在这里,可以得到每个字段的ASTNode,但是则无法将其转换为IField。有什么想法吗?
//编辑:例如:对于一个类:
公共类考试{ int global1;int global2;void a() { global1 = 4;int local1;int local2 = 5;} }
我打电话
for (IType类型: unit.getTypes()) { System.out.println("itype "+ type );for (IField iField : type.getFields()) { System.out.println("iField "+iField);}
产出如下:
itype class Test [in Working copy Test.java [in [in src in testowy] int global1 int global2 void () iField int global1 [in Working copy Test.java [in [in src in testowy]] iField int global2 [in Working copy Test.java [in [in src in testowy]]
所以没有发现局部变量..。
//添加--仍然在挣扎:实际上,这不是我所期望的行为。
for( IMethod i:unit.getAllTypes()[0].getMethods() )
{
System.out.println("index to h:"+h+" type "+i.getSource()+" name: "+i.getElementName());
h++;
int o =0;
for( IJavaElement j: i.getChildren() )
{
System.out.println("index to o: "+o+j+" type "+j.getElementType()+" name: "+j.getElementName());
o++;
}
}我希望这段代码能够找到所有的方法(有效),并从方法中获取所有局部变量(这是不起作用的)。它从不与字段一起进入循环。它正确地打印函数声明,所以我确信它能看到所有的变量.
至于使用INodes,我可以访问所有节点,但是如何将类型从Node更改为IField/IJavaElement呢?
谢谢:)
发布于 2011-05-14 09:51:08
如果您只想获得类型的字段,可以这样做:
for (IType type : iCompilationUnit.getTypes()) {
for (IField iField : type.getFields()) {
....
}
}但是,如果要查找所有变量声明(字段和局部变量),最好使用ASTVisitor。这将访问整个AST,您只需为所需的AST元素实现访问方法,在您的情况下,我猜它将是VariableDeclarationFragment的。
https://stackoverflow.com/questions/6000668
复制相似问题