1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 package org.codehaus.groovy.ast;
47
48 import java.util.ArrayList;
49 import java.util.HashMap;
50 import java.util.Iterator;
51 import java.util.List;
52 import java.util.Map;
53
54
55 /***
56 * Base class for any AST node which is capable of being annotationed
57 *
58 * @author <a href="mailto:jstrachan@protique.com">James Strachan</a>
59 * @version $Revision: 1.4 $
60 */
61 public class AnnotatedNode extends ASTNode {
62 private Map annotations = new HashMap();
63 private Map annotationClasses = new HashMap();
64 private boolean synthetic;
65 ClassNode declaringClass;
66
67 public AnnotatedNode() {
68 }
69
70 public Map getAnnotations() {
71 return annotations;
72 }
73
74 public AnnotationNode getAnnotations(String name) {
75 return (AnnotationNode) annotations.get(name);
76 }
77
78 public ClassNode getAnnotationClass(String name) {
79 return (ClassNode) annotationClasses.get(name);
80 }
81
82 public void addAnnotation(String name, AnnotationNode value) {
83 annotationClasses.put(name,value.getClassNode());
84 AnnotationNode oldValue = (AnnotationNode) annotations.get(name);
85
86
87 if (oldValue == null) {
88 annotations.put(name, value);
89 }
90 else {
91 List list = null;
92 if (oldValue instanceof List) {
93 list = (List) oldValue;
94 }
95 else {
96 list = new ArrayList();
97 list.add(oldValue);
98 annotations.put(name, list);
99 }
100 list.add(value);
101 }
102 }
103
104 public void addAnnotations(List annotations) {
105 for (Iterator iter = annotations.iterator(); iter.hasNext();) {
106 AnnotationNode node = (AnnotationNode) iter.next();
107 addAnnotation(node.getClassNode().getName(), node);
108 }
109
110 }
111
112 public boolean isSynthetic() {
113 return synthetic;
114 }
115
116 public void setSynthetic(boolean synthetic) {
117 this.synthetic = synthetic;
118 }
119
120 public ClassNode getDeclaringClass() {
121 return declaringClass;
122 }
123
124 /***
125 * @param declaringClass The declaringClass to set.
126 */
127 public void setDeclaringClass(ClassNode declaringClass) {
128 this.declaringClass = declaringClass;
129 }
130 }