JSlave

Language formel de métaprogrammation Java

Personnel – en cours

Histoire

Un langage pour définir des blueprints déclaratifs pour générer des classes Java.

Prend en charge la génération automatique et personnalisable de :

  • Arborescences d’héritage (extend, implement, permits)

  • Attributs

  • Getters/setters

  • méthode hashCode

  • méthode equals

  • méthode toString

  • Stubs de méthode

Fonctionnalités supplémentaires :

  • Classes imbriquées et statiques

  • Blocs de code Java arbitraires

Avantages par rapport aux extraits

Un blueprint Jslave est autonome et peut être automatisé, contrairement aux extraits/raccourcis qui dépendent de l’IDE et nécessitent une saisie manuelle. Cette approche présente les avantages suivants :

  • Les blueprints peuvent être transmis sous forme de fichiers

  • Les blueprints peuvent être générés vers autre chose que Java

  • La génération est prévisible et déterministe

  • La génération peut être automatisée dans un script

Inconvénients :

  • Étant donné que nous ne sommes plus dans un contexte Java, nous ne recevrons pas beaucoup d’aide de l’IDE lors de l’écriture de JSlave (coloration syntaxique, auto-complétion…). Ce problème est atténué par la simplicité du langage et la future extension VS Code.

Premiers pas

1. Écrivez votre fichier JSlave

Votre fichier JSlave (appelé idiomatiquement un blueprint) définit la structure de votre code Java et fournit la syntaxe des modèles courants afin d’éviter d’écrire tout ce code Java répétitif.

Vous trouverez plus de détails sur la syntaxe dans la documentation, mais l’idiome principal est le suivant :

Un blueprint est une liste de définitions qui génèrent le type Java correspondant (classes, enregistrements, interfaces…). Chaque définition contient zéro ou plusieurs membres qui déterminent le contenu du type.

Les membres peuvent être de deux types :

  • Les attributs définissent les champs de données du type. Ils génèrent des attributs de classe Java et des méthodes getter/setter.

  • Les méthodes définissent les comportements du type. Les méthodes qui ont une signification particulière en Java (equals, hashCode, toString) sont appelées méthodes spéciales. Elles peuvent être exprimées sous trois formes :

    • Stub : une méthode vide à implémenter soit à partir du code Java généré, soit avec un bloc de code

    • Implémentation par défaut : une implémentation par défaut à usage général qui devrait fonctionner dans la plupart des cas

    • Implémentation personnalisée : l’implémentation par défaut, personnalisée en passant des arguments à la méthode

2. Générez-le

À partir de l’interface graphique de l’extension VSCode ou en utilisant le binaire autonome, générez votre blueprint.

Plusieurs cibles sont disponibles

  • Java (évidemment) : génère du code Java

  • Mermaid : génère un diagramme de classe Mermaid[1] représentant la structure du blueprint

Références

  1. Mermaid.js — syntaxe des diagrammes de classes (anglais)

Technologies