Package org.jboss.byteman.rule.type
Class Type
- java.lang.Object
-
- org.jboss.byteman.rule.type.Type
-
public class Type extends Object
models the type of a rule binding or expression
-
-
Field Summary
Fields Modifier and Type Field Description static TypeBstatic TypeBOOLEANstatic TypeBYTEstatic TypeCstatic TypeCHARACTERstatic TypeDstatic TypeDOUBLEstatic TypeFstatic intF_ARRAYstatic intF_BOOLEANstatic intF_FLOATINGstatic intF_INTEGRALstatic intF_NUMERICstatic intF_OBJECTstatic intF_PRIMITIVEstatic intF_STRINGstatic intF_UNKNOWNstatic intF_VALUEstatic intF_VOIDstatic TypeFLOATstatic TypeIstatic TypeINTEGERstatic TypeJstatic TypeLONGstatic TypeNstatic TypeNUMBERstatic TypeOBJECTstatic TypeSstatic TypeSHORTstatic TypeSTRINGstatic TypeUNDEFINEDstatic TypeVOIDstatic TypeZ
-
Constructor Summary
Constructors Modifier Constructor Description Type(String typeName)create a type with a given name and no associated classType(String typeName, Class clazz)create a type with a given name and optionally an associated classprotectedType(String typeName, Class clazz, int flags, int nBytes)protectedType(String typeName, Class clazz, int flags, int nBytes, Type baseType)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanaliasTo(Type target)attempt to establish an alias from an package unqualified named object type to a package qualified named object type whose unqualified name equals this type's nameTypearrayType()create an array type from this base typeTypearrayType(Class clazz)create an array type from this base typestatic TypeboxType(Class clazz)return the primitive type whose boxed equivalent is associated with a given classstatic TypeboxType(Type type)return the primitive type for a boxed type or vice versastatic TypebuiltinType(Class clazz)return the builtin type associated with a given classstatic Typedereference(Type target)dereference an object type to the fully qualified named type to which it is aliased where such an alias has been found to exist or return the supplied type if no alias exists or the type is a non-objecttype or was originally specified using a fully qualified type name.static StringfixArrayType(String baseType, int dimension)TypegetBaseType()retrieve the base type for an array type or null if this is not an array typeStringgetInternalName()get the internal name for this type used by the class loader.StringgetInternalName(boolean forDescriptor, boolean slashSeparate)get the internal name for this type used by the class loader.StringgetName()get the possibly unqualified name with which this type was createdintgetNBytes()return the number of stack words occupied by instances of this typeStringgetPackageName()get the package component of the name associated with this type or the empty String if it has no package or is was defiend with an unqualified name or is a builtin typeClassgetTargetClass()get the class associated with this type if it has one or a special undefined class if the type is not defined or null if there is no associated classstatic StringinternalName(Class<?> clazz)static StringinternalName(Class<?> clazz, boolean forField)booleanisArray()return true if this is an array typebooleanisAssignableFrom(Type type)check whether this type can be assigned with values of the supplied type including the case where numeric conversion from known or unknown numeric types but excluding any other cases where this type is undefined n.b.booleanisBoolean()return true if this is a boolean typebooleanisDefined()check if this type is a known type.booleanisFloating()return true if this is a floating type of whatever size, including the unknown primitive numeric typebooleanisIntegral()return true if this is an integral type of whatever size, including the unknown primitive numeric typebooleanisNumeric()return true if this is a numeric type, including the unknown primitive numeric typebooleanisObject()return true if this is an object type, including unbound types mentioned in rulesbooleanisPrimitive()return true if this is a primitive value typebooleanisString()return true if this is the string typebooleanisUnbound()return true if this is a type mentioned in a rule but not yet bound to a specific classbooleanisUndefined()test if this type is an unknown type.booleanisValue()return true if this is a value type, which includes the boxed versions of primitive typesbooleanisVoid()return true if this is the void typestatic intparamSlotIdx(int access, String desc, int paramIdx)identify the local var slot used to store a method parameter identified by parameter indexstatic StringparseFieldDescriptor(String descriptor)static List<String>parseMethodDescriptor(String descriptor, boolean includeReturnType)static StringparseMethodReturnType(String descriptor)static Typepromote(Type type1, Type type2)compute the type to which a binary arithmetic operator should promote its operands before combination based on the two operand types which is also the type to be used for the result of the operationvoidresolve(ClassLoader loader)StringtoString()
-
-
-
Field Detail
-
F_BOOLEAN
public static final int F_BOOLEAN
- See Also:
- Constant Field Values
-
F_INTEGRAL
public static final int F_INTEGRAL
- See Also:
- Constant Field Values
-
F_FLOATING
public static final int F_FLOATING
- See Also:
- Constant Field Values
-
F_OBJECT
public static final int F_OBJECT
- See Also:
- Constant Field Values
-
F_VOID
public static final int F_VOID
- See Also:
- Constant Field Values
-
F_ARRAY
public static final int F_ARRAY
- See Also:
- Constant Field Values
-
F_NUMERIC
public static final int F_NUMERIC
- See Also:
- Constant Field Values
-
F_VALUE
public static final int F_VALUE
- See Also:
- Constant Field Values
-
F_UNKNOWN
public static final int F_UNKNOWN
- See Also:
- Constant Field Values
-
F_PRIMITIVE
public static final int F_PRIMITIVE
- See Also:
- Constant Field Values
-
F_STRING
public static final int F_STRING
- See Also:
- Constant Field Values
-
Z
public static final Type Z
-
B
public static final Type B
-
S
public static final Type S
-
C
public static final Type C
-
I
public static final Type I
-
J
public static final Type J
-
F
public static final Type F
-
D
public static final Type D
-
N
public static final Type N
-
BOOLEAN
public static final Type BOOLEAN
-
BYTE
public static final Type BYTE
-
SHORT
public static final Type SHORT
-
CHARACTER
public static final Type CHARACTER
-
INTEGER
public static final Type INTEGER
-
LONG
public static final Type LONG
-
FLOAT
public static final Type FLOAT
-
DOUBLE
public static final Type DOUBLE
-
STRING
public static final Type STRING
-
VOID
public static final Type VOID
-
NUMBER
public static final Type NUMBER
-
OBJECT
public static final Type OBJECT
-
UNDEFINED
public static final Type UNDEFINED
-
-
Constructor Detail
-
Type
public Type(String typeName, Class clazz)
create a type with a given name and optionally an associated class- Parameters:
typeName- the name of the type which may or may not be fully qualifiedclazz- the class associated with this name if it is know otherwise null
-
Type
public Type(String typeName)
create a type with a given name and no associated class- Parameters:
typeName- the name of the type which may or may not be fully qualified
-
-
Method Detail
-
arrayType
public Type arrayType()
create an array type from this base type- Returns:
- an array type
-
arrayType
public Type arrayType(Class clazz)
create an array type from this base type- Parameters:
clazz- the class for the array type derived from the class of base type or null if the base type is undefined- Returns:
- an array type
-
getBaseType
public Type getBaseType()
retrieve the base type for an array type or null if this is not an array type- Returns:
- an array type
-
getName
public String getName()
get the possibly unqualified name with which this type was created- Returns:
- the type name
-
getInternalName
public String getInternalName()
get the internal name for this type used by the class loader. this is only valid for defined types, defined array types or primitive types- Returns:
- the type name
-
getInternalName
public String getInternalName(boolean forDescriptor, boolean slashSeparate)
get the internal name for this type used by the class loader. this is only valid for defined types, defined array types or primitive types- Parameters:
forDescriptor- true if we need the name to appear in a decriptor false if notslashSeparate- true if the package separator should be slash false if it should be dot- Returns:
- the type name
-
getTargetClass
public Class getTargetClass()
get the class associated with this type if it has one or a special undefined class if the type is not defined or null if there is no associated class- Returns:
- the associated class
-
getPackageName
public String getPackageName()
get the package component of the name associated with this type or the empty String if it has no package or is was defiend with an unqualified name or is a builtin type- Returns:
- the package component or an empty string
-
dereference
public static Type dereference(Type target)
dereference an object type to the fully qualified named type to which it is aliased where such an alias has been found to exist or return the supplied type if no alias exists or the type is a non-objecttype or was originally specified using a fully qualified type name.- Parameters:
target- the type to be dereferenced- Returns:
- the alias where it exists or the supplied type where there is no alias or null if a null value is supplied
-
resolve
public void resolve(ClassLoader loader)
-
aliasTo
public boolean aliasTo(Type target)
attempt to establish an alias from an package unqualified named object type to a package qualified named object type whose unqualified name equals this type's name- Parameters:
target- the package qualified named type for which this type should become an alias- Returns:
- true if the alias link can be established or already exsits or false if an alias to a different target already exists or this type or the target are not object types
-
isAssignableFrom
public boolean isAssignableFrom(Type type)
check whether this type can be assigned with values of the supplied type including the case where numeric conversion from known or unknown numeric types but excluding any other cases where this type is undefined n.b. the caller must dereference the recipient and argument types before calling this method- Parameters:
type- the type poviding RHS values- Returns:
- true if it is known that the assignment is valid, false if it is not known to be valid or is known not to be valid
-
isUndefined
public boolean isUndefined()
test if this type is an unknown type. a type may be unknown either because it is one of the pseudo types used as type variables or because it represents an object type mentioned in a rule but not yet bound to a specific class- Returns:
- true if the type is unknown otherwise false
-
isDefined
public boolean isDefined()
check if this type is a known type. this is just teh oppositeof isUndefined- Returns:
- false if the type is unknown otherwise true
-
isUnbound
public boolean isUnbound()
return true if this is a type mentioned in a rule but not yet bound to a specific class- Returns:
- true if the type is not yet bound to a specific class
-
isPrimitive
public boolean isPrimitive()
return true if this is a primitive value type- Returns:
- true if this is a primitive value type
-
isValue
public boolean isValue()
return true if this is a value type, which includes the boxed versions of primitive types- Returns:
- true if this is a value type
-
isVoid
public boolean isVoid()
return true if this is the void type- Returns:
- true if this is void type
-
isString
public boolean isString()
return true if this is the string type- Returns:
- true if this is string type
-
isNumeric
public boolean isNumeric()
return true if this is a numeric type, including the unknown primitive numeric type- Returns:
- true if this is a numeric type
-
isIntegral
public boolean isIntegral()
return true if this is an integral type of whatever size, including the unknown primitive numeric type- Returns:
- true if this is an integral type
-
isFloating
public boolean isFloating()
return true if this is a floating type of whatever size, including the unknown primitive numeric type- Returns:
- true if this is a floating type
-
isBoolean
public boolean isBoolean()
return true if this is a boolean type- Returns:
- true if this is a boolean type
-
isObject
public boolean isObject()
return true if this is an object type, including unbound types mentioned in rules- Returns:
- true if this is an object type
-
isArray
public boolean isArray()
return true if this is an array type- Returns:
- true if this is an array type
-
getNBytes
public int getNBytes()
return the number of stack words occupied by instances of this type- Returns:
- true if this is an array type
-
builtinType
public static Type builtinType(Class clazz)
return the builtin type associated with a given class- Parameters:
clazz- the class for the builtin type- Returns:
- the corresponding builtin type
-
boxType
public static Type boxType(Class clazz)
return the primitive type whose boxed equivalent is associated with a given class- Parameters:
clazz- the class for the primitivebuiltin type- Returns:
- the corresponding primitive type
-
boxType
public static Type boxType(Type type)
return the primitive type for a boxed type or vice versa- Parameters:
type- the boxed type- Returns:
- the corresponding primitive type
-
promote
public static Type promote(Type type1, Type type2) throws TypeException
compute the type to which a binary arithmetic operator should promote its operands before combination based on the two operand types which is also the type to be used for the result of the operation- Parameters:
type1- the type of the left operand which must be numeric but may be undefinedtype2- the type of the right operand which must be numeric but may be undefined- Returns:
- the corresponding promotion/result type which may be undefined numeric
- Throws:
TypeException- if types are undefined or promotion is invalid
-
parseMethodDescriptor
public static List<String> parseMethodDescriptor(String descriptor, boolean includeReturnType)
-
paramSlotIdx
public static int paramSlotIdx(int access, String desc, int paramIdx)identify the local var slot used to store a method parameter identified by parameter index- Parameters:
access- the access flags for the method including whether or not it is staticdesc- the intrenal form descriptor for the maethodparamIdx- the index of the parameter in the parameter lost starting with 0 for this or 1 for actual parameters- Returns:
- the corresponding local var slot or -1 if there is no such parameter
-
-