Package javassist.bytecode

# Class Descriptor

java.lang.Object
javassist.bytecode.Descriptor

public class Descriptor extends Object
A support class for dealing with descriptors.

See chapter 4.3 in "The Java Virtual Machine Specification (2nd ed.)"

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static class`
`Descriptor.Iterator`
An Iterator over a descriptor.

## Constructor Summary

Constructors
Constructor
Description
`Descriptor()`

## Method Summary

Modifier and Type
Method
Description
`static String`
`appendParameter(String classname, String desc)`
Appends a parameter type to the parameter list represented by the given descriptor.
`static String`
`appendParameter(CtClass type, String descriptor)`
Appends a parameter type to the parameter list represented by the given descriptor.
`static int`
`arrayDimension(String desc)`
Computes the dimension of the array represented by the given descriptor.
`static String`
`changeReturnType(String classname, String desc)`
Changes the return type included in the given descriptor.
`static int`
`dataSize(String desc)`
Computes the data size specified by the given descriptor.
`static boolean`
`eqParamTypes(String desc1, String desc2)`
Returns true if the list of the parameter types of desc1 is equal to that of desc2.
`static String`
`getParamDescriptor(String decl)`
Returns the signature of the given descriptor.
`static CtClass[]`
`getParameterTypes(String desc, ClassPool cp)`
Returns the `CtClass` objects representing the parameter types specified by the given descriptor.
`static CtClass`
`getReturnType(String desc, ClassPool cp)`
Returns the `CtClass` object representing the return type specified by the given descriptor.
`static String`
`insertParameter(String classname, String desc)`
Inserts a parameter type at the beginning of the parameter list represented by the given descriptor.
`static String`
`insertParameter(CtClass type, String descriptor)`
Inserts a parameter type at the beginning of the parameter list represented by the given descriptor.
`static int`
`numOfParameters(String desc)`
Returns the number of the prameters included in the given descriptor.
`static String`
`of(String classname)`
Converts to a descriptor from a Java class name
`static String`
`of(CtClass type)`
Returns the descriptor representing the given type.
`static String`
`ofConstructor(CtClass[] paramTypes)`
Returns the descriptor representing a constructor receiving the given parameter types.
`static String`
`ofMethod(CtClass returnType, CtClass[] paramTypes)`
Returns the descriptor representing a method that receives the given parameter types and returns the given type.
`static String`
`ofParameters(CtClass[] paramTypes)`
Returns the descriptor representing a list of parameter types.
`static int`
`paramSize(String desc)`
Computes the data size of parameters.
`static String`
`rename(String desc, String oldname, String newname)`
Substitutes a class name in the given descriptor string.
`static String`
`rename(String desc, Map<String,String> map)`
Substitutes class names in the given descriptor string according to the given `map`.
`static String`
`toArrayComponent(String desc, int dim)`
Returns the descriptor of the type of the array component.
`static String`
`toClassName(String descriptor)`
Converts to a Java class name from a descriptor.
`static CtClass`
`toCtClass(String desc, ClassPool cp)`
Returns a `CtClass` object representing the type specified by the given descriptor.
`static String`
`toJavaName(String classname)`
Converts a class name from the internal representation used in the JVM to the normal one used in Java.
`static String`
`toJvmName(String classname)`
Converts a class name into the internal representation used in the JVM.
`static String`
`toJvmName(CtClass clazz)`
Returns the internal representation of the class name in the JVM.
`static String`
`toString(String desc)`
Returns a human-readable representation of the given descriptor.

### Methods inherited from class java.lang.Object

`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### Descriptor

public Descriptor()

## Method Details

### toJvmName

public static String toJvmName(String classname)
Converts a class name into the internal representation used in the JVM.

Note that `toJvmName(toJvmName(s))` is equivalent to `toJvmName(s)`.

### toJavaName

public static String toJavaName(String classname)
Converts a class name from the internal representation used in the JVM to the normal one used in Java. This method does not deal with an array type name such as "[Ljava/lang/Object;" and "[I;". For such names, use `toClassName()`.

See Also:
  - `toClassName(String)`

### toJvmName

public static String toJvmName(CtClass clazz)
Returns the internal representation of the class name in the JVM.

### toClassName

public static String toClassName(String descriptor)
Converts to a Java class name from a descriptor.

Parameters:
  `descriptor` - type descriptor.

### of

public static String of(String classname)
Converts to a descriptor from a Java class name

### rename

public static String rename(String desc, String oldname, String newname)
Substitutes a class name in the given descriptor string.

Parameters:
  `desc` - descriptor string
  `oldname` - replaced JVM class name
  `newname` - substituted JVM class name
See Also:
  - `toJvmName(String)`

### rename

public static String rename(String desc, Map<String,String> map)
Substitutes class names in the given descriptor string according to the given `map`.

Parameters:
  `map` - a map between replaced and substituted JVM class names.
See Also:
  - `toJvmName(String)`

### of

public static String of(CtClass type)
Returns the descriptor representing the given type.

### ofConstructor

public static String ofConstructor(CtClass[] paramTypes)
Returns the descriptor representing a constructor receiving the given parameter types.

Parameters:
  `paramTypes` - parameter types

### ofMethod

public static String ofMethod(CtClass returnType, CtClass[] paramTypes)
Returns the descriptor representing a method that receives the given parameter types and returns the given type.

Parameters:
  `returnType` - return type
  `paramTypes` - parameter types

### ofParameters

public static String ofParameters(CtClass[] paramTypes)
Returns the descriptor representing a list of parameter types. For example, if the given parameter types are two `int`, then this method returns `"(II)"`.

Parameters:
  `paramTypes` - parameter types

### appendParameter

public static String appendParameter(String classname, String desc)
Appends a parameter type to the parameter list represented by the given descriptor.

`classname` must not be an array type.

Parameters:
  `classname` - parameter type (not primitive type)
  `desc` - descriptor

### insertParameter

public static String insertParameter(String classname, String desc)
Inserts a parameter type at the beginning of the parameter list represented by the given descriptor.

`classname` must not be an array type.

Parameters:
  `classname` - parameter type (not primitive type)
  `desc` - descriptor

### appendParameter

public static String appendParameter(CtClass type, String descriptor)
Appends a parameter type to the parameter list represented by the given descriptor. The appended parameter becomes the last parameter.

Parameters:
  `type` - the type of the appended parameter.
  `descriptor` - the original descriptor.

### insertParameter

public static String insertParameter(CtClass type, String descriptor)
Inserts a parameter type at the beginning of the parameter list represented by the given descriptor.

Parameters:
  `type` - the type of the inserted parameter.
  `descriptor` - the descriptor of the method.

### changeReturnType

public static String changeReturnType(String classname, String desc)
Changes the return type included in the given descriptor.

`classname` must not be an array type.

Parameters:
  `classname` - return type
  `desc` - descriptor

### getParameterTypes

public static CtClass[] getParameterTypes(String desc, ClassPool cp) throws NotFoundException
Returns the `CtClass` objects representing the parameter types specified by the given descriptor.

Parameters:
  `desc` - descriptor
  `cp` - the class pool used for obtaining a `CtClass` object.
Throws:
  `NotFoundException`

### eqParamTypes

public static boolean eqParamTypes(String desc1, String desc2)
Returns true if the list of the parameter types of desc1 is equal to that of desc2. For example, "(II)V" and "(II)I" are equal.

### getParamDescriptor

public static String getParamDescriptor(String decl)
Returns the signature of the given descriptor. The signature does not include the return type. For example, the signature of "(I)V" is "(I)".

### getReturnType

public static CtClass getReturnType(String desc, ClassPool cp) throws NotFoundException
Returns the `CtClass` object representing the return type specified by the given descriptor.

Parameters:
  `desc` - descriptor
  `cp` - the class pool used for obtaining a `CtClass` object.
Throws:
  `NotFoundException`

### numOfParameters

public static int numOfParameters(String desc)
Returns the number of the prameters included in the given descriptor.

Parameters:
  `desc` - descriptor

### toCtClass

public static CtClass toCtClass(String desc, ClassPool cp) throws NotFoundException
Returns a `CtClass` object representing the type specified by the given descriptor.

This method works even if the package-class separator is not `/` but `.` (period). For example, it accepts `Ljava.lang.Object;` as well as `Ljava/lang/Object;`.

Parameters:
  `desc` - descriptor.
  `cp` - the class pool used for obtaining a `CtClass` object.
Throws:
  `NotFoundException`

### arrayDimension

public static int arrayDimension(String desc)
Computes the dimension of the array represented by the given descriptor. For example, if the descriptor is `"[[I"`, then this method returns 2.

Parameters:
  `desc` - the descriptor.
Returns:
  0 if the descriptor does not represent an array type.

### toArrayComponent

public static String toArrayComponent(String desc, int dim)
Returns the descriptor of the type of the array component. For example, if the given descriptor is `"[[Ljava/lang/String;"` and the given dimension is 2, then this method returns `"Ljava/lang/String;"`.

Parameters:
  `desc` - the descriptor.
  `dim` - the array dimension.

### dataSize

public static int dataSize(String desc)
Computes the data size specified by the given descriptor. For example, if the descriptor is "D", this method returns 2.

If the descriptor represents a method type, this method returns (the size of the returned value) - (the sum of the data sizes of all the parameters). For example, if the descriptor is `"(I)D"`, then this method returns 1 (= 2 - 1).

Parameters:
  `desc` - descriptor

### paramSize

public static int paramSize(String desc)
Computes the data size of parameters. If one of the parameters is double type, the size of that parameter is 2 words. For example, if the given descriptor is `"(IJ)D"`, then this method returns 3. The size of the return type is not computed.

Parameters:
  `desc` - a method descriptor.

### toString

public static String toString(String desc)
Returns a human-readable representation of the given descriptor. For example, `Ljava/lang/Object;` is converted into `java.lang.Object`. `(I[I)V` is converted into `(int, int[])` (the return type is ignored).