Java 如何在JDT/ASTVisitor()中存储值?

Java 如何在JDT/ASTVisitor()中存储值?,java,abstract-syntax-tree,eclipse-jdt,Java,Abstract Syntax Tree,Eclipse Jdt,我有一段代码,可以检测源代码中方法调用的开始位置和长度,如下所示 我需要将这些数据存储在ASTVisitor()之外,但是使用final int时,我得到了一个错误 如何在ASTVisitor()中存储值 将starPosition和length变量声明为类的静态成员变量。然后,可以从ASTVisitor内部类中访问。将setPositionFinder方法更改为static也可能是首选,以便可以以静态方式调用它 public void setPositionFinder(String meth

我有一段代码,可以检测源代码中方法调用的开始位置和长度,如下所示

我需要将这些数据存储在ASTVisitor()之外,但是使用final int时,我得到了一个错误

如何在ASTVisitor()中存储值

将starPosition和length变量声明为类的静态成员变量。然后,可以从ASTVisitor内部类中访问。将
setPositionFinder
方法更改为static也可能是首选,以便可以以静态方式调用它

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