1 /**
2 * EasyBeans
3 * Copyright (C) 2006 Bull S.A.S.
4 * Contact: easybeans@objectweb.org
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19 * USA
20 *
21 * --------------------------------------------------------------------------
22 * $Id: JField.java 47 2006-02-28 10:42:29Z benoitf $
23 * --------------------------------------------------------------------------
24 */
25
26 package com.bm.ejb3metadata.annotations;
27
28 /**
29 * This class defines a Field object. It is not based on reflection.
30 * @author Florent Benoit
31 */
32 public class JField {
33
34 /**
35 * Name of the field.
36 */
37 private String name = null;
38
39 /**
40 * Access mode (see {@link org.ejb3unit.asm.Opcodes}).
41 */
42 private int access;
43
44 /**
45 * Field's descriptor.
46 */
47 private String descriptor = null;
48
49 /**
50 * Field's signature.
51 */
52 private String signature;
53
54 /**
55 * Value of the field.
56 */
57 private Object value;
58
59 /**
60 * Constructor. *
61 * @param access the field's access flags (see
62 * {@link org.ejb3unit.asm.Opcodes}). This parameter also indicates
63 * if the field is synthetic and/or deprecated.
64 * @param name the field's name.
65 * @param descriptor the field's descriptor (see
66 * {@link org.ejb3unit.asm.Type}).
67 * @param signature the field's signature. May be <tt>null</tt> if the
68 * field's type does not use generic types.
69 * @param value the field's initial value. This parameter, which may be
70 * <tt>null</tt> if the field does not have an initial value, must
71 * be an {@link Integer}, a {@link Float}, a {@link Long}, a
72 * {@link Double} or a {@link String} (for <tt>int</tt>,
73 * <tt>float</tt>, <tt>long</tt> or <tt>String</tt> fields
74 * respectively). <i>This parameter is only used for static fields</i>.
75 * Its value is ignored for non static fields, which must be
76 * initialized through bytecode instructions in constructors or
77 * methods.
78 */
79 public JField(final int access, final String name, final String descriptor, final String signature,
80 final Object value) {
81 this.access = access;
82 this.name = name;
83 this.descriptor = descriptor;
84 this.signature = signature;
85 this.value = value;
86 }
87
88 /**
89 * Indicates whether some other object is "equal to" this one.
90 * @param obj object to compare
91 * @return true if given object is equals
92 */
93 @Override
94 public boolean equals(final Object obj) {
95 if (obj != null && obj instanceof JField) {
96 JField other = (JField) obj;
97
98 // same name
99 if (!this.name.equals(other.name)) {
100 return false;
101 }
102
103 // same descriptor
104 if ((this.descriptor != null) && (!this.descriptor.equals(other.descriptor))) {
105 return false;
106 }
107
108 // same signature
109 if ((this.signature != null) && (!this.signature.equals(other.signature))) {
110 return false;
111 }
112
113 // if all tests succeed, return true
114 return true;
115 }
116 return false;
117 }
118
119 /**
120 * a hash code value for the object.
121 * @return a hash code value for the object.
122 */
123 @Override
124 public int hashCode() {
125 return name.hashCode();
126 }
127
128 /**
129 * field's descriptor.
130 * @return field's descriptor.
131 */
132 public String getDescriptor() {
133 return descriptor;
134 }
135
136 /**
137 * field's value.
138 * @return field's value.
139 */
140 public Object getValue() {
141 return value;
142 }
143
144 /**
145 * method name.
146 * @return method name
147 */
148 public String getName() {
149 return name;
150 }
151
152 /**
153 * method signature.
154 * @return method signature
155 */
156 public String getSignature() {
157 return signature;
158 }
159
160 /**
161 * {@inheritDoc}
162 */
163 @Override
164 public String toString() {
165 StringBuilder sb = new StringBuilder();
166 // classname
167 sb.append(this.getClass().getName().substring(this.getClass().getPackage().getName().length() + 1));
168
169 // name
170 sb.append("[name=");
171 sb.append(name);
172
173 // access
174 sb.append(", access=");
175 sb.append(access);
176
177 // descriptor
178 if (descriptor != null) {
179 sb.append(", descriptor=");
180 sb.append(descriptor);
181 }
182
183 // signature
184 if (signature != null) {
185 sb.append(", signature=");
186 sb.append(signature);
187 }
188
189 // exceptions
190 if (value != null) {
191 sb.append(", value=");
192 sb.append(value);
193 }
194 sb.append("]");
195 return sb.toString();
196 }
197
198 /**
199 * the field's access flags.
200 * @return the field's access flags
201 */
202 public int getAccess() {
203 return access;
204 }
205 }