java - 如何确定 Eclipse JDT 中方法或字段的修饰符?

标签 java abstract-syntax-tree visitor-pattern eclipse-jdt modifier

我正在为 Eclipse JDT 编写一些简单的 AST 访问器。我有一个 MethodVisitorFieldVisitor 类,它们都扩展了 ASTVisitor。以 MethodVisitor 为例。在那个类的 Visit 方法(这是一个覆盖)中,我能够找到每个 MethodDeclaration 节点。当我有这些节点之一时,我想查看它的 Modifiers 以查看它是 public 还是 private (也许还有其他修饰符出色地)。有一个名为 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;
    }
}

最佳答案

如文档所述,调用 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
}

关于java - 如何确定 Eclipse JDT 中方法或字段的修饰符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8945169/

相关文章:

Java-Groovy : regex parse text block

parsing - 如何让 ANTLR 输出分层 AST?

algorithm - 如何创建允许语法错误的 AST 解析器?

java - AST如何处理空节点

java - 简化的访客模式

Java ZonedDateTime 和英国夏令时间

Java While 循环不执行

c++ - 使用枚举和开关代替访问者模式

java - 为什么没有 getFirst(iterable) 方法?

c# - 穷举搜索/生成表达式树的每个组合