2010-02-02 4 views
3

Je souhaite connaître le numéro de ligne où un appel est référencé à l'aide d'AST api dans un package. Comment puis-je faire cela?Traverser le nœud AST

+0

ce paquet, et quelle API? –

+0

J'ai l'unité de compilation du projet. maintenant je veux rechercher une référence de méthode particulière dans cette unité usint AST (arbre de syntaxe abstraite) api – Steven

Répondre

2

Vous avez une illustration sur la façon de rechercher dans la méthode d'un CompilationUnit dans ce papercut article:

for (ICompilationUnit unit : mypackage.getCompilationUnits()) { 
IType[] types = unit.getTypes(); 
for (int i = 0; i < types.length; i++) { 
    IType type = types[i]; 
    IMethod[] methods = type.getMethods(); 
  • Si la méthode est un ASTNode, vous pouvez utiliser la fonction ASTNode.getStartPosition().
  • Si l'unité de compilation de ce IMember est un CompilationUnit, vous pouvez l'utiliser dans le CompilationUnit.getLineNumber(position)
+0

êtes-vous sûr de son getoccurencecount pour obtenir la position? – Steven

2

CompilationUnit.getLineNumber (position int)

position est relative à l'objet CompilationUnit

Documentation:

renvoie le numéro de ligne correspondant à la position de caractère de source donnée dans l'original chaîne source. La ligne initiale de l'unité de compilation est numérotée 1 et chaque ligne s'étend via le dernier caractère du délimiteur de fin de ligne . La toute dernière ligne s'étend jusqu'à la fin de la chaîne source et n'a pas de délimiteur de ligne . Par exemple, la source chaîne classe A \ n {\ n} a 3 lignes correspondant au caractère inclusif plages [0,7], [8,9] et [10,10]. Renvoie -1 pour une position de caractère qui ne correspond à aucune ligne source , ou -2 si aucun numéro de ligne n'est disponible pour cette unité de compilation .

+0

comment suis-je supposé connaître la position de la méthode? – Steven

+0

la position est relative à CompilationUnit. – nanda

+0

J'ai besoin de numéro de ligne réel dans le fichier source – Steven

Questions connexes