org.objectweb.asm.attrs

Class SignatureAttribute

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
Stringsignature
Constructor Summary
SignatureAttribute()
SignatureAttribute(String signature)
Method Summary
protected Attributeread(ClassReader cr, int off, int len, char[] buf, int codeOff, Label[] labels)
StringtoString()
protected ByteVectorwrite(ClassWriter cw, byte[] code, int len, int maxStack, int maxLocals)

Field Detail

signature

public String signature

Constructor Detail

SignatureAttribute

public SignatureAttribute()

SignatureAttribute

public SignatureAttribute(String signature)

Method Detail

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)