package org.ibex.classgen; import java.util.*; import java.io.*; /** Class generation object representing the whole classfile */ public class ClassFile extends Type.Class.Body { private final Type.Class thisType; final Type.Class superType; final Type.Class[] interfaces; private final short minor; private final short major; private final Vector fields = new Vector(); private final Vector methods = new Vector(); 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 & 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; } public String toString() { return toString(new StringBuffer(4096)).toString(); } StringBuffer toString(StringBuffer sb) { sb.append(flagsToString(flags,true)); 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; if is a directory directory components under it are created for the package the class is in (like javac's -d option) @see ClassFile#dump(OutputStream) */ public void dump(File f) throws IOException { if(f.isDirectory()) { String[] a = thisType.components(); int i; for(i=0;i= 2 && args[0].equals("copyto")) { File dest = new File(args[1]); dest.mkdirs(); for(int i=2;i