org.apache.bcel.classfile

Class Utility

public abstract class Utility extends Object

Utility functions that do not really belong to any class in particular.
Method Summary
static StringaccessToString(int access_flags)
Convert bit field of flags into string such as `static final'.
static StringaccessToString(int access_flags, boolean for_class)
Convert bit field of flags into string such as `static final'.
static StringclassOrInterface(int access_flags)
static intclearBit(int flag, int i)
static StringcodeToString(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.
static StringcodeToString(byte[] code, ConstantPool constant_pool, int index, int length)
static StringcodeToString(ByteSequence bytes, ConstantPool constant_pool, boolean verbose)
Disassemble a stream of byte codes and return the string representation.
static StringcodeToString(ByteSequence bytes, ConstantPool constant_pool)
static StringcompactClassName(String str)
Shorten long class names, java/lang/String becomes String.
static StringcompactClassName(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.
static StringcompactClassName(String str, boolean chopit)
Shorten long class names, java/lang/String becomes java.lang.String, e.g..
static StringconvertString(String label)
Escape all occurences of newline chars '\n', quotes \", etc.
static byte[]decode(String s, boolean uncompress)
Decode a string back to a byte array.
static Stringencode(byte[] bytes, boolean compress)
Encode byte array it into Java identifier string, i.e., a string that only contains the following characters: (a, ... z, A, ...
static Stringfillup(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.
static Stringformat(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.
static StringgetSignature(String type)
Parse Java type such as "char", or "java.lang.String[]" and return the signature in byte code format, e.g.
static booleanisJavaIdentifierPart(char ch)
static booleanisSet(int flag, int i)
static String[]methodSignatureArgumentTypes(String signature)
static String[]methodSignatureArgumentTypes(String signature, boolean chopit)
static StringmethodSignatureReturnType(String signature)
static StringmethodSignatureReturnType(String signature, boolean chopit)
static StringmethodSignatureToString(String signature, String name, String access)
Converts method signature to string with all class names compacted.
static StringmethodSignatureToString(String signature, String name, String access, boolean chopit)
static StringmethodSignatureToString(String signature, String name, String access, boolean chopit, LocalVariableTable vars)
A return­type signature represents the return value from a method.
static StringmethodTypeToSignature(String ret, String[] argv)
Converts string containing the method return and argument types to a byte code method signature.
static voidprintArray(PrintStream out, Object[] obj)
static voidprintArray(PrintWriter out, Object[] obj)
static StringprintArray(Object[] obj)
static StringprintArray(Object[] obj, boolean braces)
static StringprintArray(Object[] obj, boolean braces, boolean quote)
static Stringreplace(String str, String old, String new_)
Replace all occurences of old in str with new.
static shortsearchOpcode(String name)
Map opcode names to opcode numbers.
static intsetBit(int flag, int i)
static StringsignatureToString(String signature)
Converts signature to string with all class names compacted.
static StringsignatureToString(String signature, boolean chopit)
The field signature represents the value of an argument to a function or the value of a variable.
static StringtoHexString(byte[] bytes)
Convert bytes into hexidecimal string
static bytetypeOfMethodSignature(String signature)
Return type of method signature as a byte value as defined in Constants
static bytetypeOfSignature(String signature)
Return type of signature as a byte value as defined in Constants

Method Detail

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

clearBit

public static final int clearBit(int flag, int i)

Returns: `flag' with bit `i' set to 0

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)
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

codeToString

public static final String codeToString(ByteSequence bytes, ConstantPool constant_pool)

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

convertString

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

decode

public static byte[] decode(String s, boolean uncompress)
Decode a string back to a byte array.

Parameters: s the string to convert uncompress use gzip to uncompress the stream of bytes

encode

public static String encode(byte[] bytes, boolean compress)
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

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

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

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

isJavaIdentifierPart

public static boolean isJavaIdentifierPart(char ch)

Returns: true, if character is one of (a, ... z, A, ... Z, 0, ... 9, _)

isSet

public static final boolean isSet(int flag, int i)

Returns: true, if bit `i' in `flag' is set

methodSignatureArgumentTypes

public static final String[] methodSignatureArgumentTypes(String signature)

Parameters: signature Method signature

Returns: Array of argument types

Throws: ClassFormatException

methodSignatureArgumentTypes

public static final String[] methodSignatureArgumentTypes(String signature, boolean chopit)

Parameters: signature Method signature chopit Shorten class names ?

Returns: Array of argument types

Throws: ClassFormatException

methodSignatureReturnType

public static final String methodSignatureReturnType(String signature)

Parameters: signature Method signature

Returns: return type of method

Throws: ClassFormatException

methodSignatureReturnType

public static final String methodSignatureReturnType(String signature, boolean chopit)

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)
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

methodTypeToSignature

public static final String methodTypeToSignature(String ret, String[] argv)
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

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)

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

searchOpcode

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

setBit

public static final int setBit(int flag, int i)

Returns: `flag' with bit `i' set to 1

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

toHexString

public static final String toHexString(byte[] bytes)
Convert bytes into hexidecimal string

Returns: bytes as hexidecimal string, e.g. 00 FA 12 ...

typeOfMethodSignature

public static final byte typeOfMethodSignature(String signature)
Return type of method signature as a byte value as defined in Constants

Parameters: signature in format described above

Returns: type of method signature

See Also: Constants

typeOfSignature

public static final byte typeOfSignature(String signature)
Return type of signature as a byte value as defined in Constants

Parameters: signature in format described above

Returns: type of signature

See Also: Constants