Почему resolBinding () возвращает значение NULL, даже если на моем ASTParser установлен setResolveBindings (true)? - PullRequest
6 голосов
/ 13 апреля 2010

Я пишу подключаемый модуль Eclipse, который использует JDT AST ASTParser для анализа метода. Я ищу в этом методе создание объекта определенного типа.

Когда я нахожу ClassInstanceCreation, я вызываю getType(), чтобы увидеть, какой тип создается. Я хочу быть уверен, что рассматриваемый полностью разрешенный тип - это тот, который мне кажется, поэтому я сообщаю результирующему объекту Type значение resolveBinding(). Я получаю null обратно, хотя ошибок компиляции нет, и хотя я набрал setResolveBindings(true) на своем ASTParser. Я дал своему ASTParser (через setSource()) ICompilationUnit, который содержит мой метод, так что парсер имеет доступ ко всему контексту рабочей области.

final IMethod method = ...;
final ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setResolveBindings(true);
parser.setSource(method.getCompilationUnit());
parser.setSourceRange(method.getSourceRange().getOffset(), method.getSourceRange().getLength());
parser.setKind(ASTParser.K_CLASS_BODY_DECLARATIONS);
final TypeDeclaration astRoot = (TypeDeclaration) parser.createAST(null);
final ClassInstanceCreation classInstanceCreation = walkAstAndFindMyExpression(astRoot);
final Type instantiatedType = classInstanceCreation.getType();
System.out.println("BINDING: " + instantiatedType.resolveBinding());

Почему resolveBinding() возвращает null? Как я могу получить обязательную информацию?

1 Ответ

5 голосов
/ 13 апреля 2010

Спрятано в нижней части обзора ASTParser.setKind(), тщательно скрытого от людей, устраняющих неисправности resolveBinding() и setResolveBindings(), - утверждение

Информация о привязке вычисляется только тогда, когда kind равно K_COMPILATION_UNIT.

(из онлайн Javadoc )

Я не понимаю, почему это так, но кажется, что он достаточно ясно указывает на то, что должно быть другим!

...