X-Git-Url: http://git.megacz.com/?p=org.ibex.classgen.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fclassgen%2FClassFile.java;h=32bda60d830125e2dc5c590adde31a0b2510e419;hp=29b8d7f2e7f6e132b0c47f44b170945f10493014;hb=e70f9a95d3058a30dc93d8d45078ece8bb7a7dc6;hpb=69b2d27ebab56f1b0e4df2a3a301f4d852439e8e diff --git a/src/org/ibex/classgen/ClassFile.java b/src/org/ibex/classgen/ClassFile.java index 29b8d7f..32bda60 100644 --- a/src/org/ibex/classgen/ClassFile.java +++ b/src/org/ibex/classgen/ClassFile.java @@ -4,90 +4,76 @@ 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; - private short minor; - private short major; + private final short minor; + private final short major; final int flags; - private String sourceFile; private final Vector fields = new Vector(); - private final Vector methods = new Vector(); + public final Vector methods = new Vector(); - final CPGen cp; private final AttrGen attributes; - public static String flagsToString(int flags) { - String ret = ""; - if ((flags & ACC_PUBLIC) != 0) ret += "public "; - if ((flags & ACC_PRIVATE) != 0) ret += "private "; - if ((flags & ACC_PROTECTED) != 0) ret += "protected "; - if ((flags & ACC_STATIC) != 0) ret += "static "; - if ((flags & ACC_FINAL) != 0) ret += "final "; - if ((flags & ACC_ABSTRACT) != 0) ret += "abstract "; - if ((flags & ACC_SYNCHRONIZED) != 0) ret += "synchronized "; - if ((flags & ACC_NATIVE) != 0) ret += "native "; - if ((flags & ACC_STRICT) != 0) ret += "strictfp "; - if ((flags & ACC_VOLATILE) != 0) ret += "volatile "; - if ((flags & ACC_TRANSIENT) != 0) ret += "transient "; - return ret; + static String flagsToString(int flags, boolean isClass) { + StringBuffer sb = new StringBuffer(32); + 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 String toString() { StringBuffer sb = new StringBuffer(); toString(sb); return sb.toString(); } - public void toString(StringBuffer sb) { - sb.append(flagsToString(flags)); - sb.append((flags & ACC_INTERFACE) != 0 ? "interface " : "class "); - sb.append(thisType); - if (superType != null) sb.append(" extends " + superType); + public int getFlags() { return flags; } + + String debugToString() { return debugToString(new StringBuffer(4096)).toString(); } + StringBuffer debugToString(StringBuffer sb) { + sb.append(flagsToString(flags,true)); + sb.append((flags & INTERFACE) != 0 ? "interface " : "class "); + sb.append(thisType.debugToString()); + if (superType != null) sb.append(" extends " + superType.debugToString()); if (interfaces != null && interfaces.length > 0) sb.append(" implements"); - for(int i=0; i= 2 && args[0].equals("copyto")) { + File dest = new File(args[1]); + dest.mkdirs(); + for(int i=2;i