1 /** 2 * Spoon - http://spoon.gforge.inria.fr/ 3 * Copyright (C) 2006 INRIA Futurs <renaud.pawlak@inria.fr> 4 * 5 * This software is governed by the CeCILL-C License under French law and 6 * abiding by the rules of distribution of free software. You can use, 7 * modify and/or redistribute the software under the terms of the 8 * CeCILL-C 9 * 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 */ 20 21 package spoon.aval.annotation.value; 22 23 import java.lang.annotation.Annotation; 24 import java.lang.annotation.Retention; 25 import java.lang.annotation.RetentionPolicy; 26 27 import spoon.aval.annotation.Implementation; 28 import spoon.aval.annotation.structure.AValTarget; 29 import spoon.aval.support.validator.RefersToValidator; 30 import spoon.aval.support.validator.problemFixer.RemoveThisAnnotation; 31 import spoon.processing.ProblemFixer; 32 import spoon.processing.Severity; 33 import spoon.reflect.declaration.CtField; 34 35 /** 36 * Validator that states that the value of an attribute of an annotation 37 * must refer to a value of another annotation. 38 * 39 * <p> 40 * For example if the value of attribute <code>@B.foo</code> must be 41 * the same of the value <code>@A.bar</code> defined on another element, the 42 * definition of <code>@B</code> should be: 43 * 44 * <p> 45 * <pre> 46 * public @interface B{ 47 * @RefersTo(value=A.class,attribute="bar") String foo(); 48 * } 49 * </pre> 50 * </p> 51 * 52 * @see spoon.aval.support.validator.RefersToValidator 53 */ 54 @Retention(RetentionPolicy.RUNTIME) 55 @AValTarget(CtField.class) 56 @Implementation(RefersToValidator.class) 57 public @interface RefersTo { 58 Class<? extends Annotation> value(); 59 String attribute() default "value"; 60 61 /** 62 * Message to report when validation fails 63 */ 64 String message() default "Found no reference for value ?val"; 65 66 /** 67 * Severity of the validation faliure 68 */ 69 Severity severity() default Severity.WARNING; 70 71 /** 72 * The list of {@link ProblemFixer}s to propose 73 * when the validation fails. 74 */ 75 Class<? extends ProblemFixer>[] fixers() default {RemoveThisAnnotation.class}; 76 77 } 78