Ecrire un plugin simple pour eclipse CDT (C++)
(write a simple plugin for eclipse CDT)


Le développement d'un plugin eclipse, c'est encore passablement rustique. Heureusement qu'il y a des projets open source pour s'inspirer! La récupération des objets projet et répertoire n'était pas triviale.

Téléchargements :  test-popup_1.0.zip (dézipper dans le répertoire d'installation d'eclipse) - source: test-popup_src_1.0.zip

Spécification

Il s'agit d'ajouter dans eclipse une action pour lancer une commande système (shell script) sur le projet courant.

Pour fixer les idées, la commande système sera dans le répertoire du workspace courant et s'appelera :
action
Pour être utile, le plugin enverra comme arguments :
  1. le chemin complet du fichier ou du répertoire
  2. le chemin complet du projet
Dans le cas d'un projet, le plugin n'enverra qu'un seul argument : le chemin complet du projet.

J'ai implémenté une entrée dans le menu déroulant du package explorer. Un bouton dans la barre d'outils n'était pas approprié, pour la raison suivante. Il n'y a pas de notion de projet courant dans eclipse. Il y a un ou des projects ouverts. Il peut y avoir une icone projet sélectionnée dans le gestionnaire. A partir de là eclipse déduit une sorte de projet courant.

Il est donc tout indiqué d'ajouter une entrée dans le menu déroulant du package explorer. Le bonus c'est qu'on peut aussi lancer une action sur un répertoire ou un fichier. La sélection simple ou multiple est possible .

J'ai développé avec eclipse 3.2 et un projet Java. Il n'y a cependant aucune dépendance par rapport à la notion de projet Java. Cela devrait marcher avec n'importe quelle nature de projet.

Je dois quand même tester avec eclipse 3.0 et CDT . Ca marche .
eclipse Version: 3.0.2 - Build id: 200503110845
CDT verson 2.1.1

Trouver la documentation

the Eclipse Project FAQ and online documentation. - http://help.eclipse.org/help31/index.jsp
Plug-ins and bundles

CDT Developer Documentation

Prendre "Example Plug-ins" dans Other downloads for 3.1 dans http://www.eclipse.org/downloads/index.php

Développement

En regardant dans l'interface IProject
http://help.eclipse.org/help31/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IProject.html
je trouve ce qu'il faut faire :
Ipath path currentProject.getDescription().getLocation();
Mais comment trouver le projet courant ?
Réponse: il n'y a pas de notion de projet
courant dans eclipse !

La difficulté est de retrouver la resource (fichier ou répertoire) à partir de la sélection. Je n'aurais rien pu faire sans étudier le source de l'excellent plugin PMD :
http://cvs.sourceforge.net/viewcvs.py/pmd/pmd-eclipse/src/net/sourceforge/pmd/eclipse/actions/PMDCheckAction.java?rev=1.11&view=auto

Les trois interfaces à spécifier en tant que "object class" dans l'onglet extensions de plugin.xml :
IProject, IFolder, IFile
Là il faut absolument dérouler la valeur true pour le champ adaptable.

Trucs et utilitaires

Pour tester j 'ai utilisé un fichier search contenant ceci (ne pas oublier de le rendre exécutable ):
gvim $*


Pour chercher où se trouve un package ( par exemple org.eclipse.ui.texteditor ) ou une classe :
for f in **/*.jar ; do ;
echo "=== $f ===" ;
unzip -l $f | grep org.eclipse.ui.texteditor ;
done