3

Eclipse JDTの簡単なAST訪問者を書いています。私はそれぞれMethodVisitorFieldVisitorクラスを持ち、それぞれがASTVisitorを拡張しています。たとえば、MethodVisitorを取る。そのクラスのVisitメソッド(オーバーライド)では、MethodDeclarationノードのそれぞれを見つけることができます。私がこれらのノードの1つを持っているとき、Modifiersを見て、それがpublicprivate(そしておそらく他の修飾子であるかどうか)を調べたいと思います。 getModifiers()というメソッドがありますが、これを使用して、特定のMethodDeclarationに適用されている修飾子のタイプを判断する方法は私には不明です。私のコードは以下に掲載されています。進める方法があれば教えてください。ドキュメントの状態としてEclipse JDTのメソッドまたはフィールドの修飾子を特定する方法は?

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; 
    } 
} 

答えて

11

は、getModifiers()を呼び出した結果は、関連するModifier定数のビット単位の「か」です。

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

それとも、Modifierクラスの便利なメソッドを使用することができます:あなたは方法は、あなたが使用したいfinalであるかどうかを知りたいのであれば、たとえば、

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

ありもう1つのヘルパーメソッドmodifiers()には、メソッドに含まれる修飾子のリストが表示されます。 finalかどうかを確認するには、そのリストを直接チェックインすることができます。

for(Object o : methodDeclarationNode.modifiers()) { 
    if(o.toString().equals("final")) { 
     return true; 
    } 
} 
関連する問題