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 info@exolab.org. 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.exolab.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 package org.exolab.javasource; 44 45 /** 46 * Represents the set of modifiers for a Method or Member variable. 47 * 48 * @author <a href="mailto:keith AT kvisco DOT com">Keith Visco</a> 49 * @version $Revision$ $Date: 2005-02-26 17:30:28 -0700 (Sat, 26 Feb 2005) $ 50 */ 51 public final class JModifiers { 52 //-------------------------------------------------------------------------- 53 54 /** String that marks a method or member as being abstract. */ 55 private static final String ABSTRACT = "abstract"; 56 57 /** String that marks a method or member as being final. */ 58 private static final String FINAL = "final"; 59 60 /** String that marks a method or member as having private scope. */ 61 private static final String PRIVATE = "private"; 62 63 /** String that marks a method or member as having protected scope. */ 64 private static final String PROTECTED = "protected"; 65 66 /** String that marks a method or member as having package scope. */ 67 private static final String PACKAGE = ""; 68 69 /** String that marks a method or member as having public scope. */ 70 private static final String PUBLIC = "public"; 71 72 /** String that marks a method or member as being static. */ 73 private static final String STATIC = "static"; 74 75 /** String that marks a method or member as being transient. */ 76 private static final String TRANSIENT = "transient"; 77 78 /** Visibility is private. */ 79 private static final short VISIBILITY_PRIVATE = 1; 80 81 /** Visibility is protected. */ 82 private static final short VISIBILITY_PROTECTED = 2; 83 84 /** Visibility is public. */ 85 private static final short VISIBILITY_PUBLIC = 3; 86 87 /** Visibility is package. */ 88 private static final short VISIBILITY_PACKAGE = 4; 89 90 //-------------------------------------------------------------------------- 91 92 /** The visibility modifier for the object associated with this JModifiers. */ 93 private short _visibility = VISIBILITY_PUBLIC; 94 95 /** A flag indicating whether or not the object associated with this 96 * JModifiers is static. */ 97 private boolean _isStatic = false; 98 99 /** A flag indicating whether or not the object associated with this 100 * JModifiers is final. */ 101 private boolean _isFinal = false; 102 103 /** A flag indicating whether or not the object associated with this 104 * JModifiers is abstract. */ 105 private boolean _isAbstract = false; 106 107 /** A flag indicating whether or not the object associated with this 108 * JModifiers is transient. */ 109 private boolean _isTransient = false; 110 111 //-------------------------------------------------------------------------- 112 113 /** 114 * Creates a new JModifiers class. By default the only modifier present is 115 * public. 116 */ 117 public JModifiers() { 118 super(); 119 } 120 121 /** 122 * Creates a new JModifiers instance. 123 * 124 * @param visibility The visibility qualifier. 125 * @param isStatic A boolean, if true, indicating that this JModifiers 126 * includes "static" as a qualifier. 127 * @param isFinal A boolean, if true, indicating that this JModifiers 128 * includes "final" as a qualifier. 129 */ 130 private JModifiers(final short visibility, final boolean isStatic, 131 final boolean isFinal) { 132 _visibility = visibility; 133 _isStatic = isStatic; 134 _isFinal = isFinal; 135 } 136 137 //-------------------------------------------------------------------------- 138 139 /** 140 * Creates a copy of this JModifiers instance. 141 * 142 * @return A copy of this JModifiers. 143 */ 144 public JModifiers copy() { 145 JModifiers mods = new JModifiers(_visibility, _isStatic, _isFinal); 146 mods.setAbstract(_isAbstract); 147 mods.setTransient(_isTransient); 148 return mods; 149 } 150 151 //-------------------------------------------------------------------------- 152 153 /** 154 * Changes the visibility qualifier to "private". 155 */ 156 public void makePrivate() { 157 _visibility = VISIBILITY_PRIVATE; 158 } 159 160 /** 161 * Changes the visibility qualifier to "protected". 162 */ 163 public void makeProtected() { 164 _visibility = VISIBILITY_PROTECTED; 165 } 166 167 /** 168 * Changes the visibility qualifier to "public". 169 */ 170 public void makePublic() { 171 _visibility = VISIBILITY_PUBLIC; 172 } 173 174 /** 175 * Changes the visibility qualifier to package (= without qualifier). 176 */ 177 public void makePackage() { 178 _visibility = VISIBILITY_PACKAGE; 179 } 180 181 /** 182 * Returns true if this JModifiers includes the qualifier "final". This 183 * is only applicable to methods and classes. 184 * 185 * @return True if this JModifiers includes the qualifier "final". This 186 * is only applicable to methods and classes. 187 */ 188 public boolean isFinal() { 189 return _isFinal; 190 } 191 192 /** 193 * Returns true if this JModifiers includes the qualifier "abstract". This 194 * is only applicable to methods and classes. 195 * 196 * @return True if this JModifiers includes the qualifier "abstract". This 197 * is only applicable to methods and classes. 198 */ 199 public boolean isAbstract() { 200 return _isAbstract; 201 } 202 203 /** 204 * Returns true if the visibility modifier for this JModifier is "private". 205 * 206 * @return True if the visibility modifier for this JModifier is "private". 207 */ 208 public boolean isPrivate() { 209 return (_visibility == VISIBILITY_PRIVATE); 210 } 211 212 /** 213 * Returns true if the visibility modifier for this JModifier is "protected". 214 * 215 * @return True if the visibility modifier for this JModifier is "protected". 216 */ 217 public boolean isProtected() { 218 return (_visibility == VISIBILITY_PROTECTED); 219 } 220 221 /** 222 * Returns true if the visibility modifier for this JModifier is "public". 223 * 224 * @return True if the visibility modifier for this JModifier is "public". 225 */ 226 public boolean isPublic() { 227 return (_visibility == VISIBILITY_PUBLIC); 228 } 229 230 /** 231 * Returns true if the visibility modifier for this JModifier is package 232 * (i.e., without qualifier). 233 * 234 * @return True if the visibility modifier for this JModifier is package 235 * (i.e., without qualifier). 236 */ 237 public boolean isPackage() { 238 return (_visibility == VISIBILITY_PACKAGE); 239 } 240 241 /** 242 * Returns true if this JModifier includes the qualifier "static". 243 * 244 * @return True if this JModifier includes the qualifier "static". 245 */ 246 public boolean isStatic() { 247 return _isStatic; 248 } 249 250 /** 251 * Returns true if this JModifier includes the qualifier "transient". 252 * 253 * @return True if this JModifier includes the qualifier "transient". 254 */ 255 public boolean isTransient() { 256 return _isTransient; 257 } 258 259 /** 260 * Sets whether or not this JModifiers includes the qualifier "abstract". 261 * This applies only to methods or classes. 262 * 263 * @param isAbstract If true, indicates that this JModifier should include 264 * the qualifier "abstract". 265 */ 266 public void setAbstract(final boolean isAbstract) { 267 _isAbstract = isAbstract; 268 } 269 270 /** 271 * Sets whether or not this JModifiers includes the qualifier "final". 272 * 273 * @param isFinal If true, indicates that this JModifier should include the 274 * qualifier "final". 275 */ 276 public void setFinal(final boolean isFinal) { 277 _isFinal = isFinal; 278 } 279 280 /** 281 * Sets whether or not this JModifiers includes the qualifier "static". 282 * 283 * @param isStatic If true, indicates that this JModifier should include the 284 * qualifier "static". 285 */ 286 public void setStatic(final boolean isStatic) { 287 _isStatic = isStatic; 288 } 289 290 /** 291 * Sets whether or not this JModifiers includes the qualifier "transient". 292 * 293 * @param isTransient Is a boolean which when true indicates that this 294 * JModifier should include the qualifier "transient". 295 */ 296 public void setTransient(final boolean isTransient) { 297 _isTransient = isTransient; 298 } 299 300 //-------------------------------------------------------------------------- 301 302 /** 303 * {@inheritDoc} 304 */ 305 public String toString() { 306 StringBuilder sb = new StringBuilder(); 307 308 //-- visibility 309 switch(_visibility) { 310 case VISIBILITY_PRIVATE: 311 sb.append(PRIVATE); 312 break; 313 case VISIBILITY_PROTECTED: 314 sb.append(PROTECTED); 315 break; 316 case VISIBILITY_PACKAGE: 317 sb.append(PACKAGE); 318 break; 319 default: 320 sb.append(PUBLIC); 321 break; 322 } 323 324 //-- static 325 if (_isStatic) { 326 if (sb.length() > 0) { 327 sb.append(' '); 328 } 329 sb.append(STATIC); 330 } 331 332 //-- final 333 if (_isFinal) { 334 if (sb.length() > 0) { 335 sb.append(' '); 336 } 337 sb.append(FINAL); 338 } 339 340 //-- abstract 341 if (_isAbstract) { 342 if (sb.length() > 0) { 343 sb.append(' '); 344 } 345 sb.append(ABSTRACT); 346 } 347 348 //-- transient 349 if (_isTransient) { 350 if (sb.length() > 0) { 351 sb.append(' '); 352 } 353 sb.append(TRANSIENT); 354 } 355 356 return sb.toString(); 357 } 358 359 //-------------------------------------------------------------------------- 360 }