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.structure; 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.support.validator.ProhibitsValidator; 29 import spoon.aval.support.validator.problemFixer.RemoveThisAnnotation; 30 import spoon.processing.ProblemFixer; 31 import spoon.processing.Severity; 32 import spoon.reflect.declaration.CtAnnotationType; 33 34 /** 35 * Validator that states that elements annotated with this annotation cannot be 36 * annotated with another one 37 * <p> 38 * For example if <code>@B</code> cannot be placed on the same element as <code>@A</code>, 39 * the declaration of <code>@B</code> would be: 40 * 41 * <p> 42 * <pre> 43 * @Prohibits(A.class) 44 * @Target(FIELD) 45 * public @interface B{} 46 * </pre> 47 * </p> 48 * 49 * @see spoon.aval.support.validator.ProhibitsValidator 50 */ 51 @Retention(RetentionPolicy.RUNTIME) 52 @Implementation(ProhibitsValidator.class) 53 @AValTarget(CtAnnotationType.class) 54 public @interface Prohibits { 55 /** 56 * The other annotation 57 */ 58 Class<? extends Annotation> value(); 59 60 /** 61 * Message to report when validation fails 62 */ 63 String message() default "The use of this annotation prohibits @?val annotation"; 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 } 77