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.Annotation;
22: import java.lang.annotation.Retention;
23: import java.lang.annotation.RetentionPolicy;
24:
25: import spoon.aval.annotation.Implementation;
26: import spoon.aval.annotation.structure.AValTarget;
27: import spoon.aval.support.validator.RefersToValidator;
28: import spoon.aval.support.validator.problemFixer.RemoveThisAnnotation;
29: import spoon.processing.ProblemFixer;
30: import spoon.processing.Severity;
31: import spoon.reflect.declaration.CtField;
32:
33: /**
34: * Validator that states that the value of an attribute of an annotation
35: * must refer to a value of another annotation.
36: *
37: * <p>
38: * For example if the value of attribute <code>@B.foo</code> must be
39: * the same of the value <code>@A.bar</code> defined on another element, the
40: * definition of <code>@B</code> should be:
41: *
42: * <p>
43: * <pre>
44: * public @interface B{
45: * @RefersTo(value=A.class,attribute="bar") String foo();
46: * }
47: * </pre>
48: * </p>
49: *
50: * @see spoon.aval.support.validator.RefersToValidator
51: */
52: @Retention(RetentionPolicy.RUNTIME)
53: @AValTarget(CtField.class)
54: @Implementation(RefersToValidator.class)
55: public @interface RefersTo {
56: Class<? extends Annotation> value();
57:
58: String attribute() default "value";
59:
60: /**
61: * Message to report when validation fails
62: */
63: String message() default "Found no reference for value ?val";
64:
65: /**
66: * Severity of the validation faliure
67: */
68: Severity severity() default Severity.WARNING;
69:
70: /**
71: * The list of {@link ProblemFixer}s to propose
72: * when the validation fails.
73: */
74: Class<? extends ProblemFixer>[] fixers() default { RemoveThisAnnotation.class };
75:
76: }
|