Class Util


  • public final class Util
    extends Object
    This class contains miscellaneous useful functions. In the documentation below, we refer to a 'Java class name'. These are formatted according to the rules for Class.forName() and Class.getName(). A Java class name must use '$' to separate inner class names from their containing class. There is no way to for Shrike to disambiguate 'A.B' otherwise.
    • Method Detail

      • getWordSize

        public static byte getWordSize​(String s)
        Returns:
        the JVM "stack word size" for the given JVM type
        Throws:
        IllegalArgumentException - if s is null
      • getParamsWordSize

        public static int getParamsWordSize​(String type)
                                     throws IllegalArgumentException
        Compute the total number of JVM "stack words" occupied by the method parameters for method signature "type". Any "this" parameter is not included.
        Throws:
        IllegalArgumentException - if type is null
      • makeType

        public static String makeType​(String c)
        Convert a fully-qualified Java class name ('.' separated) into an internal JVM type name ('/' separated, starting with 'L' and ending with ';').
        Throws:
        IllegalArgumentException - if c is null
      • makeTypeAll

        public static String makeTypeAll​(String c)
        Convert a fully-qualified Java type name (either primitive or class name, '.' separated) into an internal JVM type name (one letter for primitive and '/' separated, starting with 'L' and ending with ';' for class name).
      • makeType

        public static String makeType​(Class<?> c)
        Compute the JVM type name for an actual Java class. Names such as "int", "void", etc are also converted to their JVM type names.
        Throws:
        IllegalArgumentException - if c is null
      • getParamsTypes

        public static String[] getParamsTypes​(String thisClassType,
                                              String type)
                                       throws IllegalArgumentException
        Extract the types of the parameters given by method signature "type".
        Parameters:
        thisClassType - null if the method is static, otherwise the type of "this"
        Returns:
        an array of the parameter types in order, including "this" as the first parameter if thisClassType was non-null
        Throws:
        IllegalArgumentException - if type == null
      • getParamsTypesInLocals

        public static String[] getParamsTypesInLocals​(String thisClassType,
                                                      String type)
                                               throws IllegalArgumentException
        Compute the types of the local variables on entry to a method. Similar to "getParamsTypes" except null array entries are inserted to account for unused local variables because of 2-word parameter values.
        Throws:
        IllegalArgumentException - if type == null
      • getStackType

        public static String getStackType​(String t)
        Compute the promoted type that the JVM uses to manipulate values of type "t" on its working stack.
        Throws:
        IllegalArgumentException - if t is null
      • makeArray

        public static String makeArray​(String t)
        Compute the type "array of t".
      • isArrayType

        public static boolean isArrayType​(String t)
        Returns:
        true iff t is an array type
      • isPrimitiveType

        public static boolean isPrimitiveType​(String t)
        Returns:
        true iff t is a primitive type
      • error

        public static void error​(String s)
        General "print an error" routine.
      • makeGet

        public static GetInstruction makeGet​(Class<?> c,
                                             String name)
        Make an Instruction which loads the value of a field, given its name and Java Class. The field type is obtained using reflection.
        Throws:
        IllegalArgumentException - if c is null
      • makePut

        public static PutInstruction makePut​(Class<?> c,
                                             String name)
        Make an Instruction which stores the value of a field, given its name and Java Class. The field type is obtained using reflection.
        Throws:
        IllegalArgumentException - if c is null
      • makeInvoke

        public static InvokeInstruction makeInvoke​(Class<?> c,
                                                   String name,
                                                   Class<?>[] paramTypes)
        Make an Instruction which calls a method, given its name, Java Class, and a list of parameter classes to use for overload resolution. Method information is obtained using reflection.
        Throws:
        IllegalArgumentException - if name is null
      • makeInvoke

        public static InvokeInstruction makeInvoke​(Class<?> c,
                                                   String name)
        Make an Instruction which calls a method, given its name and Java Class. Method information is obtained using reflection. If there is more than one method with the given name, an error will be thrown.
        Throws:
        IllegalArgumentException - if name is null