Class Type


  • public class Type
    extends Object
    models the type of a rule binding or expression
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
        Type​(String typeName)
      create a type with a given name and no associated class
        Type​(String typeName, Class clazz)
      create a type with a given name and optionally an associated class
      protected Type​(String typeName, Class clazz, int flags, int nBytes)  
      protected Type​(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
      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
      Type arrayType()
      create an array type from this base type
      Type arrayType​(Class clazz)
      create an array type from this base type
      static Type boxType​(Class clazz)
      return the primitive type whose boxed equivalent is associated with a given class
      static Type boxType​(Type type)
      return the primitive type for a boxed type or vice versa
      static Type builtinType​(Class clazz)
      return the builtin type associated with a given class
      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.
      static String fixArrayType​(String baseType, int dimension)  
      Type getBaseType()
      retrieve the base type for an array type or null if this is not an array type
      String getInternalName()
      get the internal name for this type used by the class loader.
      String getInternalName​(boolean forDescriptor, boolean slashSeparate)
      get the internal name for this type used by the class loader.
      String getName()
      get the possibly unqualified name with which this type was created
      int getNBytes()
      return the number of stack words occupied by instances of this type
      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
      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
      static String internalName​(Class<?> clazz)  
      static String internalName​(Class<?> clazz, boolean forField)  
      boolean isArray()
      return true if this is an array type
      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.
      boolean isBoolean()
      return true if this is a boolean type
      boolean isDefined()
      check if this type is a known type.
      boolean isFloating()
      return true if this is a floating type of whatever size, including the unknown primitive numeric type
      boolean isIntegral()
      return true if this is an integral type of whatever size, including the unknown primitive numeric type
      boolean isNumeric()
      return true if this is a numeric type, including the unknown primitive numeric type
      boolean isObject()
      return true if this is an object type, including unbound types mentioned in rules
      boolean isPrimitive()
      return true if this is a primitive value type
      boolean isString()
      return true if this is the string type
      boolean isUnbound()
      return true if this is a type mentioned in a rule but not yet bound to a specific class
      boolean isUndefined()
      test if this type is an unknown type.
      boolean isValue()
      return true if this is a value type, which includes the boxed versions of primitive types
      boolean isVoid()
      return true if this is the void type
      static int paramSlotIdx​(int access, String desc, int paramIdx)
      identify the local var slot used to store a method parameter identified by parameter index
      static String parseFieldDescriptor​(String descriptor)  
      static List<String> parseMethodDescriptor​(String descriptor, boolean includeReturnType)  
      static String parseMethodReturnType​(String descriptor)  
      static Type promote​(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 operation
      void resolve​(ClassLoader loader)  
      String toString()  
    • 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 qualified
        clazz - 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
      • Type

        protected Type​(String typeName,
                       Class clazz,
                       int flags,
                       int nBytes)
      • Type

        protected Type​(String typeName,
                       Class clazz,
                       int flags,
                       int nBytes,
                       Type baseType)
    • 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 not
        slashSeparate - 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 undefined
        type2 - 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)
      • parseFieldDescriptor

        public static String parseFieldDescriptor​(String descriptor)
      • parseMethodReturnType

        public static String parseMethodReturnType​(String descriptor)
      • 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 static
        desc - the intrenal form descriptor for the maethod
        paramIdx - 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
      • fixArrayType

        public static String fixArrayType​(String baseType,
                                          int dimension)
      • internalName

        public static String internalName​(Class<?> clazz)
      • internalName

        public static String internalName​(Class<?> clazz,
                                          boolean forField)