Interface AttributeMapper<A extends Attribute<A>>
- Type Parameters:
A
- the attribute type
class
file representation of an
attribute and its API model. The attribute mapper identifies an attribute
by its name, and is used to parse the
class
file representation into a model, and to write the model
representation back to a class
file.
Attributes
defines the mappers for predefined attributes in the JVMS
and certain conventional attributes. For other attributes (JVMS 4.7.1), users can define their own AttributeMapper
; classes that
model those attributes should extend CustomAttribute
. To read those
attributes, user-defined AttributeMapper
s must be registered to the
ClassFile.AttributeMapperOption
.
- Since:
- 24
- See Also:
-
Nested Class Summary
Modifier and TypeInterfaceDescriptionstatic enum
Indicates the data dependency of theclass
file representation of an attribute. -
Method Summary
Modifier and TypeMethodDescriptiondefault boolean
Returns whether this attribute may appear more than once in one structure.name()
Returns the name of the attribute.readAttribute
(AttributedElement enclosing, ClassReader cf, int pos) Creates anAttribute
instance from aclass
file for the Class-File API.Returns the data dependency of this attribute on theclass
file.void
writeAttribute
(BufWriter buf, A attr) Writes anAttribute
instance to aclass
file for the Class-File API.
-
Method Details
-
name
-
readAttribute
Creates anAttribute
instance from aclass
file for the Class-File API.This method is called by the Class-File API to support reading of attributes. Users should never call this method.
The Class-File API makes these promises about the call to this method:
- The
Utf8Entry
for the name of the attribute is accessible withcf.readEntry(pos - 6, Utf8Entry.class)
, and is validated; - The length of the attribute is accessible with
cf.readInt(pos - 4)
, and is validated to be positive and not beyond the length of theclass
file; - The
AttributedElement
attribute access functionalities on theenclosing
model may not be accessed when this method is called, but can be accessed later by the returned attribute when it is accessible to users.
The returned
Attribute
must fulfill these requirements:Attribute.attributeMapper()
returns this mapper;Attribute.attributeName()
returns the attribute name in theclass
file.
- API Note:
- Implementations of this method should perform minimal work to return an
attribute, as this method is called even if the resulting attribute is
never used. In particular, the implementation should avoid checking the
validity of the attribute
class
file data or performing actions that may throw exceptions. - Parameters:
enclosing
- the structure in which this attribute appearscf
- provides access to theclass
file to read frompos
- the offset into theclass
file at which the contents of the attribute starts- Returns:
- the read attribute
- The
-
writeAttribute
Writes anAttribute
instance to aclass
file for the Class-File API.This method is called by the Class-File API to support writing of attributes. Users should never call this method.
The Class-File API makes these promises about the call to this method:
attr.attributeMapper()
returns this mapper;- The
buf
may already have data written, that itssize
may not be0
.
The
class
file writing must fulfill these requirements:- The attribute name
u2
and attribute lengthu4
must be written to thebuf
; attr.attributeName()
is written as if withbuf.writeIndex(attr.attributeName())
;- The attribute length is the length, in bytes, of attribute contents
written to the
buf
, not including the 6 bytes used by the name and the length; - If any information in the API model of the attribute,
attr
, cannot be represented in theclass
file format of the attribute, anIllegalArgumentException
is thrown.
- API Note:
BufWriter.patchInt(int, int, int)
can be used to update the attribute length after the attribute contents are written to thebuf
.- Parameters:
buf
- theBufWriter
to which the attribute should be writtenattr
- the attribute to write- Throws:
IllegalArgumentException
- if some data in the API model of the attribute is invalid for theclass
file format
-
allowMultiple
default boolean allowMultiple()Returns whether this attribute may appear more than once in one structure.If an attribute does not allow multiple instances in one structure, can be supplied to a
ClassFileBuilder
, and multiple instances of the attribute are supplied to the builder, the last supplied attribute appears on the built structure.- Implementation Requirements:
- The default implementation returns
false
. - Returns:
- whether this attribute may appear more than once in one structure
-
stability
AttributeMapper.AttributeStability stability()Returns the data dependency of this attribute on theclass
file.- Returns:
- the data dependency of this attribute on the
class
file
-