1 /**
2 * Redistribution and use of this software and associated documentation
3 * ("Software"), with or without modification, are permitted provided
4 * that the following conditions are met:
5 *
6 * 1. Redistributions of source code must retain copyright
7 * statements and notices. Redistributions must also contain a
8 * copy of this document.
9 *
10 * 2. Redistributions in binary form must reproduce the
11 * above copyright notice, this list of conditions and the
12 * following disclaimer in the documentation and/or other
13 * materials provided with the distribution.
14 *
15 * 3. The name "Exolab" must not be used to endorse or promote
16 * products derived from this Software without prior written
17 * permission of Intalio, Inc. For written permission,
18 * please contact [email protected].
19 *
20 * 4. Products derived from this Software may not be called "Exolab"
21 * nor may "Exolab" appear in their names without prior written
22 * permission of Intalio, Inc. Exolab is a registered
23 * trademark of Intalio, Inc.
24 *
25 * 5. Due credit should be given to the Exolab Project
26 * (http://www.codehaus.org/).
27 *
28 * THIS SOFTWARE IS PROVIDED BY INTALIO, INC. AND CONTRIBUTORS
29 * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
30 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
31 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
32 * INTALIO, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
33 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
34 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
35 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
37 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
39 * OF THE POSSIBILITY OF SUCH DAMAGE.
40 *
41 * Copyright 1999-2000 (C) Intalio, Inc. All Rights Reserved.
42 *
43 * $Id$
44 */
45 package org.codehaus.modello.plugin.java.javasource;
46
47 /*
48 * Copyright (c) 2004, Codehaus.org
49 *
50 * Permission is hereby granted, free of charge, to any person obtaining a copy of
51 * this software and associated documentation files (the "Software"), to deal in
52 * the Software without restriction, including without limitation the rights to
53 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
54 * of the Software, and to permit persons to whom the Software is furnished to do
55 * so, subject to the following conditions:
56 *
57 * The above copyright notice and this permission notice shall be included in all
58 * copies or substantial portions of the Software.
59 *
60 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
61 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
62 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
63 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
64 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
65 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
66 * SOFTWARE.
67 */
68
69 /**
70 * The set of modifiers for a Method or Member variable
71 * @author <a href="mailto:[email protected]">Keith Visco</a>
72 * @version $Revision$ $Date$
73 **/
74 public class JModifiers {
75
76 /* static members */
77
78 private static final String sAbstract = "abstract";
79 private static final String sFinal = "final";
80 private static final String sPrivate = "private";
81 private static final String sProtected = "protected";
82 private static final String sPackage = "";
83 private static final String sPublic = "public";
84 private static final String sStatic = "static";
85 private static final String sTransient = "transient";
86
87 private static final short vPrivate = 1;
88 private static final short vProtected = 2;
89 private static final short vPublic = 3;
90 private static final short vPackage = 4;
91
92 /* local members */
93
94 /**
95 * The visibility
96 **/
97 private short visibility = vPublic;
98
99 /**
100 * A flag indicating whether or not the object associated
101 * with this JModifiers is static
102 **/
103 private boolean isStatic = false;
104
105 /**
106 * A flag indicating whether or not the object associated
107 * with this JModifiers is final
108 **/
109 private boolean isFinal = false;
110
111 /**
112 * A flag indicating whether or not the object associated
113 * with this JModifiers is abstract
114 **/
115 private boolean isAbstract = false;
116
117 /**
118 * A flag indicating whether or not the object associated
119 * with this JModifiers is transient
120 **/
121 private boolean isTransient = false;
122
123 /**
124 * Creates a new JModifiers class, by default the
125 * modifiers presented are public.
126 **/
127 public JModifiers() {
128 super();
129 } // -- JModifiers
130
131 /**
132 * Creates a new JModifiers
133 * @param visibility the visibile qualifier
134 * @param isStatic a boolean indicating the static qualifier.
135 * A value of true indicates that this static qualifier is present.
136 * @param isFinal a boolean indicating the final qualifier. A value
137 * of true indicates that the final qualifier is present.
138 **/
139 private JModifiers(short visibility, boolean isStatic, boolean isFinal) {
140 this.visibility = visibility;
141 this.isStatic = isStatic;
142 this.isFinal = isFinal;
143 } // -- JModifiers
144
145 /**
146 * Creates a copy of this JModifiers
147 * @return the copy of this JModifiers
148 **/
149 public JModifiers copy() {
150 JModifiers mods = new JModifiers(visibility, isStatic, isFinal);
151 mods.setAbstract(isAbstract);
152 mods.setTransient(isTransient);
153 return mods;
154 } // -- copy
155
156 /**
157 * Changes the visibility qualifier to "private"
158 **/
159 public void makePrivate() {
160 this.visibility = vPrivate;
161 } // -- makePrivate
162
163 /**
164 * Changes the visibility qualifier to "protected"
165 **/
166 public void makeProtected() {
167 this.visibility = vProtected;
168 } // -- makeProtected
169
170 /**
171 * Changes the visibility qualifier to "public"
172 **/
173 public void makePublic() {
174 this.visibility = vPublic;
175 } // -- makePublic
176
177 /**
178 * Changes the visibility qualifier to package (= without qualifier).
179 **/
180 public void makePackage() {
181 this.visibility = vPackage;
182 } // -- makePackage
183
184 /**
185 * Returns true if the abstract qualifier is present.
186 * <BR> This is only applicable to methods and classes.
187 * @return true if the abstract qualifier is present
188 **/
189 public boolean isAbstract() {
190 return isAbstract;
191 } // -- isAbstract
192
193 /**
194 * Returns true if the final qualifier is present.
195 * <BR> This is only applicable to methods and classes.
196 * @return true if the final qualifier is present
197 **/
198 public boolean isFinal() {
199 return isFinal;
200 } // -- isFinal
201
202 /**
203 * Returns true if the modifier represented is private.
204 * @return true if the modifier represented is private.
205 **/
206 public boolean isPrivate() {
207 return (visibility == vPrivate);
208 } // -- isPrivate
209
210 /**
211 * Returns true if the modifier represented is protected.
212 * @return true if the modifier represented is protected.
213 **/
214 public boolean isProtected() {
215 return (visibility == vProtected);
216 } // -- isProtected
217
218 /**
219 * Returns true if the modifier represented is public.
220 * @return true if the modifier represented is public.
221 **/
222 public boolean isPublic() {
223 return (visibility == vPublic);
224 } // -- isPublic
225
226 /**
227 * Returns true if the modifier represented is package (= without qualifier).
228 * @return true if the modifier represented is package (= without qualifier).
229 **/
230 public boolean isPackage() {
231 return (visibility == vPackage);
232 } // -- isPackage
233
234 /**
235 * Returns true if the modifier represented is static.
236 * @return true if the modifier represented is static.
237 **/
238 public boolean isStatic() {
239 return this.isStatic;
240 } // -- isPublic
241
242 /**
243 * Returns true if the modifier represented is transient.
244 * @return true if the modifier represented is transient.
245 **/
246 public boolean isTransient() {
247 return this.isTransient;
248 } // -- isTransient
249
250 /**
251 * Sets whether or not the "abstract" qualifier is present
252 * <BR> This applies only to methods or classes.
253 * @param isAbstract is a boolean which when true will indicate
254 * that the abstract qualifier should be present
255 **/
256 public void setAbstract(boolean isAbstract) {
257 this.isAbstract = isAbstract;
258 } // -- setAbstract
259
260 /**
261 * Sets whether or not the "final" qualifier is present
262 * @param isFinal is a boolean which when true will indicate
263 * the final qualifiter is present
264 **/
265 public void setFinal(boolean isFinal) {
266 this.isFinal = isFinal;
267 } // -- setFinal
268
269 /**
270 * Sets whether or not the "static" qualifier is present
271 * @param isStatic is a boolean which when true will indicate
272 * the "static" qualifiter is present
273 **/
274 public void setStatic(boolean isStatic) {
275 this.isStatic = isStatic;
276 } // -- setStatic
277
278 /**
279 * Sets whether or not the "transient" qualifier is present
280 * @param isTransient is a boolean which when true will indicate
281 * the "transient" qualifiter is present
282 **/
283 public void setTransient(boolean isTransient) {
284 this.isTransient = isTransient;
285 } // -- setTransient
286
287 /**
288 * Returns the String represetation of this JModifiers
289 * @return the String represetation of this JModifiers
290 **/
291 public String toString() {
292 StringBuilder sb = new StringBuilder();
293
294 // -- visibility
295 switch (visibility) {
296 case vPrivate:
297 sb.append(sPrivate);
298 break;
299 case vProtected:
300 sb.append(sProtected);
301 break;
302 case vPackage:
303 sb.append(sPackage);
304 break;
305 default:
306 sb.append(sPublic);
307 break;
308 }
309
310 // -- static
311 if (isStatic) {
312 if (sb.length() > 0) {
313 sb.append(' ');
314 }
315 sb.append(sStatic);
316 }
317
318 // -- final
319 if (isFinal) {
320 if (sb.length() > 0) {
321 sb.append(' ');
322 }
323 sb.append(sFinal);
324 }
325
326 // -- abstract
327 if (isAbstract) {
328 if (sb.length() > 0) {
329 sb.append(' ');
330 }
331 sb.append(sAbstract);
332 }
333
334 // -- transient
335 if (isTransient) {
336 if (sb.length() > 0) {
337 sb.append(' ');
338 }
339 sb.append(sTransient);
340 }
341
342 return sb.toString();
343 } // -- toString
344 } // -- JModifiers