0

次のように、ソース内のメソッドの呼び出しの開始位置と長さを検出するコードがあります。

これらのデータを ASTVisitor() の外に格納する必要がありますが、final int を使用するとエラーが発生しました。

ASTVisitor() 内に値を格納するにはどうすればよいですか?

public void setPositionFinder(String methodName) throws JavaModelException
{
    //findMethod(methodName);
    IType type = this.javaProject.findType(this.className);
    ICompilationUnit unit = type.getCompilationUnit();
    ASTParser parser = ASTParser.newParser(AST.JLS3);
    parser.setSource(unit);
    parser.setResolveBindings(true);
    CompilationUnit cunit = (CompilationUnit) parser.createAST(null);
    //ASTNode root = parser.createAST(null);

    final String name = this.newMethodName;
    final int startPosition = -1;
    final int length = -1;

    cunit.accept(new ASTVisitor() {
        public boolean visit(MethodInvocation methodInvocation)
        {
            String methodName = methodInvocation.getName().toString();
            System.out.println(methodName);
            if (methodName.equals(name))
            {
                // ERROR!
                startPosition = methodInvocation.getStartPosition();
                length = methodInvocation.getLength();
                System.out.printf("startPosition %d - Length %d", startPosition, length);       
            }
            return false;
        }
    });
}

ここに画像の説明を入力

4

1 に答える 1

1

starPosition変数とlength変数をクラスの静的メンバー変数として宣言します。その後、ASTVisitor 内部クラス内からアクセスできます。メソッドを static に変更してsetPositionFinder、静的な方法で呼び出せるようにすることもできます。

于 2013-01-17T05:59:46.550 に答える