0

我有一个java类源代码。我需要解析代码并找出字段变量声明列表及其访问修饰符。

目前我正在为 Eclipse JDT 编写一些简单的 AST 访问器。我有以下代码来获取声明的变量:

        cu.accept(new ASTVisitor() {
            public boolean visit(VariableDeclarationFragment node) {
                SimpleName name = node.getName();
                System.out.println("Declaration of '"+name+"' at line"+cu.getLineNumber(name.getStartPosition()));
                return false; 
            }

但是没有与上述类型 VariableDeclarationFragment 关联的方法。还有其他类型,如 SingleVariableDeclaration 和 VariableDeclarationExpression,但它们不给类字段声明变量。它们只给出方法局部变量。

请让我知道是否有其他方法可以做到这一点,以便我可以获得字段变量的访问修饰符。提前致谢!

4

2 回答 2

1

借助以下代码,可以检索修饰符:

public boolean visit(VariableDeclarationFragment node) {
                    SimpleName name = node.getName();
                    System.out.println("Declaration of '"+name+"' at line"+cu.getLineNumber(name.getStartPosition()));

                    int modifiers = 0;
                    if (node.getParent() instanceof FieldDeclaration){
                        modifiers = ((FieldDeclaration)node.getParent()).getModifiers();
                    }
                    else if (node.getParent() instanceof VariableDeclarationStatement){
                        modifiers = ((VariableDeclarationStatement)node.getParent()).getModifiers();
                    }
                    return false; 
                }
于 2013-09-10T09:58:28.217 回答
0

在像@kajarigd 所说的那样转换并获得 getModifiers() 的返回之后,使用与 org.eclipse.jdt.core.dom.Modifier 类的常量进行二进制比较来确定返回的 int 值中有哪些修饰符。

例如,要知道声明上是否有修饰符“public”,请使用:

if ((modifiers & Modifier.PUBLIC) > 0) {
  ...<has the public identifier, and may have others>
}

if ((modifiers & Modifier.PUBLIC) == 0) {
  ...<does NOT have the public identifier, but may have others>
}

if ((modifiers & Modifier.PUBLIC & Modifier.SYNCHRONIZED) > 0) {
  ...<has the public AND the synchronized modifier, and may have others>
}

换句话说,int 值的每一位都像是一个打开 (1) 或关闭 (0) 的标志,以确定声明具有的女巫修饰符。

(可能我的英语需要复习,请随意...)

于 2016-11-13T00:05:22.497 回答