1 package serp.bytecode;
2
3 import serp.bytecode.lowlevel.*;
4 import serp.bytecode.visitor.*;
5 import serp.util.*;
6
7
8
9
10
11
12 public class BCField extends BCMember implements VisitAcceptor {
13 BCField(BCClass owner) {
14 super(owner);
15 if (owner.isEnum())
16 setEnum(true);
17 }
18
19
20
21
22 public boolean isVolatile() {
23 return (getAccessFlags() & Constants.ACCESS_VOLATILE) > 0;
24 }
25
26
27
28
29 public void setVolatile(boolean on) {
30 if (on)
31 setAccessFlags(getAccessFlags() | Constants.ACCESS_VOLATILE);
32 else
33 setAccessFlags(getAccessFlags() & ~Constants.ACCESS_VOLATILE);
34 }
35
36
37
38
39 public boolean isTransient() {
40 return (getAccessFlags() & Constants.ACCESS_TRANSIENT) > 0;
41 }
42
43
44
45
46 public void setTransient(boolean on) {
47 if (on)
48 setAccessFlags(getAccessFlags() | Constants.ACCESS_TRANSIENT);
49 else
50 setAccessFlags(getAccessFlags() & ~Constants.ACCESS_TRANSIENT);
51 }
52
53
54
55
56
57 public boolean isEnum() {
58 return (getAccessFlags() & Constants.ACCESS_ENUM) > 0;
59 }
60
61
62
63
64
65 public void setEnum(boolean on) {
66 if (on)
67 setAccessFlags(getAccessFlags() | Constants.ACCESS_ENUM);
68 else
69 setAccessFlags(getAccessFlags() & ~Constants.ACCESS_ENUM);
70 }
71
72
73
74
75
76
77
78 public String getTypeName() {
79 return getProject().getNameCache().getExternalForm
80 (getDescriptor(), false);
81 }
82
83
84
85
86 public Class getType() {
87 return Strings.toClass(getTypeName(), getClassLoader());
88 }
89
90
91
92
93 public BCClass getTypeBC() {
94 return getProject().loadClass(getTypeName(), getClassLoader());
95 }
96
97
98
99
100
101
102 public void setType(String type) {
103 setDescriptor(type);
104 }
105
106
107
108
109
110
111 public void setType(Class type) {
112 setType(type.getName());
113 }
114
115
116
117
118
119
120 public void setType(BCClass type) {
121 setType(type.getName());
122 }
123
124
125
126
127
128
129
130
131
132
133 public ConstantValue getConstantValue(boolean add) {
134 ConstantValue constant = (ConstantValue) getAttribute
135 (Constants.ATTR_CONST);
136 if (!add || (constant != null))
137 return constant;
138 if (constant == null)
139 constant = (ConstantValue) addAttribute(Constants.ATTR_CONST);
140 return constant;
141 }
142
143
144
145
146
147
148
149 public boolean removeConstantValue() {
150 return removeAttribute(Constants.ATTR_CONST);
151 }
152
153 public void acceptVisit(BCVisitor visit) {
154 visit.enterBCField(this);
155 visitAttributes(visit);
156 visit.exitBCField(this);
157 }
158
159 void initialize(String name, String descriptor) {
160 super.initialize(name, descriptor);
161 makePrivate();
162 }
163 }