Sto scrivendo un plug-in Eclipse che utilizza JDT AST's ASTParser
per analizzare un metodo. Sto guardando all'interno di quel metodo per la creazione di un particolare tipo di oggetto.Perché resolveBinding() restituisce null anche se setResolveBindings (true) sul mio ASTParser?
Quando trovo un ClassInstanceCreation
, chiamo getType()
su di esso per vedere quale tipo viene istanziato. Voglio essere sicuro che il tipo completamente risolto che viene trattato sia quello che penso sia, quindi dico all'oggetto Type
risultante a resolveBinding()
. Ricevo null
indietro anche se non ci sono errori di compilazione e anche se ho chiamato setResolveBindings(true)
sul mio ASTParser
. Ho dato il mio ASTParser
(via setSource()
) allo ICompilationUnit
che contiene il mio metodo, quindi il parser ha accesso all'intero contesto dell'area di lavoro.
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());
Perché resolveBinding()
ritorno null
? Come posso ottenere le informazioni vincolanti?
Ho un caso simile in cui il tipo è K_COMPILATION_UNIT ma risolvendo comunqueBinding() restituisce null. Qualche idea del perché? – Dana
La risposta sembra essere: http://stackoverflow.com/a/5803778/48369 – Dana
Solo un commento in ritardo su * "perché questo sarebbe il caso" *: se si analizza qualcosa di più piccolo di un'unità di compilazione, allora non si ha dichiarazioni di importazione, e quindi è probabile che la risoluzione vincolante fallisca. –