org.objectweb.asm.attrs

Class SignatureAttribute

Known Direct Subclasses:
ASMSignatureAttribute

public class SignatureAttribute
extends Attribute

The Signature Attribute introduced in JSR-14 (Adding Generics to the Java Programming Language) and also defined in the Java Virtual Machine Specification, 3rd edition draft. This atribute is used for classes, fields and methods.

Classfiles need to carry generic type information in a backwards compatible way. This is accomplished by introducing a new "Signature" attribute for classes, methods and fields. The structure of this attribute is as follows:

   "Signature" (u4 attr-length, u2 signature-index)
 
When used as an attribute of a method or field, a signature gives the full (possibly generic) type of that method or field. When used as a class attribute, a signature indicates the type parameters of the class, followed by its supertype, followed by all its interfaces.

The type syntax in signatures is extended to parameterized types and type variables. There is also a new signature syntax for formal type parameters. The syntax extensions for signature strings are as follows:

   MethodOrFieldSignature ::= TypeSignature
   ClassSignature        ::= ParameterPartOpt super_TypeSignature interface_TypeSignatures
   TypeSignatures        ::= TypeSignatures TypeSignature
                             |
   TypeSignature         ::= ...
                             | ClassTypeSignature
                             | MethodTypeSignature
                             | TypeVariableSignature
   ClassTypeSignature    ::= 'L' Ident TypeArgumentsOpt ';'
                             | ClassTypeSignature '.' Ident ';' TypeArgumentsOpt
   MethodTypeSignature   ::= TypeArgumentsOpt '(' TypeSignatures ')'
                             TypeSignature ThrowsSignatureListOpt
   ThrowsSignatureList   ::= ThrowsSignature ThrowsSignatureList
                             | ThrowsSignature
   ThrowsSignature       ::= '^' TypeSignature
   TypeVariableSignature ::= 'T' Ident ';'
   TypeArguments         ::= '<' TypeSignature TypeSignatures '>'
   ParameterPart         ::= '<' ParameterSignature ParameterSignatures '>'
   ParameterSignatures   ::= ParameterSignatures ParameterSignature
                             |
   ParameterSignature ::= Ident ':' bound_TypeSignature
 

Author:
Eugene Kuleshov

See Also:
JSR 14 : Add Generic Types To The JavaTM Programming Language

Field Summary

String
signature

Fields inherited from class org.objectweb.asm.Attribute

next, type

Constructor Summary

SignatureAttribute()
SignatureAttribute(String signature)
Constructs a new empty attribute.

Method Summary

protected Attribute
read(ClassReader cr, int off, int len, char[] buf, int codeOff, Label[] labels)
String
toString()
protected ByteVector
write(ClassWriter cw, byte[] code, int len, int maxStack, int maxLocals)
Returns the byte array form of this attribute.

Methods inherited from class org.objectweb.asm.Attribute

getLabels, isUnknown, read, write

Field Details

signature

public String signature

Constructor Details

SignatureAttribute

public SignatureAttribute()


SignatureAttribute

public SignatureAttribute(String signature)
Constructs a new empty attribute.

Parameters:

Method Details

read

protected Attribute read(ClassReader cr,
                         int off,
                         int len,
                         char[] buf,
                         int codeOff,
                         Label[] labels)


toString

public String toString()


write

protected ByteVector write(ClassWriter cw,
                           byte[] code,
                           int len,
                           int maxStack,
                           int maxLocals)
Returns the byte array form of this attribute.
Overrides:
write in interface Attribute

Parameters:
cw - the class to which this attribute must be added. This parameter can be used to add to the constant pool of this class the items that corresponds to this attribute.
code - the bytecode of the method corresponding to this code attribute, or null if this attribute is not a code attributes.
len - the length of the bytecode of the method corresponding to this code attribute, or null if this attribute is not a code attribute.
maxStack - the maximum stack size of the method corresponding to this code attribute, or -1 if this attribute is not a code attribute.
maxLocals - the maximum number of local variables of the method corresponding to this code attribute, or -1 if this attribute is not a code attribute.

Returns:
the byte array form of this attribute.