Annotation Interface ToDo
- Author:
- Yvan Maillot <yvan.maillot@uha.fr>
L'annotation @caseine.tags.ToDo
L'annotation @ToDo permet de retirer n'importe quel élément annotable et éventuellement le remplacer par un autre.
Cible
@ToDo s'applique à tout élément annotable.
Formes d'emploi
@ToDo s'emploie
- comme une annotation multivaluée : e.g. @ToDo(value = "une consigne à l'étudiant", replacement="public static String emptyString{ return \"\"; }")
- comme une annotation monovaluée : e.g. @ToDo("une consigne à l'étudiant")
- comme une annotation de marquage : @ToDo
Effet
L'annotation @ToDo a pour effet- selon que la propriété replacement soit renseignée ou
non:
- Si elle n'est pas renseignée (ou vide), de supprimer l'élément annoté .
- Si elle est renseignée (et non vide), de remplacer l'élément annoté par un autre défini par la propriété replacement (cf. Utilisation de la propriété replacement ci-après).
Utilisation de la propriété replacement
L'usage de la propriété replacement nécessite de prendre quelques précautions.
Si elle est présente et différente de la chaîne vide, l'élément annoté est
- soit remplacé par le contenu d'un fichier dont le chemin est donné par la valeur de la propriété replacement, s'il s'agit du chemin d'un ficher accessible.
- soit remplacé par cette valeur elle-même sinon.
Si l'élément annoté possède un commentaire de Javadoc, il est rajouté à l'élément de remplacement, si celui-ci le permet.
Si la consigne (value) est présente et différente de la chaîne vide, elle est rajoutée en commentaire // TODO la consigne.
Attention, la consigne prévaut sur la javadoc. Il ne pas y avoir à la fois commentaire et javadoc.
Attention, pour pouvoir déployer sur le serveur, il faut absolument que le code de remplacement soit parsable.
- Tout dépend de l'élément annoté,
- si c'est une classe une autre classe (de même nom) ou même une interface ou n'importe quel type de même nom.
- si c'est un membre de classe, il peut être remplacé par n'importe quel autre membre ou même par un bloc d'instructions.
- si c'est un paramètre, il peut être remplacé par un autre paramètre
- etc.
Exemples d'annotation de marquage
Exemple 1
@ToDo public class Vecteur { private double x, y; public Vecteur(double x, double y) { this.x = x; this.y = y; } public Vecteur() { this(0.0, 0.0); } public double norme() { return sqrt(x*x+y*y); } }sera tout bonnement effacé mais le fichier est conservé.
Exemple 2
public class Vecteur { @ToDo private double x, y; public Vecteur(double x, double y) { this.x = x; this.y = y; } public Vecteur() { this(0.0, 0.0); } public double norme() { return sqrt(x*x+y*y); } }sera remplacé par
public class Vecteur { public Vecteur(double x, double y) { this.x = x; this.y = y; } public Vecteur() { this(0.0, 0.0); } public double norme() { return sqrt(x*x+y*y); } }Ce code n'est pas compilable
Exemple 3
public class Vecteur { private double x, y; public Vecteur(@ToDo double x, double y) { this.x = x; this.y = y; } public Vecteur() { this(0.0, 0.0); } public double norme() { return sqrt(x*x+y*y); } }sera remplacé par
public class Vecteur { private double x, y; public Vecteur(double y) { this.x = x; this.y = y; } public Vecteur() { this(0.0, 0.0); } public double norme() { return sqrt(x*x+y*y); } }Ce code n'est pas compilable
Exemple 4
public class Vecteur { private double x, y; public Vecteur(double x, double y) { this.x = x; this.y = y; } @ToDo public Vecteur() { this(0.0, 0.0); } public double norme() { return sqrt(x*x+y*y); } }sera remplacé par
public class Vecteur { private double x, y; public Vecteur(double x, double y) { this.x = x; this.y = y; } public double norme() { return sqrt(x*x+y*y); } }Ce code est compilable
Exemple d'annotation monovaluée
@ToDo("Écrire une méthode qui retourne la norme de ce vecteur") public double norme() { return sqrt(x*x+y*y); }sera remplacé par
// TODO Écrire une méthode qui retourne la norme de ce vecteur
Exemple d'annotation multivaluée (sans fichier)
Exemple 1
@ToDo(value = "Cette méthode contient des erreurs. Corrigez-là !", replacement="private int norme(double x, double y) { return x*x+y*y; }") public double norme() { return sqrt(x*x+y*y); }sera remplacé par
// TODO Cette méthode contient des erreurs. Corrigez-là ! private int norme(double x, double y) { return x * x + y * y; }Exemple 2
// Revoir les paramètres de ce constructeur public Vecteur(@ToDo(replacement = "double _X") double x, @ToDo(replacement = "double _Y") double y) { this.x = x; this.y = y; }sera remplacé par
// Revoir les paramètres de ce constructeur public Vecteur(double _X, double _Y) { this.x = x; this.y = y; }Exemple d'annotation multivaluée (avec fichier)
@ToDo( value = "Cette classe est très mal écrite et même pas compilable. Corrigez là. Faites le nettoyage. Mais qu'elle remplisse toujours le même office.", replacement = "vecteur.txt") @ToCheck(grade = 1, priority = 5) public class Vecteur { @ToCheck(grade = 1, priority = 10) @GetterToCheck(grade = 1, priority = 15) @SetterToCheck(grade = 1, priority = 20) private double x, y; @ToCheck(grade = 1, priority = 12) public Vecteur(double x, double y) { this.x = x; this.y = y; } @ToCheck(grade = 1, priority = 13) public Vecteur() { this(0.0, 0.0); } @ToCompare(value = "Mauvais calcul de la norme", grade = 1, priority = 30) public double norme() { return sqrt(x * x + y * y); } public double getX() { return x; } public double getY() { return y; } public void setX(double x) { this.x = x; } public void setY(double y) { this.y = y; } }si le fichier vecteur.txt contient:
public class vecteur { public double x, y; Vecteur(double _X, double _Y) { x = _X; y = _X; } Vecteur() { x = 0.0; y = 0.0; } double Norme() { return x * x + y * y; } }sera remplacé par
// TODO Cette classe est très mal écrite et même pas compilable. Corrigez là. Faites le nettoyage. Mais qu'elle remplisse toujours le même office. public class vecteur { public double x, y; Vecteur(double _X, double _Y) { x = _X; y = _X; } Vecteur() { x = 0.0; y = 0.0; } double Norme() { return x * x + y * y; } }Ce code n'est pas compilable
-
Optional Element Summary
Optional Elements