Class Utility

java.lang.Object
org.apache.bcel.classfile.Utility

public abstract class Utility extends Object
Utility functions that do not really belong to any class in particular.
Version:
$Id: Utility.java 438661 2006-08-30 21:57:25Z dbrosius $
Author:
M. Dahm
  • Constructor Details

    • Utility

      public Utility()
  • Method Details

    • accessToString

      public static final String accessToString(int access_flags)
      Convert bit field of flags into string such as `static final'.
      Parameters:
      access_flags - Access flags
      Returns:
      String representation of flags
    • accessToString

      public static final String accessToString(int access_flags, boolean for_class)
      Convert bit field of flags into string such as `static final'. Special case: Classes compiled with new compilers and with the `ACC_SUPER' flag would be said to be "synchronized". This is because SUN used the same value for the flags `ACC_SUPER' and `ACC_SYNCHRONIZED'.
      Parameters:
      access_flags - Access flags
      for_class - access flags are for class qualifiers ?
      Returns:
      String representation of flags
    • classOrInterface

      public static final String classOrInterface(int access_flags)
      Returns:
      "class" or "interface", depending on the ACC_INTERFACE flag
    • codeToString

      public static final String codeToString(byte[] code, ConstantPool constant_pool, int index, int length, boolean verbose)
      Disassemble a byte array of JVM byte codes starting from code line `index' and return the disassembled string representation. Decode only `num' opcodes (including their operands), use -1 if you want to decompile everything.
      Parameters:
      code - byte code array
      constant_pool - Array of constants
      index - offset in `code' array (number of opcodes, not bytes!)
      length - number of opcodes to decompile, -1 for all
      verbose - be verbose, e.g. print constant pool index
      Returns:
      String representation of byte codes
    • codeToString

      public static final String codeToString(byte[] code, ConstantPool constant_pool, int index, int length)
    • codeToString

      public static final String codeToString(ByteSequence bytes, ConstantPool constant_pool, boolean verbose) throws IOException
      Disassemble a stream of byte codes and return the string representation.
      Parameters:
      bytes - stream of bytes
      constant_pool - Array of constants
      verbose - be verbose, e.g. print constant pool index
      Returns:
      String representation of byte code
      Throws:
      IOException
    • codeToString

      public static final String codeToString(ByteSequence bytes, ConstantPool constant_pool) throws IOException
      Throws:
      IOException
    • compactClassName

      public static final String compactClassName(String str)
      Shorten long class names, java/lang/String becomes String.
      Parameters:
      str - The long class name
      Returns:
      Compacted class name
    • compactClassName

      public static final String compactClassName(String str, String prefix, boolean chopit)
      Shorten long class name str, i.e., chop off the prefix, if the class name starts with this string and the flag chopit is true. Slashes / are converted to dots ..
      Parameters:
      str - The long class name
      prefix - The prefix the get rid off
      chopit - Flag that determines whether chopping is executed or not
      Returns:
      Compacted class name
    • compactClassName

      public static final String compactClassName(String str, boolean chopit)
      Shorten long class names, java/lang/String becomes java.lang.String, e.g.. If chopit is true the prefix java.lang is also removed.
      Parameters:
      str - The long class name
      chopit - Flag that determines whether chopping is executed or not
      Returns:
      Compacted class name
    • setBit

      public static final int setBit(int flag, int i)
      Returns:
      `flag' with bit `i' set to 1
    • clearBit

      public static final int clearBit(int flag, int i)
      Returns:
      `flag' with bit `i' set to 0
    • isSet

      public static final boolean isSet(int flag, int i)
      Returns:
      true, if bit `i' in `flag' is set
    • methodTypeToSignature

      public static final String methodTypeToSignature(String ret, String[] argv) throws ClassFormatException
      Converts string containing the method return and argument types to a byte code method signature.
      Parameters:
      ret - Return type of method
      argv - Types of method arguments
      Returns:
      Byte code representation of method signature
      Throws:
      ClassFormatException
    • methodSignatureArgumentTypes

      public static final String[] methodSignatureArgumentTypes(String signature) throws ClassFormatException
      Parameters:
      signature - Method signature
      Returns:
      Array of argument types
      Throws:
      ClassFormatException
    • methodSignatureArgumentTypes

      public static final String[] methodSignatureArgumentTypes(String signature, boolean chopit) throws ClassFormatException
      Parameters:
      signature - Method signature
      chopit - Shorten class names ?
      Returns:
      Array of argument types
      Throws:
      ClassFormatException
    • methodSignatureReturnType

      public static final String methodSignatureReturnType(String signature) throws ClassFormatException
      Parameters:
      signature - Method signature
      Returns:
      return type of method
      Throws:
      ClassFormatException
    • methodSignatureReturnType

      public static final String methodSignatureReturnType(String signature, boolean chopit) throws ClassFormatException
      Parameters:
      signature - Method signature
      chopit - Shorten class names ?
      Returns:
      return type of method
      Throws:
      ClassFormatException
    • methodSignatureToString

      public static final String methodSignatureToString(String signature, String name, String access)
      Converts method signature to string with all class names compacted.
      Parameters:
      signature - to convert
      name - of method
      access - flags of method
      Returns:
      Human readable signature
    • methodSignatureToString

      public static final String methodSignatureToString(String signature, String name, String access, boolean chopit)
    • methodSignatureToString

      public static final String methodSignatureToString(String signature, String name, String access, boolean chopit, LocalVariableTable vars) throws ClassFormatException
      A return­type signature represents the return value from a method. It is a series of bytes in the following grammar: ::= | V The character V indicates that the method returns no value. Otherwise, the signature indicates the type of the return value. An argument signature represents an argument passed to a method: ::= A method signature represents the arguments that the method expects, and the value that it returns. ::= () ::= * This method converts such a string into a Java type declaration like `void main(String[])' and throws a `ClassFormatException' when the parsed type is invalid.
      Parameters:
      signature - Method signature
      name - Method name
      access - Method access rights
      Returns:
      Java type declaration
      Throws:
      ClassFormatException
    • replace

      public static final String replace(String str, String old, String new_)
      Replace all occurences of old in str with new.
      Parameters:
      str - String to permute
      old - String to be replaced
      new_ - Replacement string
      Returns:
      new String object
    • signatureToString

      public static final String signatureToString(String signature)
      Converts signature to string with all class names compacted.
      Parameters:
      signature - to convert
      Returns:
      Human readable signature
    • signatureToString

      public static final String signatureToString(String signature, boolean chopit)
      The field signature represents the value of an argument to a function or the value of a variable. It is a series of bytes generated by the following grammar:
        ::= 
             ::= ||
              ::= B|C|D|F|I|J|S|Z
            ::= L;
             ::= [
      
       The meaning of the base types is as follows:
       B byte signed byte
       C char character
       D double double precision IEEE float
       F float single precision IEEE float
       I int integer
       J long long integer
       L; ... an object of the given class
       S short signed short
       Z boolean true or false
       [ ... array
       
      This method converts this string into a Java type declaration such as `String[]' and throws a `ClassFormatException' when the parsed type is invalid.
      Parameters:
      signature - Class signature
      chopit - Flag that determines whether chopping is executed or not
      Returns:
      Java type declaration
      Throws:
      ClassFormatException
    • getSignature

      public static String getSignature(String type)
      Parse Java type such as "char", or "java.lang.String[]" and return the signature in byte code format, e.g. "C" or "[Ljava/lang/String;" respectively.
      Parameters:
      type - Java type
      Returns:
      byte code signature
    • typeOfMethodSignature

      public static final byte typeOfMethodSignature(String signature) throws ClassFormatException
      Return type of method signature as a byte value as defined in Constants
      Parameters:
      signature - in format described above
      Returns:
      type of method signature
      Throws:
      ClassFormatException
      See Also:
    • typeOfSignature

      public static final byte typeOfSignature(String signature) throws ClassFormatException
      Return type of signature as a byte value as defined in Constants
      Parameters:
      signature - in format described above
      Returns:
      type of signature
      Throws:
      ClassFormatException
      See Also:
    • searchOpcode

      public static short searchOpcode(String name)
      Map opcode names to opcode numbers. E.g., return Constants.ALOAD for "aload"
    • toHexString

      public static final String toHexString(byte[] bytes)
      Convert bytes into hexidecimal string
      Returns:
      bytes as hexidecimal string, e.g. 00 FA 12 ...
    • format

      public static final String format(int i, int length, boolean left_justify, char fill)
      Return a string for an integer justified left or right and filled up with `fill' characters if necessary.
      Parameters:
      i - integer to format
      length - length of desired string
      left_justify - format left or right
      fill - fill character
      Returns:
      formatted int
    • fillup

      public static final String fillup(String str, int length, boolean left_justify, char fill)
      Fillup char with up to length characters with char `fill' and justify it left or right.
      Parameters:
      str - string to format
      length - length of desired string
      left_justify - format left or right
      fill - fill character
      Returns:
      formatted string
    • printArray

      public static final void printArray(PrintStream out, Object[] obj)
    • printArray

      public static final void printArray(PrintWriter out, Object[] obj)
    • printArray

      public static final String printArray(Object[] obj)
    • printArray

      public static final String printArray(Object[] obj, boolean braces)
    • printArray

      public static final String printArray(Object[] obj, boolean braces, boolean quote)
    • isJavaIdentifierPart

      public static boolean isJavaIdentifierPart(char ch)
      Returns:
      true, if character is one of (a, ... z, A, ... Z, 0, ... 9, _)
    • encode

      public static String encode(byte[] bytes, boolean compress) throws IOException
      Encode byte array it into Java identifier string, i.e., a string that only contains the following characters: (a, ... z, A, ... Z, 0, ... 9, _, $). The encoding algorithm itself is not too clever: if the current byte's ASCII value already is a valid Java identifier part, leave it as it is. Otherwise it writes the escape character($) followed by

      • the ASCII value as a hexadecimal string, if the value is not in the range 200..247
      • a Java identifier char not used in a lowercase hexadecimal string, if the value is in the range 200..247
        • This operation inflates the original byte array by roughly 40-50%

      Parameters:
      bytes - the byte array to convert
      compress - use gzip to minimize string
      Throws:
      IOException
    • decode

      public static byte[] decode(String s, boolean uncompress) throws IOException
      Decode a string back to a byte array.
      Parameters:
      s - the string to convert
      uncompress - use gzip to uncompress the stream of bytes
      Throws:
      IOException
    • convertString

      public static final String convertString(String label)
      Escape all occurences of newline chars '\n', quotes \", etc.
    • getAnnotationAttributes

      public static Attribute[] getAnnotationAttributes(ConstantPoolGen cp, List vec)
      Converts a list of AnnotationGen objects into a set of attributes that can be attached to the class file.
      Parameters:
      cp - The constant pool gen where we can create the necessary name refs
      vec - A list of AnnotationGen objects
    • getParameterAnnotationAttributes

      public static Attribute[] getParameterAnnotationAttributes(ConstantPoolGen cp, List[] vec)
      Annotations against a class are stored in one of four attribute kinds: - RuntimeVisibleParameterAnnotations - RuntimeInvisibleParameterAnnotations