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}