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}