com.vladium.jcd.lib
Class Types

java.lang.Object
  extended bycom.vladium.jcd.lib.Types

public abstract class Types
extends java.lang.Object

Utility methods for manipulating type signatures and descriptors. TODO: fix usage of chars in parsers

Author:
(C) 2001, Vlad Roubtsov

Nested Class Summary
private static class Types.methodDescriptorCompiler
           
private static class Types.signatureCompiler
           
private static class Types.typeDescriptorCompiler
           
private static class Types.typeDescriptorCompiler2
           
 
Constructor Summary
Types()
           
 
Method Summary
static java.lang.String accessFlagsToString(int flags, boolean isClass)
           
static java.lang.String[] descriptorToParameterTypes(java.lang.String methoddescriptor)
           
static java.lang.String descriptorToReturnType(java.lang.String methoddescriptor)
           
static java.lang.Class descriptorToType(java.lang.String typedescriptor)
          Converts a VM descriptor to the corresponding type.
static java.lang.String fullMethodDescriptorToFullUserName(java.lang.String classJavaName, java.lang.String methodName, java.lang.String methoddescriptor)
           
static java.lang.String fullMethodDescriptorToUserName(java.lang.String classJavaName, java.lang.String methodName, java.lang.String methoddescriptor)
           
static java.lang.String getClassPackageName(java.lang.Class c)
          Returns 'c''s package name [does not include trailing '.'] or "" if 'c' is in the default package.
static java.lang.String javaNameToVMName(java.lang.String javaName)
          Converts Java-styled package/class name to how it would be represented in the VM.
static java.lang.String methodDescriptorToUserName(java.lang.String methoddescriptor)
           
static java.lang.String signatureToDescriptor(java.lang.Class[] parameterTypes, java.lang.Class returnType)
          Converts a method signature (parameter types + return type) to its VM descriptor representation.
static java.lang.String signatureToDescriptor(java.lang.reflect.Method method)
          Converts a method signature to its VM descriptor representation.
static java.lang.String signatureToMethodDescriptor(java.lang.String[] parameterTypeDescriptors, java.lang.String returnTypeDescriptor)
           
private static java.lang.String simpleClassName(java.lang.String classJavaName)
           
static java.lang.String typeDescriptorToUserName(java.lang.String typedescriptor)
           
static java.lang.String typeToDescriptor(java.lang.Class type)
          Converts a type (a Class) to its VM descriptor representation.
static java.lang.String vmNameToJavaName(java.lang.String vmName)
          Converts a VM-styled package/class name to how it would be represented in Java.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Types

public Types()
Method Detail

getClassPackageName

public static java.lang.String getClassPackageName(java.lang.Class c)
Returns 'c''s package name [does not include trailing '.'] or "" if 'c' is in the default package.


accessFlagsToString

public static java.lang.String accessFlagsToString(int flags,
                                                   boolean isClass)

javaNameToVMName

public static java.lang.String javaNameToVMName(java.lang.String javaName)
Converts Java-styled package/class name to how it would be represented in the VM.

Example:
javaNameToVMName("java.lang.Object") = "java/lang/Object"

See Also:
vmNameToJavaName(java.lang.String)

vmNameToJavaName

public static java.lang.String vmNameToJavaName(java.lang.String vmName)
Converts a VM-styled package/class name to how it would be represented in Java.

Example:
vmNameToJavaName("java/lang/Object") = "java.lang.Object"

See Also:
javaNameToVMName(java.lang.String)

signatureToDescriptor

public static java.lang.String signatureToDescriptor(java.lang.reflect.Method method)
Converts a method signature to its VM descriptor representation. See $4.3 of the VM spec 1.0 for the descriptor grammar.

Example:
signatureToDescriptor(new Object().getClass().getMethod("equals" ,new Class[0])) = "(Ljava/lang/Object;)Z"

Equivalent to signatureToDescriptor(method.getParameterTypes (), method.getReturnType ()).


signatureToDescriptor

public static java.lang.String signatureToDescriptor(java.lang.Class[] parameterTypes,
                                                     java.lang.Class returnType)
Converts a method signature (parameter types + return type) to its VM descriptor representation. See $4.3 of the VM spec 1.0 for the descriptor grammar.


typeToDescriptor

public static java.lang.String typeToDescriptor(java.lang.Class type)
Converts a type (a Class) to its VM descriptor representation.

Example:
typeToDescriptor(Object.class) = "Ljava/lang/Object;"
typeToDescriptor(boolean.class) = "Z"

Note the invariant typeToDescriptor(descriptorToType(desc)) == desc.

See Also:
descriptorToType(java.lang.String)

descriptorToType

public static java.lang.Class descriptorToType(java.lang.String typedescriptor)
                                        throws java.lang.ClassNotFoundException
Converts a VM descriptor to the corresponding type.

Example:
descriptorToType("[[I") = int[][].class
descriptorToType("B") = byte.class

Note the invariant descriptorToType(typeToDescriptor(c)) == c.

Throws:
java.lang.ClassNotFoundException
See Also:
descriptorToType(java.lang.String)

descriptorToReturnType

public static java.lang.String descriptorToReturnType(java.lang.String methoddescriptor)

descriptorToParameterTypes

public static java.lang.String[] descriptorToParameterTypes(java.lang.String methoddescriptor)

signatureToMethodDescriptor

public static java.lang.String signatureToMethodDescriptor(java.lang.String[] parameterTypeDescriptors,
                                                           java.lang.String returnTypeDescriptor)

typeDescriptorToUserName

public static java.lang.String typeDescriptorToUserName(java.lang.String typedescriptor)

methodDescriptorToUserName

public static java.lang.String methodDescriptorToUserName(java.lang.String methoddescriptor)

fullMethodDescriptorToUserName

public static java.lang.String fullMethodDescriptorToUserName(java.lang.String classJavaName,
                                                              java.lang.String methodName,
                                                              java.lang.String methoddescriptor)

fullMethodDescriptorToFullUserName

public static java.lang.String fullMethodDescriptorToFullUserName(java.lang.String classJavaName,
                                                                  java.lang.String methodName,
                                                                  java.lang.String methoddescriptor)

simpleClassName

private static java.lang.String simpleClassName(java.lang.String classJavaName)