Class MethodToolkit


  • public class MethodToolkit
    extends java.lang.Object
    Helper class to support IMCType and IMCMethod implementations and to handle conversion of reference types and field descriptors according to The Java Virtual Machine Specification, Section 4.4.1 and Section 4.3.2, respectively, into Java type formats according to The Java Language Specification, Sections 6.7 and 13.1.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private MethodToolkit()
      Do not instantiate.
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static java.lang.String binaryNameToCanonical​(java.lang.String binaryName)
      Convert a binary name to a canonical name, as defined in The Java Language Specification, Sections 6.7 and 13.1, respectively.
      static int fieldDescToBinaryJLS​(java.lang.CharSequence desc, int start, java.lang.Appendable out)
      Convert the field descriptor, according to The Java Virtual Machine Specification, Section 4.3.2, starting at position start in desc, into a binary Java type name according to The Java Language Specification, Section 13.1.
      static java.lang.String fieldDescToBinaryJLS​(java.lang.String fieldDesc)
      Convert a field descriptor according to The Java Virtual Machine Specification, Section 4.3.2, into a binary Java type name according to The Java Language Specification, Section 13.1.
      static java.lang.String formatQualifiedName​(IMCPackage mcPackage, java.lang.String className)
      Create a fully qualified class name based on a package.
      private static java.lang.String formatQualifiedName​(IMCPackage mcPackage, java.lang.String className, char separator)
      Create a fully qualified class name based on a package.
      static java.lang.Boolean hasNestedTypes​(java.lang.String className)
      Check if a class name denotes a nested class.
      static java.lang.Boolean isArray​(java.lang.String typeName)
      Check if a type name denotes an array.
      static boolean isDescOrRefArray​(java.lang.String fieldDesc)
      Check if a field descriptor or a reference type according to The Java Virtual Machine Specification, Sections 4.3.2 and 4.4.1 respectively, designates an array.
      static boolean isDescPrimitive​(java.lang.String fieldDesc)
      Check if a field descriptor according to The Java Virtual Machine Specification, Section 4.3.2, designates a primitive type.
      static boolean isPrimitive​(java.lang.String typeName)
      Check if a type name denotes a primitive type.
      static java.lang.String nestedTypes​(java.lang.String className)
      Get the nested type name of a class.
      static java.lang.String refTypeToBinaryJLS​(java.lang.String refType)
      Convert a reference type according to The Java Virtual Machine Specification, Section 4.4.1, into a binary Java type name according to The Java Language Specification, Section 13.1.
      static java.lang.String refTypeToFieldDescriptor​(java.lang.String refType)
      Convert a reference type according to The Java Virtual Machine Specification, Section 4.4.1, into a field descriptor according to The Java Virtual Machine Specification, Section 4.3.2.
      static java.lang.String topLevelType​(java.lang.String className)
      Get the top level type of a class.
      static IMCType typeFromBinaryJLS​(java.lang.String jlsType)
      Convert a binary Java type name according to The Java Language Specification, Section 13.1, into an IMCType.
      static IMCType typeFromReference​(java.lang.String refType)
      Convert a reference type according to The Java Virtual Machine Specification, Section 4.4.1, into an IMCType.
      • Methods inherited from class java.lang.Object

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

      • TYPE_VOID

        private static final java.lang.String TYPE_VOID
      • TYPE_BOOLEAN

        private static final java.lang.String TYPE_BOOLEAN
      • TYPE_BYTE

        private static final java.lang.String TYPE_BYTE
      • TYPE_CHAR

        private static final java.lang.String TYPE_CHAR
      • TYPE_SHORT

        private static final java.lang.String TYPE_SHORT
      • TYPE_INTEGER

        private static final java.lang.String TYPE_INTEGER
      • TYPE_LONG

        private static final java.lang.String TYPE_LONG
      • TYPE_FLOAT

        private static final java.lang.String TYPE_FLOAT
      • TYPE_DOUBLE

        private static final java.lang.String TYPE_DOUBLE
      • PRIMITIVE_TYPES

        private static final java.lang.String[] PRIMITIVE_TYPES
    • Constructor Detail

      • MethodToolkit

        private MethodToolkit()
        Do not instantiate.
    • Method Detail

      • isPrimitive

        public static boolean isPrimitive​(java.lang.String typeName)
        Check if a type name denotes a primitive type.
        Parameters:
        typeName - type name to check
        Returns:
        true if the type is primitive, false if not
      • formatQualifiedName

        public static java.lang.String formatQualifiedName​(IMCPackage mcPackage,
                                                           java.lang.String className)
        Create a fully qualified class name based on a package.
        Parameters:
        mcPackage - package for the class
        className - class name
        Returns:
        a fully qualified class name
      • formatQualifiedName

        private static java.lang.String formatQualifiedName​(IMCPackage mcPackage,
                                                            java.lang.String className,
                                                            char separator)
        Create a fully qualified class name based on a package.
        Parameters:
        mcPackage - package for the class
        className - class name
        separator - The separator to use between elements in the class name. Typically only '.' and '/' are useful.
        Returns:
        a fully qualified class name
      • hasNestedTypes

        public static java.lang.Boolean hasNestedTypes​(java.lang.String className)
        Check if a class name denotes a nested class.
        Parameters:
        className - class name to check
        Returns:
        true if the class is nested, false if not
      • topLevelType

        public static java.lang.String topLevelType​(java.lang.String className)
        Get the top level type of a class. This is the class name without any nested components.
        Parameters:
        className - class name with possible nested components
        Returns:
        class name without nested components
      • nestedTypes

        public static java.lang.String nestedTypes​(java.lang.String className)
        Get the nested type name of a class. This is the class name without the top level class name. If there are multiple nested levels then all levels will be returned.
        Parameters:
        className - class name with possible nested components
        Returns:
        nested class name part if present, null if there is no nested class
      • isArray

        public static java.lang.Boolean isArray​(java.lang.String typeName)
        Check if a type name denotes an array.
        Parameters:
        typeName - type name to check
        Returns:
        true if the type is an array, false if not
      • refTypeToFieldDescriptor

        public static java.lang.String refTypeToFieldDescriptor​(java.lang.String refType)
        Convert a reference type according to The Java Virtual Machine Specification, Section 4.4.1, into a field descriptor according to The Java Virtual Machine Specification, Section 4.3.2.
        Parameters:
        refType - the reference type to convert
        Returns:
        the corresponding field descriptor
      • binaryNameToCanonical

        public static java.lang.String binaryNameToCanonical​(java.lang.String binaryName)
        Convert a binary name to a canonical name, as defined in The Java Language Specification, Sections 6.7 and 13.1, respectively. These names only differ in that the former uses "$" as nested class separator while the latter uses ".".
        Parameters:
        binaryName - the binary name to convert
        Returns:
        the converted canonical name
      • refTypeToBinaryJLS

        public static java.lang.String refTypeToBinaryJLS​(java.lang.String refType)
                                                   throws java.lang.IllegalArgumentException
        Convert a reference type according to The Java Virtual Machine Specification, Section 4.4.1, into a binary Java type name according to The Java Language Specification, Section 13.1.
        Parameters:
        refType - the reference type to convert
        Returns:
        the converted name
        Throws:
        java.lang.IllegalArgumentException - if refType is not a valid reference type
      • typeFromReference

        public static IMCType typeFromReference​(java.lang.String refType)
                                         throws java.lang.IllegalArgumentException
        Convert a reference type according to The Java Virtual Machine Specification, Section 4.4.1, into an IMCType.
        Parameters:
        refType - the reference type to convert
        Returns:
        the type object
        Throws:
        java.lang.IllegalArgumentException - if refType is not a valid reference type
      • typeFromBinaryJLS

        public static IMCType typeFromBinaryJLS​(java.lang.String jlsType)
                                         throws java.lang.IllegalArgumentException
        Convert a binary Java type name according to The Java Language Specification, Section 13.1, into an IMCType.
        Parameters:
        jlsType - the JLS type name to convert
        Returns:
        the type object
        Throws:
        java.lang.IllegalArgumentException - if refType is not a valid reference type
      • fieldDescToBinaryJLS

        public static java.lang.String fieldDescToBinaryJLS​(java.lang.String fieldDesc)
                                                     throws java.lang.IllegalArgumentException
        Convert a field descriptor according to The Java Virtual Machine Specification, Section 4.3.2, into a binary Java type name according to The Java Language Specification, Section 13.1.
        Parameters:
        fieldDesc - the field descriptor (according to the JVM Specification) to convert
        Returns:
        the converted type name according to JLS
        Throws:
        java.lang.IllegalArgumentException - if fieldDesc is not a valid field descriptor
      • fieldDescToBinaryJLS

        public static int fieldDescToBinaryJLS​(java.lang.CharSequence desc,
                                               int start,
                                               java.lang.Appendable out)
                                        throws java.lang.IllegalArgumentException,
                                               java.io.IOException
        Convert the field descriptor, according to The Java Virtual Machine Specification, Section 4.3.2, starting at position start in desc, into a binary Java type name according to The Java Language Specification, Section 13.1. and appends it to out.
        Parameters:
        desc - a CharSequence containing the field descriptor (according to the JVM Specification) to convert
        start - the position in desc where the descriptor to convert starts
        out - an Appendable to which the result will be appended
        Returns:
        the first position in desc not converted
        Throws:
        java.lang.IllegalArgumentException - if desc is not a valid field descriptor
        java.io.IOException - If an I/O error occurs when appending to out. Note that this cannot happen when using StringBuilder or StringBuffer.
      • isDescOrRefArray

        public static boolean isDescOrRefArray​(java.lang.String fieldDesc)
        Check if a field descriptor or a reference type according to The Java Virtual Machine Specification, Sections 4.3.2 and 4.4.1 respectively, designates an array.
        Parameters:
        fieldDesc - a non-null field descriptor or reference type (according to the JVM Specification)
        Returns:
        true iff the descriptor denotes an array type
      • isDescPrimitive

        public static boolean isDescPrimitive​(java.lang.String fieldDesc)
        Check if a field descriptor according to The Java Virtual Machine Specification, Section 4.3.2, designates a primitive type.
        Parameters:
        fieldDesc - a non-null field descriptor (according to the JVM Specification)
        Returns:
        true iff the descriptor denotes a primitive type