1 /*
2 * Copyright 2009 Werner Guttmann
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5 * in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11 * or implied. See the License for the specific language governing permissions and limitations under
12 * the License.
13 */
14 package org.exolab.javasource;
15
16 /**
17 * A (abstract) base class which holds information about fields. Modeled closely after the Java
18 * Reflection API. This class is part of package which is used to create source code in memory.
19 *
20 * @author <a href="mailto:wguttmn AT codehaus DOT org">Werner Guttmann</a>
21 * @since 1.3
22 */
23 public class AbstractJField extends JAnnotatedElementHelper implements JMember {
24
25 /** The set of modifiers for this JField. */
26 private JModifiers _modifiers = null;
27
28 /** Type of this field. */
29 private final JType _type;
30
31 /** Name of the field. */
32 private String _name = null;
33
34 /** JavaDoc for this field. */
35 private JDocComment _comment = new JDocComment();
36
37 /** Initialization string for this field. */
38 private String _initString = null;
39
40 /** Indicates whether this field is of type date/time. */
41 private boolean _isDateTime = false;
42
43 /** The Class in this JField has been declared. */
44 private JClass _declaringClass = null;
45
46 /**
47 * Creates a new JField.
48 *
49 * @param type JType of this new field.
50 * @param name Name of this new field.
51 */
52 public AbstractJField(final JType type, final String name) {
53 setName(name);
54
55 _type = type;
56
57 setModifiers(new JModifiers());
58 }
59
60 /**
61 * Returns the JavaDoc comment describing this member.
62 *
63 * @return The JavaDoc comment describing this member, or null if no comment has been set.
64 */
65 public JDocComment getComment() {
66 return _comment;
67 }
68
69 /**
70 * Returns the class in which this JField has been declared.
71 *
72 * @return The class in which this JField has been declared.
73 */
74 public JClass getDeclaringClass() {
75 return _declaringClass;
76 }
77
78 /**
79 * Returns the initialization String for this JField.
80 *
81 * @return The initialization String for this JField, or null if no initialization String was
82 * specified.
83 */
84 public String getInitString() {
85 return _initString;
86 }
87
88 /**
89 * Returns the modifiers for this JField.
90 *
91 * @return The modifiers for this JField.
92 */
93 public JModifiers getModifiers() {
94 return _modifiers;
95 }
96
97 /**
98 * Returns the name of this JField.
99 *
100 * @return The name of this JField.
101 */
102 public String getName() {
103 return _name;
104 }
105
106 /**
107 * Returns the JType representing the type of this JField.
108 *
109 * @return The JType representing the type of this JField.
110 */
111 public JType getType() {
112 return _type;
113 }
114
115 /**
116 * Sets the JavaDoc comment describing this JField.
117 *
118 * @param comment The JavaDoc comment for this JField.
119 */
120 public void setComment(final JDocComment comment) {
121 _comment = comment;
122 }
123
124 /**
125 * Sets the JavaDoc comment describing this JField.
126 *
127 * @param comment The JavaDoc comment for this JField.
128 */
129 public void setComment(final String comment) {
130 _comment.setComment(comment);
131 }
132
133 /**
134 * Sets the initialization string for this JField. This allows some flexibility in declaring
135 * default values.
136 *
137 * @param init The initialization string for this member.
138 */
139 public void setInitString(final String init) {
140 _initString = init;
141 }
142
143 /**
144 * Sets the name of this JField.
145 *
146 * @param name The name of this JField.
147 */
148 public void setName(final String name) {
149 if (!JNaming.isValidJavaIdentifier(name)) {
150 String err = "'" + name + "' is ";
151 if (JNaming.isKeyword(name)) {
152 err += "a reserved word and may not be used as " + " a field name.";
153 } else {
154 err += "not a valid Java identifier.";
155 }
156 throw new IllegalArgumentException(err);
157 }
158 _name = name;
159 }
160
161 /**
162 * Sets the access modifiers on this JField.
163 *
164 * @param modifiers The access modifiers to be used for this JField.
165 */
166 public void setModifiers(final JModifiers modifiers) {
167 _modifiers = modifiers;
168 }
169
170 /**
171 * Sets the class that declares this JField.
172 *
173 * @param declaringClass The class in which this Jfield is declared.
174 */
175 protected void setDeclaringClass(final JClass declaringClass) {
176 _declaringClass = declaringClass;
177 }
178
179 /**
180 * Indicates whether this JField instance represents a field of type date/time.
181 *
182 * @return True if this field is of type date/time.
183 */
184 public boolean isDateTime() {
185 return _isDateTime;
186 }
187
188 /**
189 * To indicate whether this JField instance represents a field of type date/time.
190 *
191 * @param isDateTime True if this field is of type date/time.
192 */
193 public void setDateTime(final boolean isDateTime) {
194 _isDateTime = isDateTime;
195 }
196
197 /**
198 * {@inheritDoc}
199 */
200 public String toString() {
201 return new StringBuilder().append(_modifiers).append(' ').append(_type).append(' ')
202 .append(_name).toString();
203 }
204 }