我需要获取源代码中所有变量的IField 或 IJavaElement 引用。我使用插件,得到一个 ICompilationUnit,我可以从中读取所有顶级对象:
for(IJavaElement i:unit.getTypes()[0].getChildren())
或者
for(IJavaElement i:unit.getAllTypes())
如何访问局部变量?我试图将 ICompilationUnit 解析为 CompilationUnit,在那里我可以获得每个 field 的 ASTNode,但是我无法将它转换为 IField。有任何想法吗?
//编辑:例如:对于一个类:
公共类测试{
诠释全球1;诠释全球2;无效 a() { global1 = 4; 诠释本地1;int local2 = 5; }
}
我打电话
for (IType type : 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 [in src [in testowy]]]] int global1 int global2 void a() iField int global1 [in Test [in [Working copy] Test.java [in [在 src [in testowy]]]]] iField int global2 [in Test [in [Working copy] Test.java [in [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?
谢谢 :)