001package io.ebean.enhance.common; 002 003import io.ebean.enhance.asm.AnnotationVisitor; 004 005import static io.ebean.enhance.Transformer.EBEAN_ASM_VERSION; 006 007/** 008 * Reads the annotation information storing it in a AnnotationInfo. 009 */ 010public class AnnotationInfoVisitor extends AnnotationVisitor { 011 012 private final AnnotationInfo info; 013 014 private final String prefix; 015 016 public AnnotationInfoVisitor(String prefix, AnnotationInfo info, AnnotationVisitor av) { 017 super(EBEAN_ASM_VERSION, av); 018 this.info = info; 019 this.prefix = prefix; 020 if (prefix != null) { 021 info.getArrayEntry(prefix); // register as empty 022 } 023 } 024 025 @Override 026 public void visit(String name, Object value) { 027 super.visit(name, value); 028 info.add(prefix, name, value); 029 } 030 031 @Override 032 public AnnotationVisitor visitAnnotation(String name, String desc) { 033 return create(name, super.visitAnnotation(name, desc)); 034 } 035 036 @Override 037 public AnnotationVisitor visitArray(String name) { 038 return create(name, super.visitArray(name)); 039 } 040 041 private AnnotationInfoVisitor create(String name, AnnotationVisitor underlying){ 042 String newPrefix = prefix == null ? name: prefix+"."+name; 043 return new AnnotationInfoVisitor(newPrefix, info, underlying); 044 } 045 046 @Override 047 public void visitEnum(String name, String desc, String value) { 048 super.visitEnum(name, desc, value); 049 info.addEnum(prefix, name, value); 050 } 051 052}