0

私はJavaクラスのソースコードを持っています。コードを解析し、フィールド変数宣言とそのアクセス修飾子のリストを見つける必要があります。

現在、Eclipse JDT 用のいくつかの単純な AST ビジターを作成しています。宣言された変数を取得する次のコードがあります。

        cu.accept(new ASTVisitor() {
            public boolean visit(VariableDeclarationFragment node) {
                SimpleName name = node.getName();
                System.out.println("Declaration of '"+name+"' at line"+cu.getLineNumber(name.getStartPosition()));
                return false; 
            }

ただし、上記のタイプの VariableDeclarationFragment に関連付けられたメソッドはありません。SingleVariableDeclaration や VariableDeclarationExpression などの他の型もありますが、それらはクラス フィールドに宣言された変数を与えません。メソッドのローカル変数のみを指定します。

フィールド変数のアクセス修飾子を取得できるように、これを行う他の方法があれば教えてください。前もって感謝します!

4

2 に答える 2

1

次のコードを使用すると、修飾子を取得できます。

public boolean visit(VariableDeclarationFragment node) {
                    SimpleName name = node.getName();
                    System.out.println("Declaration of '"+name+"' at line"+cu.getLineNumber(name.getStartPosition()));

                    int modifiers = 0;
                    if (node.getParent() instanceof FieldDeclaration){
                        modifiers = ((FieldDeclaration)node.getParent()).getModifiers();
                    }
                    else if (node.getParent() instanceof VariableDeclarationStatement){
                        modifiers = ((VariableDeclarationStatement)node.getParent()).getModifiers();
                    }
                    return false; 
                }
于 2013-09-10T09:58:28.217 に答える
0

@kajarigd が言ったようにキャストして getModifiers() の戻り値を取得した後、org.eclipse.jdt.core.dom.Modifier クラスの定数とのバイナリ比較を使用して、返された int 値にどの修飾子が含まれているかを判断します。

たとえば、宣言に修飾子 "public" が含まれているかどうかを確認するには、次を使用します。

if ((modifiers & Modifier.PUBLIC) > 0) {
  ...<has the public identifier, and may have others>
}

if ((modifiers & Modifier.PUBLIC) == 0) {
  ...<does NOT have the public identifier, but may have others>
}

if ((modifiers & Modifier.PUBLIC & Modifier.SYNCHRONIZED) > 0) {
  ...<has the public AND the synchronized modifier, and may have others>
}

言い換えれば、int 値の各ビットは、宣言が持つウィッチ修飾子を決定するためにオン (1) またはオフ (0) にされるフラグのようなものです。

(おそらく私の英語には復習が必要です。お気軽にどうぞ...)

于 2016-11-13T00:05:22.497 に答える