Package org.eclipse.sisu.space.asm
Class Type
- java.lang.Object
-
- org.eclipse.sisu.space.asm.Type
-
public final class Type extends java.lang.Object
A Java field or method type. This class can be used to make it easier to manipulate type and method descriptors.
-
-
Field Summary
Fields Modifier and Type Field Description static int
ARRAY
The sort of array reference types.static int
BOOLEAN
The sort of the boolean type.static Type
BOOLEAN_TYPE
The boolean type.private char[]
buf
A buffer containing the internal name of this Java type.static int
BYTE
The sort of the byte type.static Type
BYTE_TYPE
The byte type.static int
CHAR
The sort of the char type.static Type
CHAR_TYPE
The char type.static int
DOUBLE
The sort of the double type.static Type
DOUBLE_TYPE
The double type.static int
FLOAT
The sort of the float type.static Type
FLOAT_TYPE
The float type.static int
INT
The sort of the int type.static Type
INT_TYPE
The int type.private int
len
The length of the internal name of this Java type.static int
LONG
The sort of the long type.static Type
LONG_TYPE
The long type.static int
METHOD
The sort of method types.static int
OBJECT
The sort of object reference types.private int
off
The offset of the internal name of this Java type inbuf
or, for primitive types, the size, descriptor and getOpcode offsets for this type (byte 0 contains the size, byte 1 the descriptor, byte 2 the offset for IALOAD or IASTORE, byte 3 the offset for all other instructions).static int
SHORT
The sort of the short type.static Type
SHORT_TYPE
The short type.private int
sort
The sort of this Java type.static int
VOID
The sort of the void type.static Type
VOID_TYPE
The void type.
-
Constructor Summary
Constructors Modifier Constructor Description private
Type(int sort, char[] buf, int off, int len)
Constructs a reference type.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
equals(java.lang.Object o)
Tests if the given object is equal to this type.int
getArgumentsAndReturnSizes()
Returns the size of the arguments and of the return value of methods of this type.static int
getArgumentsAndReturnSizes(java.lang.String desc)
Computes the size of the arguments and of the return value of a method.Type[]
getArgumentTypes()
Returns the argument types of methods of this type.static Type[]
getArgumentTypes(java.lang.reflect.Method method)
Returns the Java types corresponding to the argument types of the given method.static Type[]
getArgumentTypes(java.lang.String methodDescriptor)
Returns the Java types corresponding to the argument types of the given method descriptor.java.lang.String
getClassName()
Returns the binary name of the class corresponding to this type.static java.lang.String
getConstructorDescriptor(java.lang.reflect.Constructor<?> c)
Returns the descriptor corresponding to the given constructor.java.lang.String
getDescriptor()
Returns the descriptor corresponding to this Java type.static java.lang.String
getDescriptor(java.lang.Class<?> c)
Returns the descriptor corresponding to the given Java type.private void
getDescriptor(java.lang.StringBuilder buf)
Appends the descriptor corresponding to this Java type to the given string buffer.private static void
getDescriptor(java.lang.StringBuilder buf, java.lang.Class<?> c)
Appends the descriptor of the given class to the given string buffer.int
getDimensions()
Returns the number of dimensions of this array type.Type
getElementType()
Returns the type of the elements of this array type.java.lang.String
getInternalName()
Returns the internal name of the class corresponding to this object or array type.static java.lang.String
getInternalName(java.lang.Class<?> c)
Returns the internal name of the given class.static java.lang.String
getMethodDescriptor(java.lang.reflect.Method m)
Returns the descriptor corresponding to the given method.static java.lang.String
getMethodDescriptor(Type returnType, Type... argumentTypes)
Returns the descriptor corresponding to the given argument and return types.static Type
getMethodType(java.lang.String methodDescriptor)
Returns the Java type corresponding to the given method descriptor.static Type
getMethodType(Type returnType, Type... argumentTypes)
Returns the Java method type corresponding to the given argument and return types.static Type
getObjectType(java.lang.String internalName)
Returns the Java type corresponding to the given internal name.int
getOpcode(int opcode)
Returns a JVM instruction opcode adapted to this Java type.Type
getReturnType()
Returns the return type of methods of this type.static Type
getReturnType(java.lang.reflect.Method method)
Returns the Java type corresponding to the return type of the given method.static Type
getReturnType(java.lang.String methodDescriptor)
Returns the Java type corresponding to the return type of the given method descriptor.int
getSize()
Returns the size of values of this type.int
getSort()
Returns the sort of this Java type.private static Type
getType(char[] buf, int off)
Returns the Java type corresponding to the given type descriptor.static Type
getType(java.lang.Class<?> c)
Returns the Java type corresponding to the given class.static Type
getType(java.lang.reflect.Constructor<?> c)
Returns the Java method type corresponding to the given constructor.static Type
getType(java.lang.reflect.Method m)
Returns the Java method type corresponding to the given method.static Type
getType(java.lang.String typeDescriptor)
Returns the Java type corresponding to the given type descriptor.int
hashCode()
Returns a hash code value for this type.java.lang.String
toString()
Returns a string representation of this type.
-
-
-
Field Detail
-
VOID
public static final int VOID
The sort of the void type. SeegetSort
.- See Also:
- Constant Field Values
-
BOOLEAN
public static final int BOOLEAN
The sort of the boolean type. SeegetSort
.- See Also:
- Constant Field Values
-
CHAR
public static final int CHAR
The sort of the char type. SeegetSort
.- See Also:
- Constant Field Values
-
BYTE
public static final int BYTE
The sort of the byte type. SeegetSort
.- See Also:
- Constant Field Values
-
SHORT
public static final int SHORT
The sort of the short type. SeegetSort
.- See Also:
- Constant Field Values
-
INT
public static final int INT
The sort of the int type. SeegetSort
.- See Also:
- Constant Field Values
-
FLOAT
public static final int FLOAT
The sort of the float type. SeegetSort
.- See Also:
- Constant Field Values
-
LONG
public static final int LONG
The sort of the long type. SeegetSort
.- See Also:
- Constant Field Values
-
DOUBLE
public static final int DOUBLE
The sort of the double type. SeegetSort
.- See Also:
- Constant Field Values
-
ARRAY
public static final int ARRAY
The sort of array reference types. SeegetSort
.- See Also:
- Constant Field Values
-
OBJECT
public static final int OBJECT
The sort of object reference types. SeegetSort
.- See Also:
- Constant Field Values
-
METHOD
public static final int METHOD
The sort of method types. SeegetSort
.- See Also:
- Constant Field Values
-
VOID_TYPE
public static final Type VOID_TYPE
The void type.
-
BOOLEAN_TYPE
public static final Type BOOLEAN_TYPE
The boolean type.
-
CHAR_TYPE
public static final Type CHAR_TYPE
The char type.
-
BYTE_TYPE
public static final Type BYTE_TYPE
The byte type.
-
SHORT_TYPE
public static final Type SHORT_TYPE
The short type.
-
INT_TYPE
public static final Type INT_TYPE
The int type.
-
FLOAT_TYPE
public static final Type FLOAT_TYPE
The float type.
-
LONG_TYPE
public static final Type LONG_TYPE
The long type.
-
DOUBLE_TYPE
public static final Type DOUBLE_TYPE
The double type.
-
sort
private final int sort
The sort of this Java type.
-
buf
private final char[] buf
A buffer containing the internal name of this Java type. This field is only used for reference types.
-
off
private final int off
The offset of the internal name of this Java type inbuf
or, for primitive types, the size, descriptor and getOpcode offsets for this type (byte 0 contains the size, byte 1 the descriptor, byte 2 the offset for IALOAD or IASTORE, byte 3 the offset for all other instructions).
-
len
private final int len
The length of the internal name of this Java type.
-
-
Constructor Detail
-
Type
private Type(int sort, char[] buf, int off, int len)
Constructs a reference type.- Parameters:
sort
- the sort of the reference type to be constructed.buf
- a buffer containing the descriptor of the previous type.off
- the offset of this descriptor in the previous buffer.len
- the length of this descriptor.
-
-
Method Detail
-
getType
public static Type getType(java.lang.String typeDescriptor)
Returns the Java type corresponding to the given type descriptor.- Parameters:
typeDescriptor
- a field or method type descriptor.- Returns:
- the Java type corresponding to the given type descriptor.
-
getObjectType
public static Type getObjectType(java.lang.String internalName)
Returns the Java type corresponding to the given internal name.- Parameters:
internalName
- an internal name.- Returns:
- the Java type corresponding to the given internal name.
-
getMethodType
public static Type getMethodType(java.lang.String methodDescriptor)
Returns the Java type corresponding to the given method descriptor. Equivalent toType.getType(methodDescriptor)
.- Parameters:
methodDescriptor
- a method descriptor.- Returns:
- the Java type corresponding to the given method descriptor.
-
getMethodType
public static Type getMethodType(Type returnType, Type... argumentTypes)
Returns the Java method type corresponding to the given argument and return types.- Parameters:
returnType
- the return type of the method.argumentTypes
- the argument types of the method.- Returns:
- the Java type corresponding to the given argument and return types.
-
getType
public static Type getType(java.lang.Class<?> c)
Returns the Java type corresponding to the given class.- Parameters:
c
- a class.- Returns:
- the Java type corresponding to the given class.
-
getType
public static Type getType(java.lang.reflect.Constructor<?> c)
Returns the Java method type corresponding to the given constructor.- Parameters:
c
- aConstructor
object.- Returns:
- the Java method type corresponding to the given constructor.
-
getType
public static Type getType(java.lang.reflect.Method m)
Returns the Java method type corresponding to the given method.- Parameters:
m
- aMethod
object.- Returns:
- the Java method type corresponding to the given method.
-
getArgumentTypes
public static Type[] getArgumentTypes(java.lang.String methodDescriptor)
Returns the Java types corresponding to the argument types of the given method descriptor.- Parameters:
methodDescriptor
- a method descriptor.- Returns:
- the Java types corresponding to the argument types of the given method descriptor.
-
getArgumentTypes
public static Type[] getArgumentTypes(java.lang.reflect.Method method)
Returns the Java types corresponding to the argument types of the given method.- Parameters:
method
- a method.- Returns:
- the Java types corresponding to the argument types of the given method.
-
getReturnType
public static Type getReturnType(java.lang.String methodDescriptor)
Returns the Java type corresponding to the return type of the given method descriptor.- Parameters:
methodDescriptor
- a method descriptor.- Returns:
- the Java type corresponding to the return type of the given method descriptor.
-
getReturnType
public static Type getReturnType(java.lang.reflect.Method method)
Returns the Java type corresponding to the return type of the given method.- Parameters:
method
- a method.- Returns:
- the Java type corresponding to the return type of the given method.
-
getArgumentsAndReturnSizes
public static int getArgumentsAndReturnSizes(java.lang.String desc)
Computes the size of the arguments and of the return value of a method.- Parameters:
desc
- the descriptor of a method.- Returns:
- the size of the arguments of the method (plus one for the implicit this argument), argSize, and the size of its return value, retSize, packed into a single int i = (argSize << 2) | retSize (argSize is therefore equal to i >> 2, and retSize to i & 0x03).
-
getType
private static Type getType(char[] buf, int off)
Returns the Java type corresponding to the given type descriptor. For method descriptors, buf is supposed to contain nothing more than the descriptor itself.- Parameters:
buf
- a buffer containing a type descriptor.off
- the offset of this descriptor in the previous buffer.- Returns:
- the Java type corresponding to the given type descriptor.
-
getSort
public int getSort()
Returns the sort of this Java type.
-
getDimensions
public int getDimensions()
Returns the number of dimensions of this array type. This method should only be used for an array type.- Returns:
- the number of dimensions of this array type.
-
getElementType
public Type getElementType()
Returns the type of the elements of this array type. This method should only be used for an array type.- Returns:
- Returns the type of the elements of this array type.
-
getClassName
public java.lang.String getClassName()
Returns the binary name of the class corresponding to this type. This method must not be used on method types.- Returns:
- the binary name of the class corresponding to this type.
-
getInternalName
public java.lang.String getInternalName()
Returns the internal name of the class corresponding to this object or array type. The internal name of a class is its fully qualified name (as returned by Class.getName(), where '.' are replaced by '/'. This method should only be used for an object or array type.- Returns:
- the internal name of the class corresponding to this object type.
-
getArgumentTypes
public Type[] getArgumentTypes()
Returns the argument types of methods of this type. This method should only be used for method types.- Returns:
- the argument types of methods of this type.
-
getReturnType
public Type getReturnType()
Returns the return type of methods of this type. This method should only be used for method types.- Returns:
- the return type of methods of this type.
-
getArgumentsAndReturnSizes
public int getArgumentsAndReturnSizes()
Returns the size of the arguments and of the return value of methods of this type. This method should only be used for method types.- Returns:
- the size of the arguments (plus one for the implicit this argument), argSize, and the size of the return value, retSize, packed into a single int i = (argSize << 2) | retSize (argSize is therefore equal to i >> 2, and retSize to i & 0x03).
-
getDescriptor
public java.lang.String getDescriptor()
Returns the descriptor corresponding to this Java type.- Returns:
- the descriptor corresponding to this Java type.
-
getMethodDescriptor
public static java.lang.String getMethodDescriptor(Type returnType, Type... argumentTypes)
Returns the descriptor corresponding to the given argument and return types.- Parameters:
returnType
- the return type of the method.argumentTypes
- the argument types of the method.- Returns:
- the descriptor corresponding to the given argument and return types.
-
getDescriptor
private void getDescriptor(java.lang.StringBuilder buf)
Appends the descriptor corresponding to this Java type to the given string buffer.- Parameters:
buf
- the string buffer to which the descriptor must be appended.
-
getInternalName
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, as returned by Class.getName(), where '.' are replaced by '/'.- Parameters:
c
- an object or array class.- Returns:
- the internal name of the given class.
-
getDescriptor
public static java.lang.String getDescriptor(java.lang.Class<?> c)
Returns the descriptor corresponding to the given Java type.- Parameters:
c
- an object class, a primitive class or an array class.- Returns:
- the descriptor corresponding to the given class.
-
getConstructorDescriptor
public static java.lang.String getConstructorDescriptor(java.lang.reflect.Constructor<?> c)
Returns the descriptor corresponding to the given constructor.- Parameters:
c
- aConstructor
object.- Returns:
- the descriptor of the given constructor.
-
getMethodDescriptor
public static java.lang.String getMethodDescriptor(java.lang.reflect.Method m)
Returns the descriptor corresponding to the given method.- Parameters:
m
- aMethod
object.- Returns:
- the descriptor of the given method.
-
getDescriptor
private static void getDescriptor(java.lang.StringBuilder buf, java.lang.Class<?> c)
Appends the descriptor of the given class to the given string buffer.- Parameters:
buf
- the string buffer to which the descriptor must be appended.c
- the class whose descriptor must be computed.
-
getSize
public int getSize()
Returns the size of values of this type. This method must not be used for method types.- Returns:
- the size of values of this type, i.e., 2 for long and double, 0 for void and 1 otherwise.
-
getOpcode
public int getOpcode(int opcode)
Returns a JVM instruction opcode adapted to this Java type. This method must not be used for method types.- Parameters:
opcode
- a JVM instruction opcode. This opcode must be one of ILOAD, ISTORE, IALOAD, IASTORE, IADD, ISUB, IMUL, IDIV, IREM, INEG, ISHL, ISHR, IUSHR, IAND, IOR, IXOR and IRETURN.- Returns:
- an opcode that is similar to the given opcode, but adapted to this Java type. For example, if this type is float and opcode is IRETURN, this method returns FRETURN.
-
equals
public boolean equals(java.lang.Object o)
Tests if the given object is equal to this type.- Overrides:
equals
in classjava.lang.Object
- Parameters:
o
- the object to be compared to this type.- Returns:
- true if the given object is equal to this type.
-
hashCode
public int hashCode()
Returns a hash code value for this type.- Overrides:
hashCode
in classjava.lang.Object
- Returns:
- a hash code value for this type.
-
toString
public java.lang.String toString()
Returns a string representation of this type.- Overrides:
toString
in classjava.lang.Object
- Returns:
- the descriptor of this type.
-
-