01: /**
02: * Spoon - http://spoon.gforge.inria.fr/
03: * Copyright (C) 2006 INRIA Futurs <renaud.pawlak@inria.fr>
04: *
05: * This software is governed by the CeCILL-C License under French law and
06: * abiding by the rules of distribution of free software. You can use,
07: * modify and/or redistribute the software under the terms of the
08: * CeCILL-C
09: * license as circulated by CEA, CNRS and INRIA at the following URL:
10: * http://www.cecill.info.
11: *
12: * This program is distributed in the hope that it will be useful, but
13: * WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the CeCILL-C
15: * License for more details.
16: *
17: * The fact that you are presently reading this means that you have had
18: * knowledge of the CeCILL-C license and that you accept its terms.
19: */package spoon.aval.annotation.value;
20:
21: import java.lang.annotation.Retention;
22: import java.lang.annotation.RetentionPolicy;
23:
24: import spoon.aval.annotation.Implementation;
25: import spoon.aval.annotation.structure.AValTarget;
26: import spoon.aval.support.validator.UniqueValueValidator;
27: import spoon.aval.support.validator.problemFixer.RemoveThisAnnotation;
28: import spoon.processing.ProblemFixer;
29: import spoon.processing.Severity;
30: import spoon.reflect.declaration.CtElement;
31: import spoon.reflect.declaration.CtField;
32:
33: /**
34: * Validator that checks that the value of the annotation is unique (i.e. that
35: * no other annotation of the same type in the application uses the same value).
36: * <p>
37: * For example, if the
38: * <code>value()<code> of an annotation <code>@A<code/> must be unique,
39: * the definition of <code>@A</code> must be:
40: *
41: * <p>
42: * <pre>
43: * public @interface A {
44: * @Unique()
45: * String value();
46: * }
47: * </pre>
48: * </p>
49: *
50: * @see spoon.aval.support.validator.UniqueValueValidator
51: *
52: */
53: @Retention(RetentionPolicy.RUNTIME)
54: @AValTarget(CtField.class)
55: @Implementation(UniqueValueValidator.class)
56: public @interface Unique {
57: /**
58: * Scope in which the value will be checked for uniqueness. By default, the
59: * scope is the program's source code.
60: *
61: * Scopes can be either CtPackage, CtType or CtMethod meaning the containing
62: * package, type (class interface), or method.
63: *
64: */
65: Class<? extends CtElement> scope() default CtElement.class;
66:
67: /**
68: * Message to report when validation fails
69: */
70: String message() default "Value \"?val\" is not Unique";
71:
72: /**
73: * Severity of the validation faliure
74: */
75: Severity severity() default Severity.WARNING;
76:
77: /**
78: * The list of {@link ProblemFixer}s to propose when the validation fails.
79: */
80: Class<? extends ProblemFixer>[] fixers() default { RemoveThisAnnotation.class };
81:
82: }
|