public class Attribute
extends java.lang.Object
| Modifier and Type | Class and Description |
|---|---|
(package private) static class |
Attribute.Set
A set of attribute prototypes (attributes with the same type are considered equal).
|
| Modifier and Type | Field and Description |
|---|---|
private byte[] |
content
The raw content of this attribute, only used for unknown attributes (see
isUnknown()). |
(package private) Attribute |
nextAttribute
The next attribute in this attribute list (Attribute instances can be linked via this field to
store a list of class, field, method or Code attributes).
|
java.lang.String |
type
The type of this attribute, also called its name in the JVMS.
|
| Modifier | Constructor and Description |
|---|---|
protected |
Attribute(java.lang.String type)
Constructs a new empty attribute.
|
| Modifier and Type | Method and Description |
|---|---|
(package private) int |
computeAttributesSize(SymbolTable symbolTable)
Returns the total size in bytes of all the attributes in the attribute list that begins with
this attribute.
|
(package private) int |
computeAttributesSize(SymbolTable symbolTable,
byte[] code,
int codeLength,
int maxStack,
int maxLocals)
Returns the total size in bytes of all the attributes in the attribute list that begins with
this attribute.
|
(package private) static int |
computeAttributesSize(SymbolTable symbolTable,
int accessFlags,
int signatureIndex)
Returns the total size in bytes of all the attributes that correspond to the given field,
method or class access flags and signature.
|
(package private) int |
getAttributeCount()
Returns the number of attributes of the attribute list that begins with this attribute.
|
protected Label[] |
getLabels()
Returns the labels corresponding to this attribute.
|
boolean |
isCodeAttribute()
Returns true if this type of attribute is a Code attribute.
|
boolean |
isUnknown()
Returns true if this type of attribute is unknown.
|
(package private) void |
putAttributes(SymbolTable symbolTable,
byte[] code,
int codeLength,
int maxStack,
int maxLocals,
ByteVector output)
Puts all the attributes of the attribute list that begins with this attribute, in the given
byte vector.
|
(package private) void |
putAttributes(SymbolTable symbolTable,
ByteVector output)
Puts all the attributes of the attribute list that begins with this attribute, in the given
byte vector.
|
(package private) static void |
putAttributes(SymbolTable symbolTable,
int accessFlags,
int signatureIndex,
ByteVector output)
Puts all the attributes that correspond to the given field, method or class access flags and
signature, in the given byte vector.
|
protected Attribute |
read(ClassReader classReader,
int offset,
int length,
char[] charBuffer,
int codeAttributeOffset,
Label[] labels)
Reads a
type attribute. |
protected ByteVector |
write(ClassWriter classWriter,
byte[] code,
int codeLength,
int maxStack,
int maxLocals)
Returns the byte array form of the content of this attribute.
|
public final java.lang.String type
private byte[] content
isUnknown()).
The 6 header bytes of the attribute (attribute_name_index and attribute_length) are not
included.Attribute nextAttribute
protected Attribute(java.lang.String type)
type - the type of the attribute.public boolean isUnknown()
public boolean isCodeAttribute()
protected Label[] getLabels()
protected Attribute read(ClassReader classReader, int offset, int length, char[] charBuffer, int codeAttributeOffset, Label[] labels)
type attribute. This method must return a new Attribute object,
of type type, corresponding to the 'length' bytes starting at 'offset', in the given
ClassReader.classReader - the class that contains the attribute to be read.offset - index of the first byte of the attribute's content in ClassReader. The 6
attribute header bytes (attribute_name_index and attribute_length) are not taken into
account here.length - the length of the attribute's content (excluding the 6 attribute header bytes).charBuffer - the buffer to be used to call the ClassReader methods requiring a
'charBuffer' parameter.codeAttributeOffset - index of the first byte of content of the enclosing Code attribute
in ClassReader, or -1 if the attribute to be read is not a Code attribute. The 6
attribute header bytes (attribute_name_index and attribute_length) are not taken into
account here.labels - the labels of the method's code, or null if the attribute to be read
is not a Code attribute.Attribute object corresponding to the specified bytes.protected ByteVector write(ClassWriter classWriter, byte[] code, int codeLength, int maxStack, int maxLocals)
classWriter - the class to which this attribute must be added. This parameter can be used
to add the items that corresponds to this attribute to the constant pool of this class.code - the bytecode of the method corresponding to this Code attribute, or null
if this attribute is not a Code attribute. Corresponds to the 'code' field of the Code
attribute.codeLength - the length of the bytecode of the method corresponding to this code
attribute, or 0 if this attribute is not a Code attribute. Corresponds to the 'code_length'
field of the 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.final int getAttributeCount()
final int computeAttributesSize(SymbolTable symbolTable)
symbolTable - where the constants used in the attributes must be stored.final int computeAttributesSize(SymbolTable symbolTable, byte[] code, int codeLength, int maxStack, int maxLocals)
symbolTable - where the constants used in the attributes must be stored.code - the bytecode of the method corresponding to these Code attributes, or null if they are not Code attributes. Corresponds to the 'code' field of the Code
attribute.codeLength - the length of the bytecode of the method corresponding to these code
attributes, or 0 if they are not Code attributes. Corresponds to the 'code_length' field of
the Code attribute.maxStack - the maximum stack size of the method corresponding to these Code attributes, or
-1 if they are not Code attributes.maxLocals - the maximum number of local variables of the method corresponding to these
Code attributes, or -1 if they are not Code attribute.static int computeAttributesSize(SymbolTable symbolTable, int accessFlags, int signatureIndex)
symbolTable - where the constants used in the attributes must be stored.accessFlags - some field, method or class access flags.signatureIndex - the constant pool index of a field, method of class signature.final void putAttributes(SymbolTable symbolTable, ByteVector output)
symbolTable - where the constants used in the attributes must be stored.output - where the attributes must be written.final void putAttributes(SymbolTable symbolTable, byte[] code, int codeLength, int maxStack, int maxLocals, ByteVector output)
symbolTable - where the constants used in the attributes must be stored.code - the bytecode of the method corresponding to these Code attributes, or null if they are not Code attributes. Corresponds to the 'code' field of the Code
attribute.codeLength - the length of the bytecode of the method corresponding to these code
attributes, or 0 if they are not Code attributes. Corresponds to the 'code_length' field of
the Code attribute.maxStack - the maximum stack size of the method corresponding to these Code attributes, or
-1 if they are not Code attributes.maxLocals - the maximum number of local variables of the method corresponding to these
Code attributes, or -1 if they are not Code attribute.output - where the attributes must be written.static void putAttributes(SymbolTable symbolTable, int accessFlags, int signatureIndex, ByteVector output)
symbolTable - where the constants used in the attributes must be stored.accessFlags - some field, method or class access flags.signatureIndex - the constant pool index of a field, method of class signature.output - where the attributes must be written.