Я пишу подключаемый модуль Eclipse, который использует ASTParser
JDT AST для анализа метода. Я ищу в этом методе создание объекта определенного типа.
Когда я нахожу 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
? Как я могу получить информацию о привязке?