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) 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.
|
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.b
. 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.b
, 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.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.