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