首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IFields用于CompilationUnit中的所有变量

IFields用于CompilationUnit中的所有变量
EN

Stack Overflow用户
提问于 2011-05-14 08:29:31
回答 1查看 1.7K关注 0票数 1

我需要为我的源代码中的所有变量获取、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]]

所以没有发现局部变量..。

//添加--仍然在挣扎:实际上,这不是我所期望的行为。

代码语言:javascript
复制
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呢?

谢谢:)

EN

回答 1

Stack Overflow用户

发布于 2011-05-14 09:51:08

如果您只想获得类型的字段,可以这样做:

代码语言:javascript
复制
for (IType type : iCompilationUnit.getTypes()) {
    for (IField iField : type.getFields()) {
        ....
    }
}

但是,如果要查找所有变量声明(字段和局部变量),最好使用ASTVisitor。这将访问整个AST,您只需为所需的AST元素实现访问方法,在您的情况下,我猜它将是VariableDeclarationFragment的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6000668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档