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.Constants;
53
54 /***
55 * Represents a field (member variable)
56 *
57 * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
58 * @version $Revision: 1.10 $
59 */
60 public class FieldNode extends MetadataNode implements Constants {
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, String owner, Expression initialValueExpression) {
77 this.name = name;
78 this.modifiers = modifiers;
79 this.type = type;
80 this.owner = owner;
81 this.initialValueExpression = initialValueExpression;
82 if (type == null || type.length() == 0) {
83 this.dynamicType = true;
84 if (initialValueExpression != null) {
85 String initType = initialValueExpression.getType();
86 if (initType != null && initType.length() > 0){
87 this.type = initType;
88
89 }
90 else {
91 this.type = "java.lang.Object";
92
93 }
94 }
95 else {
96 this.type = "java.lang.Object";
97
98 }
99 }
100 else {
101 String boxedType = BytecodeHelper.getObjectTypeForPrimitive(type);
102 boxedType = BytecodeHelper.getObjectArrayTypeForPrimitiveArray(boxedType);
103 this.type = boxedType;
104 dynamicType = false;
105 }
106 }
107
108 public Expression getInitialValueExpression() {
109 return initialValueExpression;
110 }
111
112 public int getModifiers() {
113 return modifiers;
114 }
115
116 public String getName() {
117 return name;
118 }
119
120 public String getType() {
121 return type;
122 }
123
124 public void setType(String type) {
125 this.type = type;
126 }
127
128 public String getOwner() {
129 return owner;
130 }
131
132 public boolean isHolder() {
133 return holder;
134 }
135
136 public void setHolder(boolean holder) {
137 this.holder = holder;
138 }
139
140 public boolean isDynamicType() {
141 return dynamicType;
142 }
143
144 public void setModifiers(int modifiers) {
145 this.modifiers = modifiers;
146 }
147
148 /***
149 * @return true if the field is static
150 */
151 public boolean isStatic() {
152 return (modifiers & Constants.ACC_STATIC) != 0;
153 }
154 /***
155 * @param owner The owner to set.
156 */
157 public void setOwner(String owner) {
158 this.owner = owner;
159 }
160 }