Class Descriptor


  • public final class Descriptor
    extends java.lang.Object
    Helper class that defines useful methods for handling "field descriptors" (JVMS 4.3.2) and "method descriptors" (JVMS 4.3.3).

    Typical descriptors are:

    • I Integer
    • [I Array of integer
    • Lpkg1/pkg2/Clazz; Class
    • Lpkg1/pkg2/Outer$Inner; Member class
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String BOOLEAN
      The field descriptor for the primitive type BOOLEAN.
      static java.lang.String BYTE
      The field descriptor for the primitive type BYTE.
      static java.lang.String CHAR
      The field descriptor for the primitive type CHAR.
      static java.lang.String DOUBLE
      The field descriptor for the primitive type DOUBLE.
      static java.lang.String FLOAT
      The field descriptor for the primitive type FLOAT.
      static java.lang.String INT
      The field descriptor for the primitive type INT.
      static java.lang.String JAVA_IO_SERIALIZABLE
      The field descriptor for the interface Serializable.
      static java.lang.String JAVA_LANG_ANNOTATION_RETENTION
      The field descriptor for the annotation Retention.
      static java.lang.String JAVA_LANG_ASSERTIONERROR
      The field descriptor for the class AssertionError.
      static java.lang.String JAVA_LANG_BOOLEAN
      The field descriptor for the class Boolean.
      static java.lang.String JAVA_LANG_BYTE
      The field descriptor for the class Byte.
      static java.lang.String JAVA_LANG_CHARACTER
      The field descriptor for the class Character.
      static java.lang.String JAVA_LANG_CLASS
      The field descriptor for the class Class.
      static java.lang.String JAVA_LANG_CLONEABLE
      The field descriptor for the interface Cloneable.
      static java.lang.String JAVA_LANG_DOUBLE
      The field descriptor for the class Double.
      static java.lang.String JAVA_LANG_ENUM
      The field descriptor for the class Enum.
      static java.lang.String JAVA_LANG_ERROR
      The field descriptor for the class Error.
      static java.lang.String JAVA_LANG_EXCEPTION
      The field descriptor for the class Exception.
      static java.lang.String JAVA_LANG_FLOAT
      The field descriptor for the class Float.
      static java.lang.String JAVA_LANG_INTEGER
      The field descriptor for the class Integer.
      static java.lang.String JAVA_LANG_ITERABLE
      The field descriptor for the interface Iterable.
      static java.lang.String JAVA_LANG_LONG
      The field descriptor for the class Long.
      static java.lang.String JAVA_LANG_OBJECT
      The field descriptor for the class Object.
      static java.lang.String JAVA_LANG_OVERRIDE
      The field descriptor for the annotation Override.
      static java.lang.String JAVA_LANG_RUNTIMEEXCEPTION
      The field descriptor for the class RuntimeException.
      static java.lang.String JAVA_LANG_SHORT
      The field descriptor for the class Short.
      static java.lang.String JAVA_LANG_STRING
      The field descriptor for the class String.
      static java.lang.String JAVA_LANG_STRINGBUILDER
      The field descriptor for the class StringBuilder.
      static java.lang.String JAVA_LANG_SYSTEM
      The field descriptor for the class System.
      static java.lang.String JAVA_LANG_THROWABLE
      The field descriptor for the class Throwable.
      static java.lang.String JAVA_LANG_VOID
      The field descriptor for the class Void.
      static java.lang.String JAVA_UTIL_ITERATOR
      The field descriptor for the interface Iterator.
      static java.lang.String LONG
      The field descriptor for the primitive type LONG.
      static java.lang.String SHORT
      The field descriptor for the primitive type SHORT.
      static java.lang.String VOID
      The field descriptor for the type void.
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static boolean areInSamePackage​(java.lang.String d1, java.lang.String d2)
      Checks whether two reference types are declared in the same package.
      static java.lang.String fromClassName​(java.lang.String className)
      Converts a class name as defined by "Class.getName()" into a descriptor.
      static java.lang.String fromInternalForm​(java.lang.String internalForm)
      Converts a class name in the "internal form" as described in JVMS 4.2 into a descriptor.
      static java.lang.String getComponentDescriptor​(java.lang.String d)  
      static java.lang.String getPackageName​(java.lang.String d)
      Returns the package name of a class or interface reference descriptor, or null iff the class or interface is declared in the default package.
      static boolean hasSize1​(java.lang.String d)  
      static boolean hasSize2​(java.lang.String d)  
      static boolean isArrayReference​(java.lang.String d)  
      static boolean isClassOrInterfaceReference​(java.lang.String d)  
      static boolean isPrimitive​(java.lang.String d)  
      static boolean isPrimitiveNumeric​(java.lang.String d)  
      static boolean isReference​(java.lang.String d)  
      static short size​(java.lang.String d)  
      static java.lang.String toClassName​(java.lang.String d)
      Converts a field descriptor into a class name as defined by Class.getName().
      static java.lang.String toInternalForm​(java.lang.String d)
      Converts a descriptor into the "internal form" as defined by JVMS 4.2.
      static java.lang.String toString​(java.lang.String d)
      Pretty-prints the given descriptor.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • VOID

        public static final java.lang.String VOID
        The field descriptor for the type void.
        See Also:
        Constant Field Values
      • BYTE

        public static final java.lang.String BYTE
        The field descriptor for the primitive type BYTE.
        See Also:
        Constant Field Values
      • CHAR

        public static final java.lang.String CHAR
        The field descriptor for the primitive type CHAR.
        See Also:
        Constant Field Values
      • DOUBLE

        public static final java.lang.String DOUBLE
        The field descriptor for the primitive type DOUBLE.
        See Also:
        Constant Field Values
      • FLOAT

        public static final java.lang.String FLOAT
        The field descriptor for the primitive type FLOAT.
        See Also:
        Constant Field Values
      • INT

        public static final java.lang.String INT
        The field descriptor for the primitive type INT.
        See Also:
        Constant Field Values
      • LONG

        public static final java.lang.String LONG
        The field descriptor for the primitive type LONG.
        See Also:
        Constant Field Values
      • SHORT

        public static final java.lang.String SHORT
        The field descriptor for the primitive type SHORT.
        See Also:
        Constant Field Values
      • BOOLEAN

        public static final java.lang.String BOOLEAN
        The field descriptor for the primitive type BOOLEAN.
        See Also:
        Constant Field Values
      • JAVA_LANG_ANNOTATION_RETENTION

        public static final java.lang.String JAVA_LANG_ANNOTATION_RETENTION
        The field descriptor for the annotation Retention.
        See Also:
        Constant Field Values
      • JAVA_LANG_OVERRIDE

        public static final java.lang.String JAVA_LANG_OVERRIDE
        The field descriptor for the annotation Override.
        See Also:
        Constant Field Values
      • JAVA_LANG_ASSERTIONERROR

        public static final java.lang.String JAVA_LANG_ASSERTIONERROR
        The field descriptor for the class AssertionError.
        See Also:
        Constant Field Values
      • JAVA_LANG_BOOLEAN

        public static final java.lang.String JAVA_LANG_BOOLEAN
        The field descriptor for the class Boolean.
        See Also:
        Constant Field Values
      • JAVA_LANG_BYTE

        public static final java.lang.String JAVA_LANG_BYTE
        The field descriptor for the class Byte.
        See Also:
        Constant Field Values
      • JAVA_LANG_CHARACTER

        public static final java.lang.String JAVA_LANG_CHARACTER
        The field descriptor for the class Character.
        See Also:
        Constant Field Values
      • JAVA_LANG_CLASS

        public static final java.lang.String JAVA_LANG_CLASS
        The field descriptor for the class Class.
        See Also:
        Constant Field Values
      • JAVA_LANG_DOUBLE

        public static final java.lang.String JAVA_LANG_DOUBLE
        The field descriptor for the class Double.
        See Also:
        Constant Field Values
      • JAVA_LANG_ENUM

        public static final java.lang.String JAVA_LANG_ENUM
        The field descriptor for the class Enum.
        See Also:
        Constant Field Values
      • JAVA_LANG_ERROR

        public static final java.lang.String JAVA_LANG_ERROR
        The field descriptor for the class Error.
        See Also:
        Constant Field Values
      • JAVA_LANG_EXCEPTION

        public static final java.lang.String JAVA_LANG_EXCEPTION
        The field descriptor for the class Exception.
        See Also:
        Constant Field Values
      • JAVA_LANG_FLOAT

        public static final java.lang.String JAVA_LANG_FLOAT
        The field descriptor for the class Float.
        See Also:
        Constant Field Values
      • JAVA_LANG_INTEGER

        public static final java.lang.String JAVA_LANG_INTEGER
        The field descriptor for the class Integer.
        See Also:
        Constant Field Values
      • JAVA_LANG_LONG

        public static final java.lang.String JAVA_LANG_LONG
        The field descriptor for the class Long.
        See Also:
        Constant Field Values
      • JAVA_LANG_OBJECT

        public static final java.lang.String JAVA_LANG_OBJECT
        The field descriptor for the class Object.
        See Also:
        Constant Field Values
      • JAVA_LANG_RUNTIMEEXCEPTION

        public static final java.lang.String JAVA_LANG_RUNTIMEEXCEPTION
        The field descriptor for the class RuntimeException.
        See Also:
        Constant Field Values
      • JAVA_LANG_SHORT

        public static final java.lang.String JAVA_LANG_SHORT
        The field descriptor for the class Short.
        See Also:
        Constant Field Values
      • JAVA_LANG_STRING

        public static final java.lang.String JAVA_LANG_STRING
        The field descriptor for the class String.
        See Also:
        Constant Field Values
      • JAVA_LANG_STRINGBUILDER

        public static final java.lang.String JAVA_LANG_STRINGBUILDER
        The field descriptor for the class StringBuilder.
        See Also:
        Constant Field Values
      • JAVA_LANG_SYSTEM

        public static final java.lang.String JAVA_LANG_SYSTEM
        The field descriptor for the class System.
        See Also:
        Constant Field Values
      • JAVA_LANG_THROWABLE

        public static final java.lang.String JAVA_LANG_THROWABLE
        The field descriptor for the class Throwable.
        See Also:
        Constant Field Values
      • JAVA_LANG_VOID

        public static final java.lang.String JAVA_LANG_VOID
        The field descriptor for the class Void.
        See Also:
        Constant Field Values
      • JAVA_IO_SERIALIZABLE

        public static final java.lang.String JAVA_IO_SERIALIZABLE
        The field descriptor for the interface Serializable.
        See Also:
        Constant Field Values
      • JAVA_LANG_CLONEABLE

        public static final java.lang.String JAVA_LANG_CLONEABLE
        The field descriptor for the interface Cloneable.
        See Also:
        Constant Field Values
      • JAVA_LANG_ITERABLE

        public static final java.lang.String JAVA_LANG_ITERABLE
        The field descriptor for the interface Iterable.
        See Also:
        Constant Field Values
      • JAVA_UTIL_ITERATOR

        public static final java.lang.String JAVA_UTIL_ITERATOR
        The field descriptor for the interface Iterator.
        See Also:
        Constant Field Values
    • Method Detail

      • isReference

        public static boolean isReference​(java.lang.String d)
        Returns:
        Whether this Descriptor describes a reference (i.e. non-primitive) type
      • isClassOrInterfaceReference

        public static boolean isClassOrInterfaceReference​(java.lang.String d)
        Returns:
        Whether this Descriptor describes a class or an interface (and not an array or a primitive type)
      • isArrayReference

        public static boolean isArrayReference​(java.lang.String d)
        Returns:
        Whether this Descriptor describes an array type
      • getComponentDescriptor

        public static java.lang.String getComponentDescriptor​(java.lang.String d)
        Returns:
        The descriptor of the component of the array type d
        Throws:
        InternalCompilerException - d does not describe an array type
      • size

        public static short size​(java.lang.String d)
        Returns:
        The number of slots (1 or two) that a value of the type described by d occupies on the operand stack or in the local variable array, or 0 iff d describes the type VOID
      • hasSize1

        public static boolean hasSize1​(java.lang.String d)
        Returns:
        true iff d describes a primitive type except LONG and DOUBLE, or a reference type
      • hasSize2

        public static boolean hasSize2​(java.lang.String d)
        Returns:
        true iff d LONG or DOUBLE
      • toString

        public static java.lang.String toString​(java.lang.String d)
        Pretty-prints the given descriptor.
        Parameters:
        d - A valid field or method descriptor
      • fromClassName

        public static java.lang.String fromClassName​(java.lang.String className)
        Converts a class name as defined by "Class.getName()" into a descriptor.
      • fromInternalForm

        public static java.lang.String fromInternalForm​(java.lang.String internalForm)
        Converts a class name in the "internal form" as described in JVMS 4.2 into a descriptor.

        Also implements the encoding of array types as described in JVMS 4.4.1.

      • toClassName

        public static java.lang.String toClassName​(java.lang.String d)
        Converts a field descriptor into a class name as defined by Class.getName().
      • toInternalForm

        public static java.lang.String toInternalForm​(java.lang.String d)
        Converts a descriptor into the "internal form" as defined by JVMS 4.2.
      • isPrimitive

        public static boolean isPrimitive​(java.lang.String d)
        Returns:
        Whether d describes a primitive type or VOID
      • isPrimitiveNumeric

        public static boolean isPrimitiveNumeric​(java.lang.String d)
        Returns:
        Whether d describes a primitive type except boolean and void
      • getPackageName

        @Nullable
        public static java.lang.String getPackageName​(java.lang.String d)
        Returns the package name of a class or interface reference descriptor, or null iff the class or interface is declared in the default package.
      • areInSamePackage

        public static boolean areInSamePackage​(java.lang.String d1,
                                               java.lang.String d2)
        Checks whether two reference types are declared in the same package.