1 cananian 1.1.2.2 // AccessFlags.java, created Mon Jan 18 22:44:33 1999 by cananian 2 cananian 1.1.2.1 // Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu> 3 cananian 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 cananian 1.1.2.1 package harpoon.IR.RawClass; 5 cananian 1.1.2.1 6 cananian 1.1.2.1 /** 7 cananian 1.1.2.1 * Represents a set of method or field access flags, containing 8 cananian 1.1.2.1 * permissions and properties of a field or method. 9 cananian 1.1.2.1 * 10 cananian 1.1.2.1 * @author C. Scott Ananian <cananian@alumni.princeton.edu> 11 cananian 1.3 * @version $Id: AccessFlags.java,v 1.3 2002/04/10 03:05:30 cananian Exp $ 12 cananian 1.1.2.1 * @see "The Java Virtual Machine Specification" 13 cananian 1.1.2.1 * @see ClassFile 14 cananian 1.1.2.1 * @see FieldInfo 15 cananian 1.1.2.1 * @see MethodInfo 16 cananian 1.1.2.1 */ 17 cananian 1.1.2.1 public class AccessFlags { 18 cananian 1.1.2.1 /** May be accessed from outside package. */ 19 cananian 1.1.2.1 static final int ACC_PUBLIC = 0x001; 20 cananian 1.1.2.1 /** Usable only within defining class. */ 21 cananian 1.1.2.1 static final int ACC_PRIVATE = 0x002; 22 cananian 1.1.2.1 /** May be accessed withing subclasses. */ 23 cananian 1.1.2.1 static final int ACC_PROTECTED=0x004; 24 cananian 1.1.2.1 /** Is static. */ 25 cananian 1.1.2.1 static final int ACC_STATIC = 0x008; 26 cananian 1.1.2.1 /** No further assignment after init. */ 27 cananian 1.1.2.1 static final int ACC_FINAL = 0x010; 28 cananian 1.1.2.1 /** Wrap use in monitor lock. */ 29 cananian 1.1.2.1 static final int ACC_SYNCHRON= 0x020; 30 cananian 1.1.2.1 /** Use new superclass semantics. */ 31 cananian 1.1.2.1 static final int ACC_SUPER = 0x020; 32 cananian 1.1.2.1 /** Is volatile; cannot be cached. */ 33 cananian 1.1.2.1 static final int ACC_VOLATILE= 0x040; 34 cananian 1.1.2.1 /** Not touched by persistent object manager. */ 35 cananian 1.1.2.1 static final int ACC_TRANSIENT=0x080; 36 cananian 1.1.2.1 /** Not implemented in Java. */ 37 cananian 1.1.2.1 static final int ACC_NATIVE =0x100; 38 cananian 1.1.2.1 /** Is an interface. */ 39 cananian 1.1.2.1 static final int ACC_INTERFACE=0x200; 40 cananian 1.1.2.1 /** No implementation is provided. */ 41 cananian 1.1.2.1 static final int ACC_ABSTRACT =0x400; 42 cananian 1.2.2.1 /** Floating-point mode is FP-strict. */ 43 cananian 1.2.2.1 static final int ACC_STRICT =0x800; 44 cananian 1.1.2.1 45 cananian 1.1.2.1 public int access_flags; 46 cananian 1.1.2.1 47 cananian 1.1.2.1 /** Constructor. */ 48 cananian 1.1.2.1 public AccessFlags(int flags) { 49 cananian 1.1.2.1 access_flags = flags; 50 cananian 1.1.2.1 } 51 cananian 1.1.2.1 /** Constructor. */ 52 cananian 1.1.2.1 public AccessFlags(ClassDataInputStream in) throws java.io.IOException { 53 cananian 1.1.2.1 this(in.read_u2()); 54 cananian 1.1.2.1 } 55 cananian 1.1.2.1 /** Write to bytecode file. */ 56 cananian 1.1.2.1 public void write(ClassDataOutputStream out) throws java.io.IOException { 57 cananian 1.1.2.1 out.write_u2(access_flags); 58 cananian 1.1.2.1 } 59 cananian 1.1.2.1 60 cananian 1.1.2.1 public boolean isPublic() { return (access_flags & ACC_PUBLIC) != 0; } 61 cananian 1.1.2.1 public boolean isPrivate() { return (access_flags & ACC_PRIVATE) != 0; } 62 cananian 1.1.2.1 public boolean isProtected(){ return (access_flags & ACC_PROTECTED) != 0; } 63 cananian 1.1.2.1 public boolean isStatic() { return (access_flags & ACC_STATIC) != 0; } 64 cananian 1.1.2.1 public boolean isFinal() { return (access_flags & ACC_FINAL) != 0; } 65 cananian 1.1.2.1 public boolean isVolatile() { return (access_flags & ACC_VOLATILE) != 0; } 66 cananian 1.1.2.1 public boolean isTransient(){ return (access_flags & ACC_TRANSIENT) != 0; } 67 cananian 1.1.2.1 public boolean isSynchronized(){return(access_flags& ACC_SYNCHRON) != 0; } 68 cananian 1.1.2.1 public boolean isNative() { return (access_flags & ACC_NATIVE) != 0; } 69 cananian 1.1.2.1 public boolean isAbstract() { return (access_flags & ACC_ABSTRACT) != 0; } 70 cananian 1.1.2.1 public boolean isSuper() { return (access_flags & ACC_SUPER) != 0; } 71 cananian 1.1.2.1 public boolean isInterface(){ return (access_flags & ACC_INTERFACE) != 0; } 72 cananian 1.2.2.1 public boolean isStrict() { return (access_flags & ACC_STRICT) != 0; } 73 cananian 1.1.2.1 74 cananian 1.1.2.1 // ClassFile uses: PUBLIC, FINAL, SUPER, INTERFACE, ABSTRACT. 75 cananian 1.1.2.1 // FieldInfo uses: PUBLIC, PRIVATE, PROTECTED, STATIC, FINAL, 76 cananian 1.1.2.1 // VOLATILE, TRANSIENT. 77 cananian 1.1.2.1 // MethodInfo uses: PUBLIC, PRIVATE, PROTECTED, STATIC, FINAL, 78 cananian 1.2.2.1 // SYNCHRONIZED, NATIVE, ABSTRACT, STRICT. 79 cananian 1.1.2.1 80 cananian 1.1.2.1 /** 81 cananian 1.1.2.1 * Returns a string with the access flags in canonical order. 82 cananian 1.1.2.1 * Omits ACC_SUPER and ACC_INTERFACE. 83 cananian 1.1.2.1 */ 84 cananian 1.1.2.1 public String toString() { 85 cananian 1.1.2.1 StringBuffer r = new StringBuffer(); 86 cananian 1.1.2.1 if (isPublic()) r.append("public "); 87 cananian 1.1.2.1 if (isProtected()) r.append("protected "); 88 cananian 1.1.2.1 if (isPrivate()) r.append("private "); 89 cananian 1.1.2.1 if (isAbstract()) r.append("abstract "); 90 cananian 1.1.2.1 if (isStatic()) r.append("static "); 91 cananian 1.1.2.1 if (isFinal()) r.append("final "); 92 cananian 1.1.2.1 if (isTransient()) r.append("transient "); 93 cananian 1.1.2.1 if (isVolatile()) r.append("volatile "); 94 cananian 1.1.2.1 if (isSynchronized()) r.append("synchronized "); 95 cananian 1.1.2.1 if (isNative()) r.append("native "); 96 cananian 1.2.2.1 if (isStrict()) r.append("strictfp "); 97 cananian 1.1.2.1 return r.toString().trim(); 98 cananian 1.1.2.1 } 99 cananian 1.2 }