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