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.lang.reflect.Field;
49
50 import org.codehaus.groovy.ast.expr.Expression;
51 import org.codehaus.groovy.classgen.BytecodeHelper;
52 import org.objectweb.asm.Opcodes;
53
54 /***
55 * Represents a field (member variable)
56 *
57 * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
58 * @version $Revision: 1.14 $
59 */
60 public class FieldNode extends AnnotatedNode implements Opcodes {
61
62 private String name;
63 private int modifiers;
64 private String type;
65 private String owner;
66 private Expression initialValueExpression;
67 private boolean dynamicType;
68 private boolean holder;
69
70 public static FieldNode newStatic(Class theClass, String name) throws SecurityException, NoSuchFieldException {
71 Field field = theClass.getField(name);
72 String fldType = field.getType().getName();
73 return new FieldNode(name, ACC_PUBLIC | ACC_STATIC, fldType, theClass.getName(), null);
74 }
75
76 public FieldNode(String name, int modifiers, String type, ClassNode owner, Expression initialValueExpression) {
77 this(name, modifiers, type, owner.getName(), initialValueExpression);
78 }
79
80 public FieldNode(String name, int modifiers, String type, String owner, Expression initialValueExpression) {
81 this.name = name;
82 this.modifiers = modifiers;
83 this.type = type;
84 this.owner = owner;
85 this.initialValueExpression = initialValueExpression;
86 if (type == null || type.length() == 0) {
87 this.dynamicType = true;
88 if (initialValueExpression != null) {
89 String initType = initialValueExpression.getType();
90 if (initType != null && initType.length() > 0){
91 this.type = initType;
92
93 }
94 else {
95 this.type = "java.lang.Object";
96
97 }
98 }
99 else {
100 this.type = "java.lang.Object";
101
102 }
103 }
104 else {
105 String boxedType = BytecodeHelper.getObjectTypeForPrimitive(type);
106 this.type = boxedType;
107 dynamicType = false;
108 }
109 }
110
111 public Expression getInitialValueExpression() {
112 return initialValueExpression;
113 }
114
115 public int getModifiers() {
116 return modifiers;
117 }
118
119 public String getName() {
120 return name;
121 }
122
123 public String getType() {
124 return type;
125 }
126
127 public void setType(String type) {
128 this.type = type;
129 }
130
131 public String getOwner() {
132 return owner;
133 }
134
135 public boolean isHolder() {
136 return holder;
137 }
138
139 public void setHolder(boolean holder) {
140 this.holder = holder;
141 }
142
143 public boolean isDynamicType() {
144 return dynamicType;
145 }
146
147 public void setModifiers(int modifiers) {
148 this.modifiers = modifiers;
149 }
150
151 /***
152 * @return true if the field is static
153 */
154 public boolean isStatic() {
155 return (modifiers & ACC_STATIC) != 0;
156 }
157 /***
158 * @param owner The owner to set.
159 */
160 public void setOwner(String owner) {
161 this.owner = owner;
162 }
163 }