Как я могу хранить значения внутри JDT/ASTVisitor()?

У меня есть код, который определяет начальную позицию и длину вызова метода в источнике следующим образом.

Мне нужно хранить эти данные вне 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;
        }
    });
}

1 ответ

Решение

Объявите переменные starPosition и length как статические переменные-члены класса. Затем вы можете получить доступ изнутри внутреннего класса ASTVisitor. Изменение setPositionFinder Метод static также может быть предпочтительным, так что он может быть вызван статическим способом.

Другие вопросы по тегам