Package org.eclipse.sisu.space.asm
Class Attribute
- java.lang.Object
-
- org.eclipse.sisu.space.asm.Attribute
-
final class Attribute extends java.lang.Object
A non standard class, field, method or code attribute.
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
Attribute(java.lang.String type)
Constructs a new empty attribute.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) int
getCount()
Returns the length of the attribute list that begins with this attribute.protected Label[]
getLabels()
Returns the labels corresponding to this attribute.(package private) int
getSize(ClassWriter cw, byte[] code, int len, int maxStack, int maxLocals)
Returns the size of all the attributes in this attribute list.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
put(ClassWriter cw, byte[] code, int len, int maxStack, int maxLocals, ByteVector out)
Writes all the attributes of this attribute list in the given byte vector.protected Attribute
read(ClassReader cr, int off, int len, char[] buf, int codeOff, Label[] labels)
Reads atype
attribute.protected ByteVector
write(ClassWriter cw, byte[] code, int len, int maxStack, int maxLocals)
Returns the byte array form of this attribute.
-
-
-
Field Detail
-
type
public final java.lang.String type
The type of this attribute.
-
value
byte[] value
The raw value of this attribute, used only for unknown attributes.
-
next
Attribute next
The next attribute in this attribute list. May be null.
-
-
Method Detail
-
isUnknown
public boolean isUnknown()
Returns true if this type of attribute is unknown. The default implementation of this method always returns true.- Returns:
- true if this type of attribute is unknown.
-
isCodeAttribute
public boolean isCodeAttribute()
Returns true if this type of attribute is a code attribute.- Returns:
- true if this type of attribute is a code attribute.
-
getLabels
protected Label[] getLabels()
Returns the labels corresponding to this attribute.- Returns:
- the labels corresponding to this attribute, or null if this attribute is not a code attribute that contains labels.
-
read
protected Attribute read(ClassReader cr, int off, int len, char[] buf, int codeOff, Label[] labels)
Reads atype
attribute. This method must return a newAttribute
object, of typetype
, corresponding to the len bytes starting at the given offset, in the given class reader.- Parameters:
cr
- the class that contains the attribute to be read.off
- index of the first byte of the attribute's content incr.b
. The 6 attribute header bytes, containing the type and the length of the attribute, are not taken into account here.len
- the length of the attribute's content.buf
- buffer to be used to callreadUTF8
,readClass
orreadConst
.codeOff
- index of the first byte of code's attribute content incr.b
, or -1 if the attribute to be read is not a code attribute. The 6 attribute header bytes, containing the type and the length of the attribute, 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.- Returns:
- a new
Attribute
object corresponding to the given bytes.
-
write
protected ByteVector write(ClassWriter cw, byte[] code, int len, int maxStack, int maxLocals)
Returns the byte array form of this 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.
-
getCount
final int getCount()
Returns the length of the attribute list that begins with this attribute.- Returns:
- the length of the attribute list that begins with this attribute.
-
getSize
final int getSize(ClassWriter cw, byte[] code, int len, int maxStack, int maxLocals)
Returns the size of all the attributes in this attribute list.- Parameters:
cw
- the class writer to be used to convert the attributes into byte arrays, with thewrite
method.code
- the bytecode of the method corresponding to these code attributes, or null if these attributes are not code attributes.len
- the length of the bytecode of the method corresponding to these code attributes, or null if these attributes are not code attributes.maxStack
- the maximum stack size of the method corresponding to these code attributes, or -1 if these attributes are not code attributes.maxLocals
- the maximum number of local variables of the method corresponding to these code attributes, or -1 if these attributes are not code attributes.- Returns:
- the size of all the attributes in this attribute list. This size includes the size of the attribute headers.
-
put
final void put(ClassWriter cw, byte[] code, int len, int maxStack, int maxLocals, ByteVector out)
Writes all the attributes of this attribute list in the given byte vector.- Parameters:
cw
- the class writer to be used to convert the attributes into byte arrays, with thewrite
method.code
- the bytecode of the method corresponding to these code attributes, or null if these attributes are not code attributes.len
- the length of the bytecode of the method corresponding to these code attributes, or null if these attributes are not code attributes.maxStack
- the maximum stack size of the method corresponding to these code attributes, or -1 if these attributes are not code attributes.maxLocals
- the maximum number of local variables of the method corresponding to these code attributes, or -1 if these attributes are not code attributes.out
- where the attributes must be written.
-
-