001package io.ebean.enhance.entity;
002
003import io.ebean.enhance.asm.AnnotationVisitor;
004import io.ebean.enhance.asm.Attribute;
005import io.ebean.enhance.asm.FieldVisitor;
006import io.ebean.enhance.common.EnhanceConstants;
007
008import static io.ebean.enhance.Transformer.EBEAN_ASM_VERSION;
009
010/**
011 * Used to collect information about a field (specifically from field annotations).
012 */
013public class LocalFieldVisitor extends FieldVisitor implements EnhanceConstants {
014
015  private final FieldMeta fieldMeta;
016
017  /**
018   * Constructor used for entity class enhancement.
019   *
020   * @param fv        the fieldVisitor used to write
021   * @param fieldMeta the fieldMeta data
022   */
023  public LocalFieldVisitor(FieldVisitor fv, FieldMeta fieldMeta) {
024    super(EBEAN_ASM_VERSION, fv);
025    this.fieldMeta = fieldMeta;
026  }
027
028  /**
029   * Return the field name.
030   */
031  public String getName() {
032    return fieldMeta.getFieldName();
033  }
034
035  @Override
036  public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
037    fieldMeta.addAnnotationDesc(desc);
038    if (fv != null) {
039      if (!visible && desc.equals(L_JETBRAINS_NOTNULL)) {
040        fv.visitAnnotation(L_EBEAN_NOTNULL, true);
041      }
042      return fv.visitAnnotation(desc, visible);
043    } else {
044      return null;
045    }
046  }
047
048  @Override
049  public void visitAttribute(Attribute attr) {
050    if (fv != null) {
051      fv.visitAttribute(attr);
052    }
053  }
054
055  @Override
056  public void visitEnd() {
057    if (fv != null) {
058      fv.visitEnd();
059    }
060  }
061
062}