com.ibm.wala.util.strings
Class StringStuff

java.lang.Object
  extended by com.ibm.wala.util.strings.StringStuff

public class StringStuff
extends java.lang.Object

Some simple utilities used to manipulate Strings


Constructor Summary
StringStuff()
           
 
Method Summary
static boolean classIsPrimitive(ImmutableByteArray name, int start, int length)
           
static java.lang.String deployment2CanonicalDescriptorTypeString(java.lang.String dString)
          Translate a type from a deployment descriptor string into the type expected for use in a method descriptor eg.
static java.lang.String deployment2CanonicalTypeString(java.lang.String dString)
          Translate a type from a deployment descriptor string into the internal JVM format eg.
static java.lang.String dollarToDot(java.lang.String path)
          Convert '$' to '.' in names.
static java.lang.String dotToDollar(java.lang.String path)
          Convert '$' to '.' in names.
static java.lang.String jvmToBinaryName(java.lang.String jvmType)
          Convert a JVM encoded type name to a binary type name.
static java.lang.String jvmToReadableType(java.lang.String jvmType)
          Convert a JVM encoded type name to a readable type name.
static MethodReference makeMethodReference(java.lang.String methodSig)
           
static void padWithSpaces(java.lang.StringBuffer b, int length)
           
static short parseForArrayDimensionality(ImmutableByteArray b, int start, int length)
          Parse an array descriptor to obtain number of dimensions in corresponding array type.
static ImmutableByteArray parseForClass(ImmutableByteArray name)
          Given that name[start:start+length] is a Type name in JVM format, strip the package and return the "package-free" class name
static ImmutableByteArray parseForClass(ImmutableByteArray name, int start, int length)
          Given that name[start:start+length] is a Type name in JVM format, strip the package and return the "package-free" class name TODO: inefficient; needs tuning.
static ImmutableByteArray parseForInnermostArrayElementDescriptor(Atom a)
          Parse an array descriptor to obtain number of dimensions in corresponding array type.
static ImmutableByteArray parseForInnermostArrayElementDescriptor(ImmutableByteArray b, int start, int length)
          Parse an array descriptor to obtain number of dimensions in corresponding array type.
static ImmutableByteArray parseForPackage(ImmutableByteArray name)
          Given that name[start:start+length] is a Type name in JVM format, parse it for the package
static ImmutableByteArray parseForPackage(ImmutableByteArray name, int start, int length)
          Given that name[start:start+length] is a Type name in JVM format, parse it for the package
static TypeName[] parseForParameterNames(ImmutableByteArray b)
          Parse method descriptor to obtain descriptions of method's parameters.
static TypeName[] parseForParameterNames(java.lang.String descriptor)
           
static TypeName parseForReturnTypeName(ImmutableByteArray b)
          Parse method descriptor to obtain description of method's return type.
static TypeName parseForReturnTypeName(java.lang.String desc)
           
static java.lang.String slashToDot(java.lang.String path)
          Convert '/' to '.' in names.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

StringStuff

public StringStuff()
Method Detail

padWithSpaces

public static void padWithSpaces(java.lang.StringBuffer b,
                                 int length)

deployment2CanonicalTypeString

public static java.lang.String deployment2CanonicalTypeString(java.lang.String dString)
Translate a type from a deployment descriptor string into the internal JVM format eg. [[java/lang/String

Parameters:
dString -
Returns:
String
Throws:
java.lang.IllegalArgumentException - if dString is null

deployment2CanonicalDescriptorTypeString

public static java.lang.String deployment2CanonicalDescriptorTypeString(java.lang.String dString)
Translate a type from a deployment descriptor string into the type expected for use in a method descriptor eg. [[Ljava.lang.String;

Parameters:
dString -
Returns:
String
Throws:
java.lang.IllegalArgumentException - if dString is null

parseForReturnTypeName

public static final TypeName parseForReturnTypeName(java.lang.String desc)
                                             throws java.lang.IllegalArgumentException
Throws:
java.lang.IllegalArgumentException

parseForReturnTypeName

public static final TypeName parseForReturnTypeName(ImmutableByteArray b)
                                             throws java.lang.IllegalArgumentException
Parse method descriptor to obtain description of method's return type. TODO: tune this .. probably combine with parseForParameters.

Parameters:
b - method descriptor - something like "(III)V"
Returns:
type description
Throws:
java.lang.IllegalArgumentException - if b is null

parseForParameterNames

public static final TypeName[] parseForParameterNames(java.lang.String descriptor)
                                               throws java.lang.IllegalArgumentException
Throws:
java.lang.IllegalArgumentException

parseForParameterNames

public static final TypeName[] parseForParameterNames(ImmutableByteArray b)
                                               throws java.lang.IllegalArgumentException
Parse method descriptor to obtain descriptions of method's parameters.

Returns:
parameter descriptions, or null if there are no parameters
Throws:
java.lang.IllegalArgumentException - if b is null

parseForPackage

public static ImmutableByteArray parseForPackage(ImmutableByteArray name,
                                                 int start,
                                                 int length)
                                          throws java.lang.IllegalArgumentException
Given that name[start:start+length] is a Type name in JVM format, parse it for the package

Returns:
an ImmutableByteArray that represents the package, or null if it's the unnamed package
Throws:
java.lang.IllegalArgumentException - if name == null

parseForPackage

public static ImmutableByteArray parseForPackage(ImmutableByteArray name)
Given that name[start:start+length] is a Type name in JVM format, parse it for the package

Returns:
an ImmutableByteArray that represents the package, or null if it's the unnamed package
Throws:
java.lang.IllegalArgumentException - if name is null

parseForClass

public static ImmutableByteArray parseForClass(ImmutableByteArray name,
                                               int start,
                                               int length)
                                        throws java.lang.IllegalArgumentException
Given that name[start:start+length] is a Type name in JVM format, strip the package and return the "package-free" class name TODO: inefficient; needs tuning.

Parameters:
name -
start -
length -
Returns:
an ImmutableByteArray that represents the package, or null if it's the unnamed package
Throws:
java.lang.IllegalArgumentException - if name is null

parseForClass

public static ImmutableByteArray parseForClass(ImmutableByteArray name)
                                        throws java.lang.IllegalArgumentException
Given that name[start:start+length] is a Type name in JVM format, strip the package and return the "package-free" class name

Returns:
an ImmutableByteArray that represents the package, or null if it's the unnamed package
Throws:
java.lang.IllegalArgumentException - if name is null

parseForArrayDimensionality

public static short parseForArrayDimensionality(ImmutableByteArray b,
                                                int start,
                                                int length)
                                         throws java.lang.IllegalArgumentException,
                                                java.lang.IllegalArgumentException
Parse an array descriptor to obtain number of dimensions in corresponding array type. b: descriptor - something like "[Ljava/lang/String;" or "[[I"

Returns:
dimensionality - something like "1" or "2"
Throws:
java.lang.IllegalArgumentException - if b == null

parseForInnermostArrayElementDescriptor

public static ImmutableByteArray parseForInnermostArrayElementDescriptor(ImmutableByteArray b,
                                                                         int start,
                                                                         int length)
Parse an array descriptor to obtain number of dimensions in corresponding array type. b: descriptor - something like "[Ljava/lang/String;" or "[[I"

Returns:
dimensionality - something like "Ljava/lang/String;" or "I"
Throws:
java.lang.IllegalArgumentException - if b is null

parseForInnermostArrayElementDescriptor

public static ImmutableByteArray parseForInnermostArrayElementDescriptor(Atom a)
Parse an array descriptor to obtain number of dimensions in corresponding array type. b: descriptor - something like "[Ljava/lang/String;" or "[[I"

Returns:
dimensionality - something like "Ljava/lang/String;" or "I"
Throws:
java.lang.IllegalArgumentException - if a is null

classIsPrimitive

public static boolean classIsPrimitive(ImmutableByteArray name,
                                       int start,
                                       int length)
                                throws java.lang.IllegalArgumentException
Parameters:
name -
start -
length -
Returns:
true iff the class returned by parseForClass is primitive
Throws:
java.lang.IllegalArgumentException - if name is null

makeMethodReference

public static MethodReference makeMethodReference(java.lang.String methodSig)
                                           throws java.lang.IllegalArgumentException
Parameters:
methodSig - something like "java_cup.lexer.advance()V"
Throws:
java.lang.IllegalArgumentException - if methodSig is null

jvmToReadableType

public static java.lang.String jvmToReadableType(java.lang.String jvmType)
                                          throws java.lang.IllegalArgumentException
Convert a JVM encoded type name to a readable type name.

Parameters:
jvmType - a String containing a type name in JVM internal format.
Returns:
the same type name in readable (source code) format.
Throws:
java.lang.IllegalArgumentException - if jvmType is null

jvmToBinaryName

public static java.lang.String jvmToBinaryName(java.lang.String jvmType)
                                        throws java.lang.IllegalArgumentException
Convert a JVM encoded type name to a binary type name. This version does not call dollarToDot.

Parameters:
jvmType - a String containing a type name in JVM internal format.
Returns:
the same type name in readable (source code) format.
Throws:
java.lang.IllegalArgumentException - if jvmType is null

slashToDot

public static java.lang.String slashToDot(java.lang.String path)
Convert '/' to '.' in names.

Returns:
a String object obtained by replacing the forward slashes ('/') in the String passed as argument with ('.').
Throws:
java.lang.IllegalArgumentException - if path is null

dollarToDot

public static java.lang.String dollarToDot(java.lang.String path)
Convert '$' to '.' in names.

Parameters:
path - a string object in which dollar signs('$') must be converted to dots ('.').
Returns:
a String object obtained by replacing the dollar signs ('S') in the String passed as argument with ('.').
Throws:
java.lang.IllegalArgumentException - if path is null

dotToDollar

public static java.lang.String dotToDollar(java.lang.String path)
Convert '$' to '.' in names.

Parameters:
path - String object in which dollar signs('$') must be converted to dots ('.').
Returns:
a String object obtained by replacing the dollar signs ('S') in the String passed as argument with ('.').
Throws:
java.lang.IllegalArgumentException - if path is null