X-Git-Url: http://git.megacz.com/?p=org.ibex.classgen.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fclassgen%2FType.java;h=cb5548e12aab813966fa7db69d7f5065477d30c9;hp=dd73d70216cfe1bf9b9bbab2ca47a2b61aba3ff6;hb=7f1eaf5d7ee54b09ffd9d91a7f8fc23803d9703a;hpb=bc9112573cba51be5e7d285ccd3e496be4278c63 diff --git a/src/org/ibex/classgen/Type.java b/src/org/ibex/classgen/Type.java index dd73d70..cb5548e 100644 --- a/src/org/ibex/classgen/Type.java +++ b/src/org/ibex/classgen/Type.java @@ -9,6 +9,9 @@ public class Type { public static final Type BOOLEAN = new Type("Z"); public static final Type DOUBLE = new Type("D"); public static final Type FLOAT = new Type("F"); + public static final Type BYTE = new Type("B"); + public static final Type CHAR = new Type("C"); + public static final Type SHORT = new Type("S"); public static final Type.Object OBJECT = new Type.Object("java.lang.Object"); public static final Type.Object STRING = new Type.Object("java.lang.String"); @@ -17,44 +20,100 @@ public class Type { public static final Type.Object DOUBLE_OBJECT = new Type.Object("java.lang.Double"); public static final Type.Object FLOAT_OBJECT = new Type.Object("java.lang.Float"); + /** A zero element Type[] array (can be passed as the "args" param when a method takes no arguments */ public static final Type[] NO_ARGS = new Type[0]; - String descriptor; - - Type() { } - Type(String descriptor) { this.descriptor = descriptor; } + final String descriptor; + + public String humanReadable() { + if (descriptor.equals("V")) return "void"; + if (descriptor.equals("I")) return "int"; + if (descriptor.equals("J")) return "long"; + if (descriptor.equals("Z")) return "boolean"; + if (descriptor.equals("D")) return "double"; + if (descriptor.equals("F")) return "float"; + if (descriptor.equals("B")) return "byte"; + if (descriptor.equals("C")) return "char"; + if (descriptor.equals("S")) return "short"; + throw new Error("confounded by Type("+descriptor+")"); + } + + protected Type(String descriptor) { this.descriptor = descriptor; } + public static Type fromDescriptor(String d) { + if (d.equals("V")) return VOID; + if (d.equals("I")) return INT; + if (d.equals("J")) return LONG; + if (d.equals("Z")) return BOOLEAN; + if (d.equals("D")) return DOUBLE; + if (d.equals("F")) return FLOAT; + if (d.equals("B")) return BYTE; + if (d.equals("C")) return CHAR; + if (d.equals("S")) return SHORT; + if (d.endsWith("[")) + return new Type.Array(fromDescriptor(d.substring(0, d.indexOf('['))), + d.length() - d.indexOf('[')); + return new Type.Object(d); + } + + /** Returns the Java descriptor string for this object ("I", or "Ljava/lang/String", "[[J", etc */ public final String getDescriptor() { return descriptor; } public int hashCode() { return descriptor.hashCode(); } - public boolean equals(Object o) { return o instanceof Type && ((Type)o).descriptor.equals(descriptor); } - - public static Type arrayType(Type base) { return arrayType(base,1); } - public static Type arrayType(Type base, int dim) { - StringBuffer sb = new StringBuffer(base.descriptor.length() + dim); - for(int i=0;i