Estoy escribiendo un complemento de Eclipse que usa JDT AST ASTParser
para analizar un método. Estoy buscando dentro de ese método para la creación de un tipo particular de objeto.¿Por qué resolveBinding() devuelve null a pesar de que establecí ResolucionesResultadas (verdadero) en mi ASTParser?
Cuando encuentro un ClassInstanceCreation
, llamo al getType()
para ver de qué tipo se está creando una instancia. Quiero estar seguro de que el tipo totalmente resuelto que se trata allí es el que creo que es, así que le digo al objeto resultante Type
al resolveBinding()
. Recibo null
a pesar de que no hay errores de compilación y aunque llamé al setResolveBindings(true)
en mi ASTParser
. Di mi ASTParser
(a través de setSource()
) el ICompilationUnit
que contiene mi método, por lo que el analizador tiene acceso a todo el contexto del espacio de trabajo.
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());
¿Por qué resolveBinding()
retorno null
? ¿Cómo puedo obtener la información vinculante?
Tengo un caso similar donde el tipo es K_COMPILATION_UNIT pero aún resolveBinding() devuelve nulo. ¿Alguna idea de por qué? – Dana
La respuesta parece ser: http://stackoverflow.com/a/5803778/48369 – Dana
Solo un último comentario sobre * "por qué este sería el caso" *: si analiza algo más pequeño que una unidad de compilación, entonces no tiene importar declaraciones, y por lo tanto, la resolución vinculante es probable que falle. –