TD4 - Annotations

De $1

Version de 09:53, 20 Avr 2024

cette version.

Revenir à liste des archives.

Voir la version actuelle

Ce TD propose la création d'annotations, leur manipulation par introspection et avec l'interface APT de manipulation des annotations. Il s'appuie en partie sur les résultats du TD3.

Annotation Menu

Créez une annotation de nom @Menu qui s'applique uniquement sur les méthodes et qui sera utilisée aussi bien lors de la compilation que dynamiquement par introspection. Cette annotation doit permettre de construire automatiquement un menu dans une fenêtre. 

Un menu (ex: JMenu) possède:

  • Un nom
  • [Optionnel] Une icône (chargée à partir d'un fichier image : ImageIcon)
  • [Optionnel] Une combinaison clavier pour un raccourci clavier (voir la méthode statique KeyStroke.getKeyStroke)
  • Un comportement (c'est-à-dire une méthode qui s'exécute lorsque l'on clique sur le menu)

Utiliser une annotation plutôt que la classe JMenu directement permet de s'affranchir de l'environnement graphique à utiliser. Si plus tard on décide d'utiliser AWT ou SWT, l'information sur le menu reste présente sous forme d'annotation.

Introspection et annotations

Reprenez l'exercice sur les Menu du TD3.

Spécialisez la classe FrameWithMenu et redéfinir la méthode buildMenu() pour créer les menus en fonction de l'annotation @Menu.

  • On chargera donc (dynamiquement) toutes les classes (fichiers .class) qui se trouvent dans le repository
  • On sélectionnera celles qui ont des méthodes annotées par @Menu. Il peut y avoir plusieurs méthodes annotées ! On supposera vérifiera cependant que ces méthodes sont statiques, publiques et sans paramètres. Pour chacune des méthodes sélectionnées, il faut utiliser l'information de l'annotation pour
    • créer un menu
    • Si le nom n'est pas donné par un champ spécifique, on utilisera le nom de la méthode
    • On chargera la bonne icône et le bon raccourci clavier
    • On utilisera la méthode invoke pour exécuter cette méthode lorsque l'utilisateur clique sur le menu ainsi créer.

Annotation Processing Tool

Génération de code