2009-09-03 11 views
1

J'apprends à faire un ASTVisitor pour un projet, j'ai donc commencé à utiliser Eclipse, qui a une API complète pour cela.ASTVisitor dans Eclipse

J'ai téléchargé le Packed Exemple de projet sur ce site: http://www.eclipse.org/articles/article.php?file=Article-JavaCodeManipulation_AST/index.html

Mais je compris que les codes ne sont pas une méthode main(), mais je suis en mesure d'exécuter le programme! Quelqu'un sait pourquoi? [qn 1]

Cependant, les codes semblent trop compilés pour fonctionner, et les instructions pour faire sth basic ne sont pas très claires.

donc Je suis aussi allé à regarder ceci: http://www.vogella.de/articles/EclipsePreferences/article.html

Tout le monde sait comment puis-je écrire une méthode principale pour appeler exécuter (événement ExecutionEvent)? - fournir un extrait de code exemple? [qn 2] Je ne sais pas comment utiliser ExecutionEvent ...

J'ai continué à obtenir "Exception dans le fil" principal "java.lang.IllegalStateException: Workspace est fermé." même si je supprime le paramètre pour Execution Event (également besoin d'enlever la partie extends) ou utilise une partie du code dans mon main. Il semble que cela a à voir avec "ResourcesPlugin" dans "IWorkspaceRoot root = ResourcesPlugin.getWorkspace(). GetRoot();". Quelqu'un sait pourquoi? [qn 3]

Merci!

Répondre

3

Je ne suis pas assez confiant pour dire catégoriquement que vous devez écrire un plugin pour utiliser l'ASTVisitor, mais c'est le moyen le plus simple. Trouver un code de plugin simple qui crée un bouton ou quelque chose que vous pouvez appuyer sur et lancer la course de votre code. Il y a un exemple de plugin dans l'environnement de développement du plugin qui fait cela (téléchargez la version appropriée d'Eclipse si vous ne l'avez pas).

Création d'un projet de plugin:

Pour créer un projet de plugin obtenu à l'explorateur de paquet et un clic droit ou ouvrez le menu Fichier. Sélectionnez le premier élément "nouveau ..." cela ouvre un sous-menu dans lequel vous sélectionnez "autre ...". La "nouvelle" boîte de dialogue s'ouvre. Ouvrez le dossier "développement du plug-in" et sélectionnez "projet de plug-in".

alt text

suivante Cliquez plusieurs fois, entrez les informations nécessaires jusqu'à la page suivante:

alt text

Voici le premier échantillon « Bonjour tout le monde » crée un menu dans votre 2ème niveau éclipse. Exécutez l'éclipse de 2ème niveau en allant dans le plugin.xml du nouveau projet, allez dans la vue d'ensemble des onglets.

Vous verrez une page comme ceci:

alt text

cliquez sur "lancer une application Eclipse", et une autre éclipse sera lancé avec votre nouveau plugin et en cours d'exécution. Cliquez sur le bouton d'action de l'échantillon dans cette éclipse de 2ème niveau pour voir une action douce.

Maintenant, vous pouvez aller de l'avant et remplacer le code d'action avec ce que vous voulez. Dans ce cas, créer et démarrer une opération de visite.

Pour créer un ASTVisitor:

Créer une classe qui étend ASTVisitor de sorte que vous pouvez ajouter votre propre code.

  • preVisit (ASTNode) fait un traversal pré-commande de l'AST
  • postVisit (ASTNode) fait un traversal postorder de l'AST
  • visite (...) inspecte un noeud spécifique

Ajoutez quelque chose comme ceci à votre visiteur:

private void startVisit(IFile file) { 
    ICompilationUnit icu = JavaCore.createCompilationUnitFrom(file); 

    ASTParser parser = ASTParser.newParser(AST.JLS3); 
    parser.setResolveBindings(true); 
    parser.setSource(icu); 

    CompilationUnit cu = (CompilationUnit) parser.createAST(null); 
    cu.accept(this); 
} 

Maintenant ajoutez le code à votre action de bouton de presse qui crée votre visiteur un nd appelle cette fonction:

MyVisitor mv = new MyVisitor(); 
mv.startVisit(...); 

Pour obtenir un IFile(ici, vous aurez besoin d'être un plug-in ou vous aurez l'erreur que vous avez signalé):

ResourcesPlugin.getWorkspace().getRoot().getProject(...).getFile(...); 

Remplacez les noms de projet et de fichier (chaînes) appropriés pour l'ellipse.

Maintenant, chaque fois que vous appuyez sur le bouton, le fichier est visité, et le code que vous avez entré sera exécuté aux moments appropriés (il est très judicieux d'imprimer chaque ASTNode avant ou après).

+0

Mais comment créer un IFile? J'ai toujours besoin de "IWorkspaceRoot root = ResourcesPlugin.getWorkspace(). GetRoot();" droite? Mais cela va me faire "Exception dans le fil" principal "java.lang.IllegalStateException: Workspace est fermé." Ai-je besoin de créer un projet de plugin dans eclipse pour le faire? Cos actuellement j'utilise le principal pour courir. Comment créer un projet de plugin? – yeeen

1

Votre projet doit être un projet de plug-in Eclipse, pas un simple projet Java avec une méthode main().

Voici une suggestion: jetez un oeil à l'outil AST View. C'est un outil conçu pour inspecter l'AST. Travailler avec la source, l'exécuter, le déboguer, mettre des points d'arrêt, modifier le code, voir comment cela fonctionne.

Assurez-vous également d'avoir toutes les sources JDT. Il existe de nombreux exemples d'ASTVisitors (assurez-vous de ne pas utiliser de méthodes internes).

+0

Je sais que c'est des années plus tard, mais j'avais du mal à trouver les bons nœuds à visiter pour un validateur Java personnalisé (pensez "utiliser un framework personnalisé correctement"). J'ai passé des heures à tenter des essais et des erreurs avec le débogueur en essayant de trouver les bons nœuds à visiter et ce qu'il faut faire avec cela. Ce plugin fait en sorte que je puisse faire la même chose dans une vue Eclipse et passer une fraction du temps. Merci beaucoup d'avoir signalé cela. –