Java 如何确定EclipseJDT中方法或字段的修饰符?
我正在为EclipseJDT编写一些简单的AST访问者。我有一个Java 如何确定EclipseJDT中方法或字段的修饰符?,java,abstract-syntax-tree,visitor-pattern,eclipse-jdt,modifier,Java,Abstract Syntax Tree,Visitor Pattern,Eclipse Jdt,Modifier,我正在为EclipseJDT编写一些简单的AST访问者。我有一个MethodVisitor和FieldVisitor类,每个类都扩展了ASTVisitor。以MethodVisitor为例。在那个类'Visitmethod(这是一个覆盖)中,我能够找到每个MethodDeclaration节点。当我有一个这样的节点时,我想查看它的修饰符,看看它是public还是private(也许还有其他修饰符)。有一个名为getModifiers()的方法,但我不清楚如何使用它来确定应用于特定MethodDe
MethodVisitor
和FieldVisitor
类,每个类都扩展了ASTVisitor
。以MethodVisitor
为例。在那个类'Visit
method(这是一个覆盖)中,我能够找到每个MethodDeclaration
节点。当我有一个这样的节点时,我想查看它的修饰符
,看看它是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;
}
}
import java.util.ArrayList;
导入java.util.List;
导入org.eclipse.jdt.core.dom.ASTVisitor;
导入org.eclipse.jdt.core.dom.MethodDeclaration;
公共类MethodVisitor扩展了一个类Visitor{
私有列表方法;
//建造商
公众访客(){
this.methods=new ArrayList();
}
/**
*访问-这会覆盖访客的访问,并允许
*类访问AST中的MethodDeclaration节点。
*/
@凌驾
公共布尔访问(MethodDeclaration节点){
此.methods.add(节点);
//***现在不知道该怎么办***
int mods=node.getModifiers();
返回超级访问(节点);
}
/**
*getMethods-这是获取方法的访问器方法
*这个班级参观过。
*@返回列表
*/
公共列表getMethods(){
返回此.methods;
}
}
如文档所述,调用getModifiers()
的结果是相关常量的“或”位。例如,如果您想确定该方法是否为final
,您可以使用:
int modifiers = node.getModifiers();
if (modifiers & Modifier.FINAL != 0) {
// It's final
}
或者您可以使用修饰符
类中的方便方法:
int modifiers = node.getModifiers();
if (Modifier.isFinal(modifiers)) {
// It's final
}
还有另外一个helper方法
modifiers()
,它提供了方法所具有的修饰符列表。要检查它是否为final
,您可以直接签入该列表
for(Object o : methodDeclarationNode.modifiers()) {
if(o.toString().equals("final")) {
return true;
}
}