Я пишу подключаемый модуль 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
? Как я могу получить обязательную информацию?