Bonjour,
Aprés avoir lu le tutorial sur les annotations Java 5, j'ai réalisé le code équivalent de celui proposé (avec APT), mais en utilisant un processeur d'annotations différents: Spoon. Je trouve le code plus simple, et il permet des traitements d'annotations beaucoup plus puissant, notamment grace à un système de template.
Voilà l'équivalent du code que vous trouverez là:
http://adiguba.developpez.com/tutori...nnotations/#L3
En processant un fichier d'examples annoté (chemin relatif:src/examples/Test.java) avec notre processeur, on obtient:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 public class TodoProcessor extends AbstractAnnotationProcessor<TODO, CtNamedElement> { public void process(TODO arg0, CtNamedElement arg1) { switch (arg0.level()) { case MINEUR: getFactory().getEnvironment().reportMessage( arg0.value(), (arg1 instanceof CtSimpleType) ? (CtSimpleType) arg1 : arg1 .getParent(CtSimpleType.class), arg1, arg1.getPosition()); break; case NORMAL: getFactory().getEnvironment().reportWarning( arg0.value(), (arg1 instanceof CtSimpleType) ? (CtSimpleType) arg1 : arg1 .getParent(CtSimpleType.class), arg1, arg1.getPosition()); break; case IMPORTANT: getFactory().getEnvironment().reportError( arg0.value(), (arg1 instanceof CtSimpleType) ? (CtSimpleType) arg1 : arg1 .getParent(CtSimpleType.class), arg1, arg1.getPosition()); break; } } }
J'ai poussé un peu l'examples du constructeur vide http://adiguba.developpez.com/tutori...otations/#L3.5. Cette version ajoute un constructeur vide lorsqu'il n'existe pas. Voici le processeur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $> java spoon.Launcher -v -i src/examples/Test.java -p examples.todo.TodoProcessor Warning: Utiliser une annotation a la place d'une String at examples.Test.day(Test.java:13) Error: Ecrire le code de la methode at examples.Test.method(Test.java:16) 1 warning 1 error Done
Et le template qui permet "facilement" de creer le constructeur vide :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public class EmptyConstructorProcessor extends AbstractAnnotationProcessor<EmptyConstructor, CtClass<?>> { public void process(EmptyConstructor arg0, CtClass<?> arg1) { // Si on ne trouve pas de constructeur vide if (arg1.getConstructor(new CtTypeReference<?>[0]) == null) { // On affiche un warning getFactory().getEnvironment().reportWarning( "Un constructeur vide est requis", arg1, arg1, arg1.getPosition()); // On ajoute le constructeur vide Substitution.insertAll(arg1, new EmptyConstructorTemplate()); } } }
Vous pourrez trouver un jar contenant ces examples là :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public class EmptyConstructorTemplate implements Template { public EmptyConstructorTemplate() { super(); } }
http://www.lifl.fr/~petitpre/spoon/d...annotation.jar
Et un tutorial un peu plus complet (en anglais) là:
http://spoon.gforge.inria.fr/tutorial/
Partager