X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fclassgen%2FClassGen.java;h=f4c1a0348280197667357dbba49abc43c0d9dc0d;hb=61c79c5fd88e1017446c804adcafde230f4d90e8;hp=16e10e7e47b506fff5bc5a364392636fcd3a86d3;hpb=bc9112573cba51be5e7d285ccd3e496be4278c63;p=org.ibex.classgen.git diff --git a/src/org/ibex/classgen/ClassGen.java b/src/org/ibex/classgen/ClassGen.java index 16e10e7..f4c1a03 100644 --- a/src/org/ibex/classgen/ClassGen.java +++ b/src/org/ibex/classgen/ClassGen.java @@ -3,58 +3,160 @@ package org.ibex.classgen; import java.util.*; import java.io.*; +/** Class generation object representing the whole classfile */ public class ClassGen implements CGConst { - private Type.Object thisType; - private Type.Object superType; - int flags; + private final Type.Object thisType; + private final Type.Object superType; + private final Type.Object[] interfaces; + private short minor; + private short major; + final int flags; - private Vector interfaces = new Vector(); - private Vector fields = new Vector(); - private Vector methods = new Vector(); + private String sourceFile; + private final Vector fields = new Vector(); + private 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; + } + + 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.humanReadable()); + if (superType != null) sb.append(" extends " + superType.humanReadable()); + if (interfaces != null && interfaces.length > 0) sb.append(" implements"); + for(int i=0; if is a directory directory components under it are created for the package the class is in (like javac's -d option) + @see ClassGen#dump(OutputStream) + */ public void dump(File f) throws IOException { if(f.isDirectory()) { String[] a = thisType.components(); int i; for(i=0;i