Fields Summary |
---|
public static final int | VOIDThe sort of the void type. See {@link #getSort getSort}. |
public static final int | BOOLEANThe sort of the boolean type. See {@link #getSort getSort}. |
public static final int | CHARThe sort of the char type. See {@link #getSort getSort}. |
public static final int | BYTEThe sort of the byte type. See {@link #getSort getSort}. |
public static final int | SHORTThe sort of the short type. See {@link #getSort getSort}. |
public static final int | INTThe sort of the int type. See {@link #getSort getSort}. |
public static final int | FLOATThe sort of the float type. See {@link #getSort getSort}. |
public static final int | LONGThe sort of the long type. See {@link #getSort getSort}. |
public static final int | DOUBLEThe sort of the double type. See {@link #getSort getSort}. |
public static final int | ARRAYThe sort of array reference types. See {@link #getSort getSort}. |
public static final int | OBJECTThe sort of object reference type. See {@link #getSort getSort}. |
public static final Type | VOID_TYPEThe void type. |
public static final Type | BOOLEAN_TYPEThe boolean type. |
public static final Type | CHAR_TYPEThe char type. |
public static final Type | BYTE_TYPEThe byte type. |
public static final Type | SHORT_TYPEThe short type. |
public static final Type | INT_TYPEThe int type. |
public static final Type | FLOAT_TYPEThe float type. |
public static final Type | LONG_TYPEThe long type. |
public static final Type | DOUBLE_TYPEThe double type. |
private final int | sortThe sort of this Java type. |
private char[] | bufA buffer containing the descriptor of this Java type.
This field is only used for reference types. |
private int | offThe offset of the descriptor of this Java type in {@link #buf buf}.
This field is only used for reference types. |
private int | lenThe length of the descriptor of this Java type. |
Methods Summary |
---|
public boolean | equals(java.lang.Object o)Tests if the given object is equal to this type.
if (this == o) {
return true;
}
if (o == null || !(o instanceof Type)) {
return false;
}
Type t = (Type)o;
if (sort != t.sort) {
return false;
}
if (sort == Type.OBJECT || sort == Type.ARRAY) {
if (len != t.len) {
return false;
}
for (int i = off, j = t.off, end = i + len; i < end; i++, j++) {
if (buf[i] != t.buf[j]) {
return false;
}
}
}
return true;
|
public static oracle.toplink.libraries.asm.Type[] | getArgumentTypes(java.lang.String methodDescriptor)Returns the Java types corresponding to the argument types of the given
method descriptor.
char[] buf = methodDescriptor.toCharArray();
int off = 1;
int size = 0;
while (true) {
char car = buf[off++];
if (car == ')") {
break;
} else if (car == 'L") {
while (buf[off++] != ';") {
}
++size;
} else if (car != '[") {
++size;
}
}
Type[] args = new Type[size];
off = 1;
size = 0;
while (buf[off] != ')") {
args[size] = getType(buf, off);
off += args[size].len;
size += 1;
}
return args;
|
public static oracle.toplink.libraries.asm.Type[] | getArgumentTypes(java.lang.reflect.Method method)Returns the Java types corresponding to the argument types of the given
method.
Class[] classes = method.getParameterTypes();
Type[] types = new Type[classes.length];
for (int i = classes.length - 1; i >= 0; --i) {
types[i] = getType(classes[i]);
}
return types;
|
public java.lang.String | getClassName()Returns the name of the class corresponding to this type.
switch (sort) {
case VOID: return "void";
case BOOLEAN: return "boolean";
case CHAR: return "char";
case BYTE: return "byte";
case SHORT: return "short";
case INT: return "int";
case FLOAT: return "float";
case LONG: return "long";
case DOUBLE: return "double";
case ARRAY:
StringBuffer b = new StringBuffer(getElementType().getClassName());
for (int i = getDimensions(); i > 0; --i) {
b.append("[]");
}
return b.toString();
//case OBJECT:
default:
return new String(buf, off + 1, len - 2).replace('/", '.");
}
|
public java.lang.String | getDescriptor()Returns the descriptor corresponding to this Java type.
StringBuffer buf = new StringBuffer();
getDescriptor(buf);
return buf.toString();
|
private void | getDescriptor(java.lang.StringBuffer buf)Appends the descriptor corresponding to this Java type to the given string
buffer.
switch (sort) {
case VOID: buf.append('V"); return;
case BOOLEAN: buf.append('Z"); return;
case CHAR: buf.append('C"); return;
case BYTE: buf.append('B"); return;
case SHORT: buf.append('S"); return;
case INT: buf.append('I"); return;
case FLOAT: buf.append('F"); return;
case LONG: buf.append('J"); return;
case DOUBLE: buf.append('D"); return;
//case ARRAY:
//case OBJECT:
default: buf.append(this.buf, off, len);
}
|
public static java.lang.String | getDescriptor(java.lang.Class c)Returns the descriptor corresponding to the given Java type.
StringBuffer buf = new StringBuffer();
getDescriptor(buf, c);
return buf.toString();
|
private static void | getDescriptor(java.lang.StringBuffer buf, java.lang.Class c)Appends the descriptor of the given class to the given string buffer.
Class d = c;
while (true) {
if (d.isPrimitive()) {
char car;
if (d == Integer.TYPE) {
car = 'I";
} else if (d == Void.TYPE) {
car = 'V";
} else if (d == Boolean.TYPE) {
car = 'Z";
} else if (d == Byte.TYPE) {
car = 'B";
} else if (d == Character.TYPE) {
car = 'C";
} else if (d == Short.TYPE) {
car = 'S";
} else if (d == Double.TYPE) {
car = 'D";
} else if (d == Float.TYPE) {
car = 'F";
} else /*if (d == Long.TYPE)*/ {
car = 'J";
}
buf.append(car);
return;
} else if (d.isArray()) {
buf.append('[");
d = d.getComponentType();
} else {
buf.append('L");
String name = d.getName();
int len = name.length();
for (int i = 0; i < len; ++i) {
char car = name.charAt(i);
buf.append(car == '." ? '/" : car);
}
buf.append(';");
return;
}
}
|
public int | getDimensions()Returns the number of dimensions of this array type.
This method should only be used for an array type.
int i = 1;
while (buf[off + i] == '[") {
++i;
}
return i;
|
public oracle.toplink.libraries.asm.Type | getElementType()Returns the type of the elements of this array type.
This method should only be used for an array type.
return getType(buf, off + getDimensions());
|
public java.lang.String | getInternalName()Returns the internal name of the class corresponding to this object type.
The internal name of a class is its fully qualified name, where '.' are
replaced by '/'. This method should only be used for an object type.
return new String(buf, off + 1, len - 2);
|
public static java.lang.String | getInternalName(java.lang.Class c)Returns the internal name of the given class. The internal name of a class
is its fully qualified name, where '.' are replaced by '/'.
return c.getName().replace('.", '/");
|
public static java.lang.String | getMethodDescriptor(oracle.toplink.libraries.asm.Type returnType, oracle.toplink.libraries.asm.Type[] argumentTypes)Returns the descriptor corresponding to the given argument and return
types.
StringBuffer buf = new StringBuffer();
buf.append('(");
for (int i = 0; i < argumentTypes.length; ++i) {
argumentTypes[i].getDescriptor(buf);
}
buf.append(')");
returnType.getDescriptor(buf);
return buf.toString();
|
public static java.lang.String | getMethodDescriptor(java.lang.reflect.Method m)Returns the descriptor corresponding to the given method.
Class[] parameters = m.getParameterTypes();
StringBuffer buf = new StringBuffer();
buf.append('(");
for (int i = 0; i < parameters.length; ++i) {
getDescriptor(buf, parameters[i]);
}
buf.append(')");
getDescriptor(buf, m.getReturnType());
return buf.toString();
|
public int | getOpcode(int opcode)Returns a JVM instruction opcode adapted to this Java type.
if (opcode == Constants.IALOAD || opcode == Constants.IASTORE) {
switch (sort) {
case BOOLEAN:
case BYTE:
return opcode + 5;
case CHAR:
return opcode + 6;
case SHORT:
return opcode + 7;
case INT:
return opcode;
case FLOAT:
return opcode + 2;
case LONG:
return opcode + 1;
case DOUBLE:
return opcode + 3;
//case ARRAY:
//case OBJECT:
default:
return opcode + 4;
}
} else {
switch (sort) {
case VOID:
return opcode + 5;
case BOOLEAN:
case CHAR:
case BYTE:
case SHORT:
case INT:
return opcode;
case FLOAT:
return opcode + 2;
case LONG:
return opcode + 1;
case DOUBLE:
return opcode + 3;
//case ARRAY:
//case OBJECT:
default:
return opcode + 4;
}
}
|
public static oracle.toplink.libraries.asm.Type | getReturnType(java.lang.String methodDescriptor)Returns the Java type corresponding to the return type of the given
method descriptor.
char[] buf = methodDescriptor.toCharArray();
return getType(buf, methodDescriptor.indexOf(')") + 1);
|
public static oracle.toplink.libraries.asm.Type | getReturnType(java.lang.reflect.Method method)Returns the Java type corresponding to the return type of the given
method.
return getType(method.getReturnType());
|
public int | getSize()Returns the size of values of this type.
return (sort == LONG || sort == DOUBLE ? 2 : 1);
|
public int | getSort()Returns the sort of this Java type.
return sort;
|
public static oracle.toplink.libraries.asm.Type | getType(java.lang.String typeDescriptor)Returns the Java type corresponding to the given type descriptor.
return getType(typeDescriptor.toCharArray(), 0);
|
public static oracle.toplink.libraries.asm.Type | getType(java.lang.Class c)Returns the Java type corresponding to the given class.
if (c.isPrimitive()) {
if (c == Integer.TYPE) {
return INT_TYPE;
} else if (c == Void.TYPE) {
return VOID_TYPE;
} else if (c == Boolean.TYPE) {
return BOOLEAN_TYPE;
} else if (c == Byte.TYPE) {
return BYTE_TYPE;
} else if (c == Character.TYPE) {
return CHAR_TYPE;
} else if (c == Short.TYPE) {
return SHORT_TYPE;
} else if (c == Double.TYPE) {
return DOUBLE_TYPE;
} else if (c == Float.TYPE) {
return FLOAT_TYPE;
} else /*if (c == Long.TYPE)*/ {
return LONG_TYPE;
}
} else {
return getType(getDescriptor(c));
}
|
private static oracle.toplink.libraries.asm.Type | getType(char[] buf, int off)Returns the Java type corresponding to the given type descriptor.
int len;
switch (buf[off]) {
case 'V": return VOID_TYPE;
case 'Z": return BOOLEAN_TYPE;
case 'C": return CHAR_TYPE;
case 'B": return BYTE_TYPE;
case 'S": return SHORT_TYPE;
case 'I": return INT_TYPE;
case 'F": return FLOAT_TYPE;
case 'J": return LONG_TYPE;
case 'D": return DOUBLE_TYPE;
case '[":
len = 1;
while (buf[off + len] == '[") {
++len;
}
if (buf[off + len] == 'L") {
++len;
while (buf[off + len] != ';") {
++len;
}
}
return new Type(ARRAY, buf, off, len + 1);
//case 'L':
default:
len = 1;
while (buf[off + len] != ';") {
++len;
}
return new Type(OBJECT, buf, off, len + 1);
}
|
public int | hashCode()Returns a hash code value for this type.
int hc = 13 * sort;
if (sort == Type.OBJECT || sort == Type.ARRAY) {
for (int i = off, end = i + len; i < end; i++) {
hc = 17 * (hc + buf[i]);
}
}
return hc;
|
public java.lang.String | toString()Returns a string representation of this type.
return getDescriptor();
|