Как я могу хранить значения внутри 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 также может быть предпочтительным, так что он может быть вызван статическим способом.