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.support.validator.problemFixer;
20:
21: import java.lang.annotation.Annotation;
22: import java.util.Iterator;
23: import java.util.Set;
24:
25: import spoon.aval.processing.ValidationPoint;
26: import spoon.processing.AbstractProblemFixer;
27: import spoon.reflect.Changes;
28: import spoon.reflect.declaration.CtAnnotation;
29: import spoon.reflect.declaration.CtElement;
30: import spoon.reflect.declaration.CtExecutable;
31:
32: public class RemoveThisAnnotation extends AbstractProblemFixer
33: implements AValFixer {
34:
35: private Class<? extends Annotation> this Annotation = null;
36:
37: public void setValidationPoint(ValidationPoint vp) {
38: this Annotation = (Class<? extends Annotation>) vp
39: .getDslAnnotation().getAnnotationType()
40: .getActualClass();
41: }
42:
43: public String getDescription() {
44: return "AVal problem fixer that will remove this annotation";
45: }
46:
47: public String getLabel() {
48: return "Remove this annotation";
49: }
50:
51: public Changes run(CtElement element) {
52: Changes df = new Changes();
53: Set<CtAnnotation<? extends Annotation>> anns = element
54: .getParent().getAnnotations();
55: for (Iterator iter = anns.iterator(); iter.hasNext();) {
56: CtAnnotation e = (CtAnnotation) iter.next();
57: if (e.getAnnotationType().getActualClass().getName()
58: .equals(this Annotation.getName())) {
59: iter.remove();
60: df.getRemoved().add(e);
61: //XXX: delete when bug in QuickFixes gets fixed.
62: df.getModified().add(e);
63: }
64: }
65: return df;
66: }
67:
68: }
|