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.ASM6, av); 017 this.info = info; 018 this.prefix = prefix; 019 } 020 021 public void visit(String name, Object value) { 022 super.visit(name, value); 023 info.add(prefix, name, value); 024 } 025 026 public AnnotationVisitor visitAnnotation(String name, String desc) { 027 return create(name, super.visitAnnotation(name, desc)); 028 } 029 030 public AnnotationVisitor visitArray(String name) { 031 return create(name, super.visitArray(name)); 032 } 033 034 private AnnotationInfoVisitor create(String name, AnnotationVisitor underlying){ 035 String newPrefix = prefix == null ? name: prefix+"."+name; 036 return new AnnotationInfoVisitor(newPrefix, info, underlying); 037 } 038 039 public void visitEnd() { 040 super.visitEnd(); 041 } 042 043 public void visitEnum(String name, String desc, String value) { 044 super.visitEnum(name, desc, value); 045 info.addEnum(prefix, name, desc, value); 046 } 047 048}