X-Git-Url: http://git.megacz.com/?p=org.ibex.classgen.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fclassgen%2FClassFile.java;h=46f5e3effb1213e1b886574abff7fc73f5aa9010;hp=dd2247c0da72bc60a8a5913527ad202b3a93cdd8;hb=ee8153750ac8739205d01ef5db7968d34fdd316b;hpb=6abee913e85e5f9ab983342c7b304069ab8fe00f diff --git a/src/org/ibex/classgen/ClassFile.java b/src/org/ibex/classgen/ClassFile.java index dd2247c..46f5e3e 100644 --- a/src/org/ibex/classgen/ClassFile.java +++ b/src/org/ibex/classgen/ClassFile.java @@ -4,57 +4,67 @@ import java.util.*; import java.io.*; /** Class generation object representing the whole classfile */ -public class ClassFile implements CGConst { +public class ClassFile extends Type.Class.Body { private final Type.Class thisType; - private final Type.Class superType; - private final Type.Class[] interfaces; + final Type.Class superType; + final Type.Class[] interfaces; private final short minor; private final short major; - final int flags; private final Vector fields = new Vector(); private final Vector methods = new Vector(); - - private final AttrGen attributes; + public Type.Class.Method.Body[] methods() { + Type.Class.Method.Body[] ret = new Type.Class.Method.Body[methods.size()]; + methods.copyInto(ret); + return ret; + } + + public Type.Class.Field.Body[] fields() { + Type.Class.Field.Body[] ret = new Type.Class.Field.Body[fields.size()]; + fields.copyInto(ret); + return ret; + } + static String flagsToString(int flags, boolean isClass) { StringBuffer sb = new StringBuffer(32); - if ((flags & ACC_PUBLIC) != 0) sb.append("public "); - if ((flags & ACC_PRIVATE) != 0) sb.append("private "); - if ((flags & ACC_PROTECTED) != 0) sb.append("protected "); - if ((flags & ACC_STATIC) != 0) sb.append("static "); - if ((flags & ACC_FINAL) != 0) sb.append("final "); - if ((flags & ACC_ABSTRACT) != 0) sb.append("abstract "); - if (!isClass && (flags & ACC_SYNCHRONIZED) != 0) sb.append("synchronized "); - if (!isClass && (flags & ACC_NATIVE) != 0) sb.append("native "); - if (!isClass && (flags & ACC_STRICT) != 0) sb.append("strictfp "); - if (!isClass && (flags & ACC_VOLATILE) != 0) sb.append("volatile "); - if (!isClass && (flags & ACC_TRANSIENT) != 0) sb.append("transient "); + if ((flags & PUBLIC) != 0) sb.append("public "); + if ((flags & PRIVATE) != 0) sb.append("private "); + if ((flags & PROTECTED) != 0) sb.append("protected "); + if ((flags & STATIC) != 0) sb.append("static "); + if ((flags & FINAL) != 0) sb.append("final "); + if ((flags & ABSTRACT) != 0) sb.append("abstract "); + if (!isClass && (flags & SYNCHRONIZED) != 0) sb.append("synchronized "); + if (!isClass && (flags & NATIVE) != 0) sb.append("native "); + if (!isClass && (flags & STRICT) != 0) sb.append("strictfp "); + if (!isClass && (flags & VOLATILE) != 0) sb.append("volatile "); + if (!isClass && (flags & TRANSIENT) != 0) sb.append("transient "); return sb.toString(); } public Type.Class getType() { return thisType; } + public int getFlags() { return flags; } - String debugToString() { return debugToString(new StringBuffer(4096)).toString(); } - StringBuffer debugToString(StringBuffer sb) { + public String toString() { return toString(new StringBuffer(4096)).toString(); } + StringBuffer toString(StringBuffer sb) { sb.append(flagsToString(flags,true)); - sb.append((flags & ACC_INTERFACE) != 0 ? "interface " : "class "); - sb.append(thisType.debugToString()); - if (superType != null) sb.append(" extends " + superType.debugToString()); + sb.append((flags & INTERFACE) != 0 ? "interface " : "class "); + sb.append(thisType.toString()); + if (superType != null) sb.append(" extends " + superType.toString()); if (interfaces != null && interfaces.length > 0) sb.append(" implements"); - for(int i=0; i