Développement de plugins pour la création d'un éditeur Eclipse basé sur Xtext

Georges KEMAYO

Cet article est la suite de « Introduction à Xtext : créer son propre DSL ». L'intérêt de cet article est de rendre exploitable un DSL que vous avez créé, en lui proposant un IDE. Notre objectif est donc de vous présenter un processus permettant d'étendre l'éditeur Eclipse-Xtext pour lui faire reconnaitre votre DSL. Ainsi, il pourrait désormais être possible de créer des projets dédiés au nouveau DSL, tout comme cela se fait lorsqu'on crée des Java Project sur Eclipse. Pour faire cet enseignement, nous nous appuyons le DSL exemple Madsl développé dans l'article précédent.

Notions entrant en jeu : notions de plugins, développement de features, exportation d'un feature project, extension d'Eclipse…

Réagissez à cet article en faisant vos remarques ici : Commentez

- Titre : Développement de plugins pour la création d'un éditeur Eclipse basé sur Xtext

- Auteur : Georges KEMAYO

- Parution : 16 janvier 2012

- Mise à jour : 21 mars 2020

- Licence : Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur (Georges KEMAYO). La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur

Sommaire

- I. Rappel sur le développement du DSL « Madsl »

- II. Un feature project pour le rassemblement des plugins projects de « Madsl »

- III. Exportation des plugins du feature project et extension d'Eclipse-Xtext

- III-A. Exportation des plugins du feature project

- III-B. Extension d'Eclipse-Xtext pour la prise en compte du nouveau langage

- IV. Création d'un projet Madsl sur Eclipse-Xtext

- V. Conclusion et perspectives

- VI. Remerciements

I - Rappel sur le développement du DSL « Madsl »

Dans l'article « Introduction à Xtext : créer son propre DSL », nous avons présenté la procédure nécessaire pour mettre en place un DSL. Nous avons pris pour exemple d'application, le développement d'un DSL nommé « Madsl » qui est un langage permettant la saisie d'un code spécifique pour la réalisation d'opérations statistiques telles : le calcul de la moyenne, de la variance, écart type… d'une série statistique. Pour développer ce nouveau langage, nous avons utilisé le framework Xtext développé par le groupe itemis qui l'a intégré à Eclipse. Ce nouveau Eclipse est donc celui que nous appelons Eclipse-Xtext (téléchargeable sur le site web d'itemis). Lors du développement du nouveau DSL, nous avons créé un projet Xtext. Cette création génère trois plugins projects : org.xtext.maDsl, org.xtext.maDsl.generator et org.xtext.maDsl.ui. Les deux plus importants des trois sont : org.xtext.maDsl et org.xtext.maDsl.ui. Le premier permet de développer la grammaire du langage et le deuxième permet d'enrichir l'IDE Eclipse-Xtext de nouvelles vues, commandes, menus… spécifiques au nouveau langage. Pour l'instant, nous ne nous occupons pas de cet enrichissement de l'IDE, mais de l'intégration du nouveau langage à Eclipse-Xtext.

II - Un feature project pour le rassemblement des plugins projects de « Madsl »

Pour étendre Eclipse-Xtext lui permettant de prendre en compte de nouvelles choses, nous devons lui ajouter de nouveau les plugins. Notamment dans les répertoires features et plugins de son dossier d'installation situé sur le disque dur.

Notre objectif dans cette section est de pouvoir créer et rassembler les plugins dédiés à notre DSL Madsl. Ensuite, ces plugins seront ajoutés dans le dossier plugins d'Eclipse-Xtext. Le processus consiste alors à créer un feature project pour rassembler les plugins qui correspondent aux différents sous-projets (org.xtext.maDsl, org.xtext.maDsl.generator et org.xtext.maDsl.ui) du projet Madsl. Ce feature project générera également une archive jar devant être ajoutée au répertoire features d'Eclipse-Xtext.

Nous donnons ci-dessous, les étapes à suivre.

1. Création du feature project :

File --> New --> Project --> Plug-in Developement --> Feature Project.

2. Cliquer Next et saisir le nom du feature project. Dans notre cas, feature.madsl.

Puis cliquer sur Next.

3. Choisir les plugins qui doivent être rassemblés (groupés) par ce feature project : nous devons choisir les trois plugins générés par le projet Xtext de création du langage.

Cliquer sur Finish.

4. Le feature project est créé.

Nous pouvons remarquer les trois plugins projects du langage Madsl dans l'onglet Plug-ins du fichier feature.xml. Il ne nous reste plus qu'à exporter le projet feature.madsl pour l'intégrer à Eclipse-Xtext.

III - Exportation des plugins du feature project et extension d'Eclipse-Xtext

III-A - Exportation des plugins du feature project

Pour exporter un feature project :

1.
File --> Export --> Plug-in Developement --> Deployable features

Cliquer sur Next.

2. Choisir le feature à déployer ainsi que le répertoire où il sera déployé. Dans notre cas, nous déployons feature.madsl dans le répertoire « dossier features » du disque D.

3. Cliquer sur Finish et attendre que la fenêtre montrant l'évolution du déploiement ait terminé.

III-B - Extension d'Eclipse-Xtext pour la prise en compte du nouveau langage

Lorsque nous avons fini de déployer le feature project rassemblant les plugins du nouveau langage (Madsl), nous devons les récupérer dans le répertoire indiqué et les ajouter dans les répertoires correspondants où est installé Eclipse-Xtext. Nous montrons ci-dessous la procédure à suivre.

1. Ouvrir le dossier dans lequel le feature project a été déployé.

2. Ouvrir le dossier plugins et copier les archives jar qui s'y trouvent. Dans notre cas, trois archives jar. Ouvrir le répertoire où Eclipse-Xtext a été installé et naviguer jusqu'à son dossier plugins. À l'intérieur de ce dossier plugins, coller les archives jar précédentes.

3. Retourner dans le répertoire où a été déployé le feature project, ouvrir le dossier feature. À l'intérieur, se trouve un fichier jar, dézipper ce fichier. Copier les deux éléments et les coller dans le dossier features du répertoire où est installé Eclipse-Xtext

L'extension d'Eclipse pour la prise en compte du nouveau langage est ainsi terminée. Nous devons démarrer Eclipse-Xtext s'il ne l'était pas encore ou le redémarrer au cas contraire.

N.B. Nous insistons sur le fait que la version d'Eclipse qu'il faut utiliser pour réaliser toutes les opérations précédentes est celle téléchargée sur le site d'itemis. Car cette version d'Eclipse (que nous appelons Eclipse-Xtext) a déjà préalablement été étendue pour prendre en compte plusieurs aspects spécifiques au framework Xtext nécessaires pour une intégration rapide d'un nouveau langage. Dans le cas d'un non-choix d'une version d'Eclipse d'itemis, le développeur devra commencer par intégrer tous les plugins liés à Xtext, puis ceux de son propre langage.

IV - Création d'un projet Madsl sur Eclipse-Xtext

Pour créer un nouveau projet permettant de saisir des programmes Madsl, nous allons, après le redémarrage précédent d'Eclipse-Xtext, essayer de voir si le nouveau langage est pris en compte par ce dernier. Pour cela : Help --> About Eclipse SDK --> Installation Details --> Installed Software :

Nous remarquons que Madsl est bien installé sur Eclipse tout comme Swing, SWT et autres.

Pour créer un projet Madsl :
File --> New --> Project --> General --> Project :

Puis, cliquer sur Next. Dans la nouvelle fenêtre, entrer un nom quelconque du projet Madsl (dans notre cas, test.projet.madsl). Le nouveau projet est créé dans la vue Package Explorer d'Eclipse-Xtext.

Pour saisir un programme Madsl, appartenant au projet test.projet.madsl : clic droit sur le projet test.projet.madsl, puis choisir New, puis File. Une fenêtre apparaît, nous demandant de donner le nom du fichier programme. Dans notre cas, nous lui donnons le nom de calculMoyenne.madsl. L'extension donnée à ce nom de fichier est obligatoire, car c'est via cette extension qu'Eclipse détermine qu'il s'agit d'un programme du langage Madsl. Cette extension, pour rappel, est définie depuis la création du langage, lors du développement de sa grammaire.

Cliquer sur Finish. Une petite fenêtre apparaît demandant s'il faudrait ajouter une « Xtext nature » au projet test.projet.madsl. Le choix du oui ou du non apparemment n'est d'aucune influence sur le reste. Le fichier calculMoyenne.madsl du projet test.projet.madsl, s'ouvre en édition. Nous pouvons ainsi saisir du code Madsl et le sauvegarder. Nous donnons ci-dessous deux programmes saisis dans cet éditeur. L'un correct et l'autre incorrect, tous marqués par des colorations syntaxiques de mots clés et des colorations signalant des erreurs dans le code.

Si nous pointons la curseur sur le mot souligné ou sur la croix rouge signalant l'erreur commise dans le programme, Eclipse nous signale le message suivant «mismatched input 'begi' expecting 'begin'». Cela voudrait dire que c'est le mot « begin » qui est attendu à ce niveau du code plutôt que « begi ». Cela signale une erreur syntaxique dans le programme due peut-être à une faute de saisie. Notons que hormis l'exemple pris sur le signalement d'une erreur syntaxique dans le programme Madsl, le langage bénéficie généralement dans l'éditeur Eclipse des aspects tels que la complétion de code et autres.

V - Conclusion et perspectives

Au terme de cet article, nous avons montré comment intégrer à Eclipse un nouveau langage que nous avons développé. Nous pouvons ainsi ouvrir Eclipse, créer librement un projet de type « notre nouveau langage » et saisir du code dans des fichiers de ce projet. Cette leçon nous a permis d'aborder des notions, telles les notions de plugins, de features (développement de features et d'exportation de features) et les notions d'extension d'Eclipse pour la prise en compte de nouveaux aspects.

Comme première perspective à ce travail, nous pouvons remarquer que, dans la fenêtre « New Project » (de création d'un projet sur Eclipse), nous créons un projet de notre nouveau langage dans le nœud General puis, Project. Ce qui reste très générique. Un travail à faire serait de compléter celui-ci de sorte que l'on puisse particulariser cela en ayant dans la fenêtre « New Project », un nœud Madsl Project (comme le nœud Java Project) permettant de créer un nouveau projet Madsl.
Une deuxième perspective (que nous proposons de faire dans l'article qui suivra celui-ci) est de retoucher le plugin project org.xtext.madsl.ui afin de lui ajouter des menus, des handlers, des commandes et peut être des vues. Ceci dans le but de permettre à l'éditeur Eclipse-Xtext, intégrant notre nouveau langage, de présenter des éléments (boutons, menus, vues…) pouvant permettre de manipuler particulièrement le nouveau langage.

VI - Remerciements

Je termine cet article en remerciant monsieur Mickael BARON (responsable de la rubrique Eclipse sur Developpez.com) qui m'a aiguillé sur les pistes me permettant d'arriver à mon objectif qui était celui présenté à l'introduction de cet article. Un merci également à Jean-Philippe ANDRÉ (jpcheck) et à jacques_jean pour leurs relectures orthographiques de cet article.