3

EclipseJDT用の簡単なASTビジターをいくつか書いています。それぞれがを拡張するクラスがありMethodVisitorます。たとえば、そのクラスのメソッド(オーバーライド)では、各ノードを見つけることができます。それらのノードの1つがある場合、それがそうであるかどうか(そしておそらく他の修飾子も)を確認するためにそのノードを調べたいと思います。と呼ばれるメソッドがありますが、これを使用して特定のに適用される修飾子のタイプを判別する方法がわかりません。私のコードは以下に掲載されています。進め方について何かアイデアがあれば教えてください。FieldVisitorASTVisitorMethodVisitorVisitMethodDeclarationModifierspublicprivategetModifiers()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()メソッドが持つ修飾子のリストを提供するもう1つのヘルパーメソッドがあります。そうであるかどうかを確認するにはfinal、そのリストを直接チェックインできます。

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