Package org.datanucleus.enhancer.asm
Class RecordComponentWriter
java.lang.Object
org.datanucleus.enhancer.asm.RecordComponentVisitor
org.datanucleus.enhancer.asm.RecordComponentWriter
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final int
The descriptor_index field of the the Record attribute.private Attribute
The first non standard attribute of this record component.private AnnotationWriter
The last runtime invisible annotation of this record component.private AnnotationWriter
The last runtime invisible type annotation of this record component.private AnnotationWriter
The last runtime visible annotation of this record component.private AnnotationWriter
The last runtime visible type annotation of this record component.private final int
The name_index field of the Record attribute.private int
The signature_index field of the Signature attribute of this record component, or 0 if there is no Signature attribute.private final SymbolTable
Where the constants used in this RecordComponentWriter must be stored.Fields inherited from class org.datanucleus.enhancer.asm.RecordComponentVisitor
api, delegate
-
Constructor Summary
ConstructorsConstructorDescriptionRecordComponentWriter
(SymbolTable symbolTable, String name, String descriptor, String signature) Constructs a newRecordComponentWriter
. -
Method Summary
Modifier and TypeMethodDescription(package private) final void
collectAttributePrototypes
(Attribute.Set attributePrototypes) Collects the attributes of this record component into the given set of attribute prototypes.(package private) int
Returns the size of the record component JVMS structure generated by this RecordComponentWriter.(package private) void
putRecordComponentInfo
(ByteVector output) Puts the content of the record component generated by this RecordComponentWriter into the given ByteVector.visitAnnotation
(String descriptor, boolean visible) Visits an annotation of the record component.void
visitAttribute
(Attribute attribute) Visits a non standard attribute of the record component.void
visitEnd()
Visits the end of the record component.visitTypeAnnotation
(int typeRef, TypePath typePath, String descriptor, boolean visible) Visits an annotation on a type in the record component signature.Methods inherited from class org.datanucleus.enhancer.asm.RecordComponentVisitor
getDelegate
-
Field Details
-
symbolTable
Where the constants used in this RecordComponentWriter must be stored. -
nameIndex
private final int nameIndexThe name_index field of the Record attribute. -
descriptorIndex
private final int descriptorIndexThe descriptor_index field of the the Record attribute. -
signatureIndex
private int signatureIndexThe signature_index field of the Signature attribute of this record component, or 0 if there is no Signature attribute. -
lastRuntimeVisibleAnnotation
The last runtime visible annotation of this record component. The previous ones can be accessed with theAnnotationWriter.previousAnnotation
field. May be null. -
lastRuntimeInvisibleAnnotation
The last runtime invisible annotation of this record component. The previous ones can be accessed with theAnnotationWriter.previousAnnotation
field. May be null. -
lastRuntimeVisibleTypeAnnotation
The last runtime visible type annotation of this record component. The previous ones can be accessed with theAnnotationWriter.previousAnnotation
field. May be null. -
lastRuntimeInvisibleTypeAnnotation
The last runtime invisible type annotation of this record component. The previous ones can be accessed with theAnnotationWriter.previousAnnotation
field. May be null. -
firstAttribute
The first non standard attribute of this record component. The next ones can be accessed with theAttribute.nextAttribute
field. May be null.WARNING: this list stores the attributes in the reverse order of their visit. firstAttribute is actually the last attribute visited in
visitAttribute(Attribute)
. TheputRecordComponentInfo(ByteVector)
method writes the attributes in the order defined by this list, i.e. in the reverse order specified by the user.
-
-
Constructor Details
-
RecordComponentWriter
RecordComponentWriter(SymbolTable symbolTable, String name, String descriptor, String signature) Constructs a newRecordComponentWriter
.- Parameters:
symbolTable
- where the constants used in this RecordComponentWriter must be stored.name
- the record component name.descriptor
- the record component descriptor (seeType
).signature
- the record component signature. May be null.
-
-
Method Details
-
visitAnnotation
Description copied from class:RecordComponentVisitor
Visits an annotation of the record component.- Overrides:
visitAnnotation
in classRecordComponentVisitor
- Parameters:
descriptor
- the class descriptor of the annotation class.visible
- true if the annotation is visible at runtime.- Returns:
- a visitor to visit the annotation values, or null if this visitor is not interested in visiting this annotation.
-
visitTypeAnnotation
public AnnotationVisitor visitTypeAnnotation(int typeRef, TypePath typePath, String descriptor, boolean visible) Description copied from class:RecordComponentVisitor
Visits an annotation on a type in the record component signature.- Overrides:
visitTypeAnnotation
in classRecordComponentVisitor
- Parameters:
typeRef
- a reference to the annotated type. The sort of this type reference must beTypeReference.CLASS_TYPE_PARAMETER
,TypeReference.CLASS_TYPE_PARAMETER_BOUND
orTypeReference.CLASS_EXTENDS
. SeeTypeReference
.typePath
- the path to the annotated type argument, wildcard bound, array element type, or static inner type within 'typeRef'. May be null if the annotation targets 'typeRef' as a whole.descriptor
- the class descriptor of the annotation class.visible
- true if the annotation is visible at runtime.- Returns:
- a visitor to visit the annotation values, or null if this visitor is not interested in visiting this annotation.
-
visitAttribute
Description copied from class:RecordComponentVisitor
Visits a non standard attribute of the record component.- Overrides:
visitAttribute
in classRecordComponentVisitor
- Parameters:
attribute
- an attribute.
-
visitEnd
public void visitEnd()Description copied from class:RecordComponentVisitor
Visits the end of the record component. This method, which is the last one to be called, is used to inform the visitor that everything have been visited.- Overrides:
visitEnd
in classRecordComponentVisitor
-
computeRecordComponentInfoSize
int computeRecordComponentInfoSize()Returns the size of the record component JVMS structure generated by this RecordComponentWriter. Also adds the names of the attributes of this record component in the constant pool.- Returns:
- the size in bytes of the record_component_info of the Record attribute.
-
putRecordComponentInfo
Puts the content of the record component generated by this RecordComponentWriter into the given ByteVector.- Parameters:
output
- where the record_component_info structure must be put.
-
collectAttributePrototypes
Collects the attributes of this record component into the given set of attribute prototypes.- Parameters:
attributePrototypes
- a set of attribute prototypes.
-