author Eric Bruneton
 *  author Eugene Kuleshov
  import { Opcodes } from "./Opcodes" ; export abstract class AnnotationVisitor { /**
     * The ASM API version implemented by this visitor. The value of this field
     * must be one of  Opcodes or  Opcodes .
      api : number ; /**
     * The annotation visitor to which this visitor must delegate method calls.
     * May be null.
     */ av : AnnotationVisitor | null ; /**
     * Constructs a new  AnnotationVisitor .
     *
     *  param api the ASM API version implemented by this visitor. Must be one
     * of  Opcodes or  Opcodes .
     *  param av public constructor ( api , av = null ) { this . api = 0 ; if ( api !== Opcodes . ASM4 && api !== Opcodes . ASM5 ) { throw new Error ( ) ; } this . api = api ; this . av = av ; } param name param value the actual value, whose type must be  Byte ,
     *  Boolean ,  Character ,  Short ,
     *  Integer ,  Long ,  Float ,  Double ,
     *  String or  Type of OBJECT or ARRAY sort. This
     * value can also be an array of byte, boolean, short, char, int,
     * long, float or double values (this is equivalent to using
     *  {@link #visitArray visitArray} and visiting each array element
     * in turn, but is more convenient).
      public visit ( name , value ) { if ( this . av != null ) { this . av . visit ( name , value ) ; } } param name param desc param value public visitEnum ( name , desc , value ) { if ( this . av != null ) { this . av . visitEnum ( name , desc , value ) ; } } param name param desc return public visitAnnotation ( name , desc ) { if ( this . av != null ) { return this . av . visitAnnotation ( name , desc ) ; } return null ; } /**
     * Visits an array value of the annotation. Note that arrays of primitive
     * types (such as byte, boolean, short, char, int, long, float or double)
     * can be passed as value to  {@link #visit visit} . This is what
     *  ClassReader does.
     *
     *  param name return public visitArray ( name ) { if ( this . av != null ) { return this . av . visitArray ( name ) ; } return null ; } /**
     * Visits the end of the annotation.
     */ public visitEnd ( ) { if ( this . av != null ) { this . av . visitEnd ( ) ; } } }