1 16 17 package org.cojen.classfile; 18 19 import java.lang.reflect.Modifier ; 20 21 29 public class Modifiers { 30 public static final Modifiers NONE; 31 public static final Modifiers PUBLIC; 32 public static final Modifiers PUBLIC_ABSTRACT; 33 public static final Modifiers PUBLIC_STATIC; 34 public static final Modifiers PROTECTED; 35 public static final Modifiers PRIVATE; 36 37 static { 38 NONE = new Modifiers(0); 39 PUBLIC = new Modifiers(Modifier.PUBLIC); 40 PUBLIC_ABSTRACT = new Modifiers(Modifier.PUBLIC | Modifier.ABSTRACT); 41 PUBLIC_STATIC = new Modifiers(Modifier.PUBLIC | Modifier.STATIC); 42 PROTECTED = new Modifiers(Modifier.PROTECTED); 43 PRIVATE = new Modifiers(Modifier.PRIVATE); 44 } 45 46 49 public static Modifiers getInstance(int bitmask) { 50 switch (bitmask) { 51 case 0: 52 return NONE; 53 case Modifier.PUBLIC: 54 return PUBLIC; 55 case Modifier.PUBLIC | Modifier.ABSTRACT: 56 return PUBLIC_ABSTRACT; 57 case Modifier.PUBLIC | Modifier.STATIC: 58 return PUBLIC_STATIC; 59 case Modifier.PROTECTED: 60 return PROTECTED; 61 case Modifier.PRIVATE: 62 return PRIVATE; 63 } 64 65 return new Modifiers(bitmask); 66 } 67 68 private static int toPublic(int bitmask, boolean b) { 69 if (b) { 70 return (bitmask | Modifier.PUBLIC) & (~Modifier.PROTECTED & ~Modifier.PRIVATE); 71 } else { 72 return bitmask & ~Modifier.PUBLIC; 73 } 74 } 75 76 private static int toPrivate(int bitmask, boolean b) { 77 if (b) { 78 return (bitmask | Modifier.PRIVATE) & (~Modifier.PUBLIC & ~Modifier.PROTECTED); 79 } else { 80 return bitmask & ~Modifier.PRIVATE; 81 } 82 } 83 84 private static int toProtected(int bitmask, boolean b) { 85 if (b) { 86 return (bitmask | Modifier.PROTECTED) & (~Modifier.PUBLIC & ~Modifier.PRIVATE); 87 } else { 88 return bitmask & ~Modifier.PROTECTED; 89 } 90 } 91 92 private static int toStatic(int bitmask, boolean b) { 93 if (b) { 94 return bitmask | Modifier.STATIC; 95 } else { 96 return bitmask & ~Modifier.STATIC; 97 } 98 } 99 100 private static int toFinal(int bitmask, boolean b) { 101 if (b) { 102 return (bitmask | Modifier.FINAL) & (~Modifier.INTERFACE & ~Modifier.ABSTRACT); 103 } else { 104 return bitmask & ~Modifier.FINAL; 105 } 106 } 107 108 private static int toSynchronized(int bitmask, boolean b) { 109 if (b) { 110 return (bitmask | Modifier.SYNCHRONIZED) & 111 (~Modifier.VOLATILE & ~Modifier.TRANSIENT & ~Modifier.INTERFACE); 112 } else { 113 return bitmask & ~Modifier.SYNCHRONIZED; 114 } 115 } 116 117 private static int toVolatile(int bitmask, boolean b) { 118 if (b) { 119 return (bitmask | Modifier.VOLATILE) & 120 (~Modifier.SYNCHRONIZED & ~Modifier.NATIVE & ~Modifier.INTERFACE & 121 ~Modifier.ABSTRACT & ~Modifier.STRICT); 122 } else { 123 return bitmask & ~Modifier.VOLATILE; 124 } 125 } 126 127 private static int toTransient(int bitmask, boolean b) { 128 if (b) { 129 return (bitmask | Modifier.TRANSIENT) & 130 (~Modifier.SYNCHRONIZED & ~Modifier.NATIVE & 131 ~Modifier.INTERFACE & ~Modifier.ABSTRACT & ~Modifier.STRICT); 132 } else { 133 return bitmask & ~Modifier.TRANSIENT; 134 } 135 } 136 137 private static int toNative(int bitmask, boolean b) { 138 if (b) { 139 return (bitmask | Modifier.NATIVE) & 140 (~Modifier.VOLATILE & ~Modifier.TRANSIENT & 141 ~Modifier.INTERFACE & ~Modifier.ABSTRACT & ~Modifier.STRICT); 142 } else { 143 return bitmask & ~Modifier.NATIVE; 144 } 145 } 146 147 private static int toInterface(int bitmask, boolean b) { 148 if (b) { 149 return (bitmask | (Modifier.INTERFACE | Modifier.ABSTRACT)) & 150 (~Modifier.FINAL & ~Modifier.SYNCHRONIZED & 151 ~Modifier.VOLATILE & ~Modifier.TRANSIENT & ~Modifier.NATIVE); 152 } else { 153 return bitmask & ~Modifier.INTERFACE; 154 } 155 } 156 157 private static int toAbstract(int bitmask, boolean b) { 158 if (b) { 159 return (bitmask | Modifier.ABSTRACT) & 160 (~Modifier.FINAL & ~Modifier.VOLATILE & ~Modifier.TRANSIENT & ~Modifier.NATIVE & 161 ~Modifier.SYNCHRONIZED & ~Modifier.STRICT); 162 } else { 163 return bitmask & ~Modifier.ABSTRACT & ~Modifier.INTERFACE; 164 } 165 } 166 167 private static int toStrict(int bitmask, boolean b) { 168 if (b) { 169 return bitmask | Modifier.STRICT; 170 } else { 171 return bitmask & ~Modifier.STRICT; 172 } 173 } 174 175 private static int toBridge(int bitmask, boolean b) { 176 if (b) { 179 return (bitmask | Modifier.VOLATILE) & 180 (~Modifier.NATIVE & ~Modifier.INTERFACE & ~Modifier.ABSTRACT); 181 } else { 182 return bitmask & ~Modifier.VOLATILE; 183 } 184 } 185 186 private static int toEnum(int bitmask, boolean b) { 187 if (b) { 190 return (bitmask | Modifier.NATIVE) & 191 (~Modifier.ABSTRACT & ~Modifier.INTERFACE & 192 ~Modifier.STRICT & ~Modifier.SYNCHRONIZED); 193 } else { 194 return bitmask & ~Modifier.NATIVE; 195 } 196 } 197 198 private static int toVarArgs(int bitmask, boolean b) { 199 if (b) { 202 return (bitmask | Modifier.TRANSIENT) & 203 (~Modifier.INTERFACE & ~Modifier.VOLATILE); 204 } else { 205 return bitmask & ~Modifier.TRANSIENT; 206 } 207 } 208 209 private final int mBitmask; 210 211 private Modifiers(int bitmask) { 212 mBitmask = bitmask; 213 } 214 215 218 public final int getBitmask() { 219 return mBitmask; 220 } 221 222 public boolean isPublic() { 223 return Modifier.isPublic(mBitmask); 224 } 225 226 public boolean isPrivate() { 227 return Modifier.isPrivate(mBitmask); 228 } 229 230 public boolean isProtected() { 231 return Modifier.isProtected(mBitmask); 232 } 233 234 public boolean isStatic() { 235 return Modifier.isStatic(mBitmask); 236 } 237 238 public boolean isFinal() { 239 return Modifier.isFinal(mBitmask); 240 } 241 242 public boolean isSynchronized() { 243 return Modifier.isSynchronized(mBitmask); 244 } 245 246 public boolean isVolatile() { 247 return Modifier.isVolatile(mBitmask); 248 } 249 250 public boolean isTransient() { 251 return Modifier.isTransient(mBitmask); 252 } 253 254 public boolean isNative() { 255 return Modifier.isNative(mBitmask); 256 } 257 258 public boolean isInterface() { 259 return Modifier.isInterface(mBitmask); 260 } 261 262 public boolean isAbstract() { 263 return Modifier.isAbstract(mBitmask); 264 } 265 266 public boolean isStrict() { 267 return Modifier.isStrict(mBitmask); 268 } 269 270 public boolean isBridge() { 271 return Modifier.isVolatile(mBitmask); 272 } 273 274 public boolean isEnum() { 275 return Modifier.isNative(mBitmask); 276 } 277 278 public boolean isVarArgs() { 279 return Modifier.isTransient(mBitmask); 280 } 281 282 287 public Modifiers toPublic(boolean b) { 288 return convert(toPublic(mBitmask, b)); 289 } 290 291 296 public Modifiers toPrivate(boolean b) { 297 return convert(toPrivate(mBitmask, b)); 298 } 299 300 305 public Modifiers toProtected(boolean b) { 306 return convert(toProtected(mBitmask, b)); 307 } 308 309 312 public Modifiers toStatic(boolean b) { 313 return convert(toStatic(mBitmask, b)); 314 } 315 316 322 public Modifiers toFinal(boolean b) { 323 return convert(toFinal(mBitmask, b)); 324 } 325 326 331 public Modifiers toSynchronized(boolean b) { 332 return convert(toSynchronized(mBitmask, b)); 333 } 334 335 340 public Modifiers toVolatile(boolean b) { 341 return convert(toVolatile(mBitmask, b)); 342 } 343 344 349 public Modifiers toTransient(boolean b) { 350 return convert(toTransient(mBitmask, b)); 351 } 352 353 358 public Modifiers toNative(boolean b) { 359 return convert(toNative(mBitmask, b)); 360 } 361 362 368 public Modifiers toInterface(boolean b) { 369 return convert(toInterface(mBitmask, b)); 370 } 371 372 379 public Modifiers toAbstract(boolean b) { 380 return convert(toAbstract(mBitmask, b)); 381 } 382 383 386 public Modifiers toStrict(boolean b) { 387 return convert(toStrict(mBitmask, b)); 388 } 389 390 395 public Modifiers toBridge(boolean b) { 396 return convert(toBridge(mBitmask, b)); 397 } 398 399 404 public Modifiers toEnum(boolean b) { 405 return convert(toEnum(mBitmask, b)); 406 } 407 408 414 public Modifiers toVarArgs(boolean b) { 415 return convert(toVarArgs(mBitmask, b)); 416 } 417 418 public int hashCode() { 419 return mBitmask; 420 } 421 422 public boolean equals(Object obj) { 423 if (this == obj) { 424 return true; 425 } 426 if (obj instanceof Modifiers) { 427 Modifiers other = (Modifiers)obj; 428 return mBitmask == other.mBitmask; 429 } 430 return false; 431 } 432 433 438 public String toString() { 439 return Modifier.toString(mBitmask); 440 } 441 442 private Modifiers convert(int bitmask) { 443 return bitmask == mBitmask ? this : getInstance(bitmask); 444 } 445 } 446 | Popular Tags |