X-Git-Url: http://git.megacz.com/?p=org.ibex.classgen.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fclassgen%2FType.java;h=e301414a66d981d4030f4348ce83d5fc29050161;hp=ec5a30a83363075e43743f2a177293bfe7080108;hb=2b7157f2b687f5500bf45ab2c9175ef1b33ccc48;hpb=cd0ae78576749ddda5d9dfda5b9e88dd78fda0c9 diff --git a/src/org/ibex/classgen/Type.java b/src/org/ibex/classgen/Type.java index ec5a30a..e301414 100644 --- a/src/org/ibex/classgen/Type.java +++ b/src/org/ibex/classgen/Type.java @@ -25,7 +25,7 @@ public class Type { final String descriptor; - Type(String descriptor) { this.descriptor = descriptor; } + protected Type(String descriptor) { this.descriptor = descriptor; } public static Type fromDescriptor(String descriptor) { if(descriptor.equals("V")) return VOID; @@ -37,6 +37,8 @@ public class Type { if(descriptor.equals("B")) return BYTE; if(descriptor.equals("C")) return CHAR; if(descriptor.equals("S")) return SHORT; + if(descriptor.endsWith("[")) return new Type.Array(fromDescriptor(descriptor.substring(0, descriptor.indexOf('['))), + descriptor.length() - descriptor.indexOf('[')); if(Type.Object.validDescriptorString(descriptor)) return new Type.Object(descriptor); return null; } @@ -56,20 +58,22 @@ public class Type { @param dim Number if dimensions @return A one dimensional array of the base type */ - public static Type arrayType(Type base, int dim) { - StringBuffer sb = new StringBuffer(base.descriptor.length() + dim); - for(int i=0;is can be a string in the form "java.lang.String", "java/lang/String", or "Ljava/lang/String;". @param s The type */ - public Object(String s) { super(_initHelper(s)); } - + protected Object(String s) { super(_initHelper(s)); } + public Type.Object asObject() { return this; } + public boolean isObject() { return true; } + private static String _initHelper(String s) { if(!s.startsWith("L") || !s.endsWith(";")) s = "L" + s.replace('.','/') + ";"; if(!validDescriptorString(s)) throw new IllegalArgumentException("invalid descriptor string"); @@ -89,4 +93,17 @@ public class Type { return s.startsWith("L") && s.endsWith(";"); } } + + public static class Array extends Object { + protected Array(Type t, int dim) { super(arrayify(t,dim)); } + public Type.Array asArray() { return this; } + public boolean isArray() { return true; } + private static String arrayify(Type t, int dim) { + StringBuffer sb = new StringBuffer(t.descriptor.length() + dim); + for(int i=0;i