Package com.ibm.wala.shrikeBT
Class Util
- java.lang.Object
-
- com.ibm.wala.shrikeBT.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 Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static Pair<boolean[],boolean[]>computeBasicBlocks(IInstruction[] instructions, ExceptionHandler[][] handlers)static StringcomputeSignature(Class<?>[] params, Class<?> result)Given a Java Method, compute the VM-style type signature.static voiderror(String s)General "print an error" routine.static MethodfindMethod(Class<?> c, String name)static MethodfindMethod(Class<?> c, String name, Class<?>[] paramTypes)static String[]getParamsTypes(String thisClassType, String type)Extract the types of the parameters given by method signature "type".static String[]getParamsTypesInLocals(String thisClassType, String type)Compute the types of the local variables on entry to a method.static intgetParamsWordSize(String type)Compute the total number of JVM "stack words" occupied by the method parameters for method signature "type".static StringgetReturnType(String s)Get the return type from a method signature.static StringgetStackType(String t)Compute the promoted type that the JVM uses to manipulate values of type "t" on its working stack.static bytegetWordSize(String s)static booleanisArrayType(String t)static booleanisPrimitiveType(String t)static StringmakeArray(String t)Compute the type "array of t".static StringmakeClass(String t)Convert a JVM type name back into a Java class name.static GetInstructionmakeGet(Class<?> c, String name)Make an Instruction which loads the value of a field, given its name and Java Class.static InvokeInstructionmakeInvoke(Class<?> c, String name)Make an Instruction which calls a method, given its name and Java Class.static InvokeInstructionmakeInvoke(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.static PutInstructionmakePut(Class<?> c, String name)Make an Instruction which stores the value of a field, given its name and Java Class.static StringmakeType(Class<?> c)Compute the JVM type name for an actual Java class.static StringmakeType(String c)Convert a fully-qualified Java class name ('.' separated) into an internal JVM type name ('/' separated, starting with 'L' and ending with ';').static StringmakeTypeAll(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).static byte[]readFully(InputStream s)static voidreadFully(InputStream s, byte[] bytes)
-
-
-
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).
-
makeClass
public static String makeClass(String t) throws IllegalArgumentException
Convert a JVM type name back into a Java class name.- Throws:
IllegalArgumentException- if t is null
-
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
-
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
-
getReturnType
public static String getReturnType(String s)
Get the return type from a method signature.- Throws:
IllegalArgumentException- if s is null
-
error
public static void error(String s)
General "print an error" routine.
-
computeSignature
public static String computeSignature(Class<?>[] params, Class<?> result) throws IllegalArgumentException
Given a Java Method, compute the VM-style type signature.- Throws:
IllegalArgumentException- if params == null
-
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
-
readFully
public static void readFully(InputStream s, byte[] bytes) throws IllegalArgumentException, IllegalArgumentException, IOException
- Throws:
IllegalArgumentExceptionIOException
-
readFully
public static byte[] readFully(InputStream s) throws IOException
- Throws:
IOException
-
computeBasicBlocks
public static Pair<boolean[],boolean[]> computeBasicBlocks(IInstruction[] instructions, ExceptionHandler[][] handlers)
-
-