3

我正在为 Eclipse JDT 编写一些简单的 AST 访问者。我有一个MethodVisitorFieldVisitor类,每个都扩展了ASTVisitor. 举个MethodVisitor例子。在那个类的Visit方法(这是一个覆盖)中,我能够找到每个MethodDeclaration节点。当我拥有其中一个节点时,我想查看它Modifiers是否是publicprivate(也许还有其他修饰符)。有一种方法称为getModifiers(),但我不清楚如何使用它来确定应用于特定修饰符的类型MethodDeclaration。我的代码发布在下面,如果您有任何想法如何继续,请告诉我。

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jdt.core.dom.ASTVisitor;
import org.eclipse.jdt.core.dom.MethodDeclaration;

public class MethodVisitor extends ASTVisitor {

    private List<MethodDeclaration> methods;

    // Constructor(s)
    public MethodVisitor() {
        this.methods = new ArrayList<MethodDeclaration>();
    }

    /**
     * visit - this overrides the ASTVisitor's visit and allows this
     * class to visit MethodDeclaration nodes in the AST.
     */
    @Override
    public boolean visit(MethodDeclaration node) {
        this.methods.add(node);

            //*** Not sure what to do at this point ***
            int mods = node.getModifiers();

        return super.visit(node);
    }

    /**
     * getMethods - this is an accessor methods to get the methods
     * visited by this class.
     * @return List<MethodDeclaration>
     */
    public List<MethodDeclaration> getMethods() {
        return this.methods;
    }
}
4

2 回答 2

11

正如文档所述,调用的结果是相关常量getModifiers()的按位“或” 。Modifier因此,例如,如果您想了解该方法是否是final您将使用的:

int modifiers = node.getModifiers();
if (modifiers & Modifier.FINAL != 0) {
    // It's final
}

或者您可以使用Modifier类中的便捷方法:

int modifiers = node.getModifiers();
if (Modifier.isFinal(modifiers)) {
    // It's final
}
于 2012-01-20T17:16:59.127 回答
0

还有一种辅助方法modifiers()可以为您提供方法所具有的修饰符列表。要检查是否是final,您可以直接检查该列表。

for(Object o : methodDeclarationNode.modifiers()) {  
   if(o.toString().equals("final")) {
      return true;
   }
}
于 2017-08-17T14:34:33.667 回答