Class RecordComponentWriter

java.lang.Object
org.eclipse.sisu.space.asm.RecordComponentVisitor
org.eclipse.sisu.space.asm.RecordComponentWriter

final class RecordComponentWriter extends RecordComponentVisitor
  • Field Details

    • symbolTable

      private final SymbolTable symbolTable
      Where the constants used in this RecordComponentWriter must be stored.
    • nameIndex

      private final int nameIndex
      The name_index field of the Record attribute.
    • descriptorIndex

      private final int descriptorIndex
      The descriptor_index field of the Record attribute.
    • signatureIndex

      private int signatureIndex
      The signature_index field of the Signature attribute of this record component, or 0 if there is no Signature attribute.
    • lastRuntimeVisibleAnnotation

      private AnnotationWriter lastRuntimeVisibleAnnotation
      The last runtime visible annotation of this record component. The previous ones can be accessed with the AnnotationWriter.previousAnnotation field. May be null.
    • lastRuntimeInvisibleAnnotation

      private AnnotationWriter lastRuntimeInvisibleAnnotation
      The last runtime invisible annotation of this record component. The previous ones can be accessed with the AnnotationWriter.previousAnnotation field. May be null.
    • lastRuntimeVisibleTypeAnnotation

      private AnnotationWriter lastRuntimeVisibleTypeAnnotation
      The last runtime visible type annotation of this record component. The previous ones can be accessed with the AnnotationWriter.previousAnnotation field. May be null.
    • lastRuntimeInvisibleTypeAnnotation

      private AnnotationWriter lastRuntimeInvisibleTypeAnnotation
      The last runtime invisible type annotation of this record component. The previous ones can be accessed with the AnnotationWriter.previousAnnotation field. May be null.
    • firstAttribute

      private Attribute firstAttribute
      The first non standard attribute of this record component. The next ones can be accessed with the Attribute.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). The putRecordComponentInfo(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 new RecordComponentWriter.
      Parameters:
      symbolTable - where the constants used in this RecordComponentWriter must be stored.
      name - the record component name.
      descriptor - the record component descriptor (see Type).
      signature - the record component signature. May be null.
  • Method Details

    • visitAnnotation

      public AnnotationVisitor visitAnnotation(String descriptor, boolean visible)
      Description copied from class: RecordComponentVisitor
      Visits an annotation of the record component.
      Overrides:
      visitAnnotation in class RecordComponentVisitor
      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 class RecordComponentVisitor
      Parameters:
      typeRef - a reference to the annotated type. The sort of this type reference must be TypeReference.CLASS_TYPE_PARAMETER, TypeReference.CLASS_TYPE_PARAMETER_BOUND or TypeReference.CLASS_EXTENDS. See TypeReference.
      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

      public void visitAttribute(Attribute attribute)
      Description copied from class: RecordComponentVisitor
      Visits a non standard attribute of the record component.
      Overrides:
      visitAttribute in class RecordComponentVisitor
      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 class RecordComponentVisitor
    • 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

      void putRecordComponentInfo(ByteVector output)
      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

      final void collectAttributePrototypes(Attribute.Set attributePrototypes)
      Collects the attributes of this record component into the given set of attribute prototypes.
      Parameters:
      attributePrototypes - a set of attribute prototypes.