J'écris un plug-in Eclipse qui utilise le protocole ASTParser
de JDT AST pour analyser une méthode. Je cherche dans cette méthode pour la création d'un type particulier d'objet.Pourquoi resolveBinding() renvoie-t-il une valeur nulle même si j'ai défini ResolveBindings (true) sur mon ASTParser?
Lorsque je trouve un ClassInstanceCreation
, j'appelle le getType()
pour voir quel type est instancié. Je veux être sûr que le type entièrement résolu traité ici est celui que je pense qu'il est, donc je dis l'objet Type
résultant à resolveBinding()
. Je reçois null
même s'il n'y a pas d'erreurs de compilation et même si j'ai appelé setResolveBindings(true)
sur mon ASTParser
. J'ai donné mon ASTParser
(via setSource()
) le ICompilationUnit
qui contient ma méthode, donc l'analyseur a accès au contexte entier de l'espace de travail.
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());
Pourquoi resolveBinding()
retour null
? Comment puis-je obtenir les informations de liaison?
J'ai un cas similaire où le type est K_COMPILATION_UNIT mais toujours resolveBinding() renvoie null. Une idée pourquoi? – Dana
La réponse semble être: http://stackoverflow.com/a/5803778/48369 – Dana
Juste un commentaire tardif sur * "pourquoi ce serait le cas" *: si vous parser quelque chose de plus petit qu'une unité de compilation alors vous n'avez pas importer des instructions, et donc la résolution obligatoire est susceptible d'échouer. –