1674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen/*** 2674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * ASM: a very small and fast Java bytecode manipulation framework 3674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Copyright (c) 2000-2007 INRIA, France Telecom 4674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * All rights reserved. 5674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 6674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Redistribution and use in source and binary forms, with or without 7674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * modification, are permitted provided that the following conditions 8674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * are met: 9674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 1. Redistributions of source code must retain the above copyright 10674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * notice, this list of conditions and the following disclaimer. 11674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 2. Redistributions in binary form must reproduce the above copyright 12674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * notice, this list of conditions and the following disclaimer in the 13674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * documentation and/or other materials provided with the distribution. 14674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 3. Neither the name of the copyright holders nor the names of its 15674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * contributors may be used to endorse or promote products derived from 16674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * this software without specific prior written permission. 17674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 18674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 28674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * THE POSSIBILITY OF SUCH DAMAGE. 29674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 30674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenpackage org.mockito.asm; 31674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 32674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen/** 33674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * A visitor to visit a Java method. The methods of this interface must be 34674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * called in the following order: [ <tt>visitAnnotationDefault</tt> ] ( 35674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * <tt>visitAnnotation</tt> | <tt>visitParameterAnnotation</tt> | 36674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * <tt>visitAttribute</tt> )* [ <tt>visitCode</tt> ( <tt>visitFrame</tt> | 37674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * <tt>visit</tt><i>X</i>Insn</tt> | <tt>visitLabel</tt> | <tt>visitTryCatchBlock</tt> | 38674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * <tt>visitLocalVariable</tt> | <tt>visitLineNumber</tt>)* <tt>visitMaxs</tt> ] 39674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * <tt>visitEnd</tt>. In addition, the <tt>visit</tt><i>X</i>Insn</tt> 40674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * and <tt>visitLabel</tt> methods must be called in the sequential order of 41674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * the bytecode instructions of the visited code, <tt>visitTryCatchBlock</tt> 42674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * must be called <i>before</i> the labels passed as arguments have been 43674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * visited, and the <tt>visitLocalVariable</tt> and <tt>visitLineNumber</tt> 44674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * methods must be called <i>after</i> the labels passed as arguments have been 45674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * visited. 46674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 47674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @author Eric Bruneton 48674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 49674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenpublic interface MethodVisitor { 50674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 51674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // ------------------------------------------------------------------------- 52674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // Annotations and non standard attributes 53674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // ------------------------------------------------------------------------- 54674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 55674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 56674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits the default value of this annotation interface method. 57674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 58674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @return a visitor to the visit the actual default value of this 59674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * annotation interface method, or <tt>null</tt> if this visitor 60674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * is not interested in visiting this default value. The 'name' 61674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * parameters passed to the methods of this annotation visitor are 62674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * ignored. Moreover, exacly one visit method must be called on this 63674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * annotation visitor, followed by visitEnd. 64674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 65674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen AnnotationVisitor visitAnnotationDefault(); 66674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 67674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 68674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits an annotation of this method. 69674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 70674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param desc the class descriptor of the annotation class. 71674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param visible <tt>true</tt> if the annotation is visible at runtime. 72674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @return a visitor to visit the annotation values, or <tt>null</tt> if 73674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * this visitor is not interested in visiting this annotation. 74674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 75674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen AnnotationVisitor visitAnnotation(String desc, boolean visible); 76674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 77674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 78674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits an annotation of a parameter this method. 79674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 80674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param parameter the parameter index. 81674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param desc the class descriptor of the annotation class. 82674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param visible <tt>true</tt> if the annotation is visible at runtime. 83674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @return a visitor to visit the annotation values, or <tt>null</tt> if 84674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * this visitor is not interested in visiting this annotation. 85674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 86674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen AnnotationVisitor visitParameterAnnotation( 87674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen int parameter, 88674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen String desc, 89674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen boolean visible); 90674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 91674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 92674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits a non standard attribute of this method. 93674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 94674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param attr an attribute. 95674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 96674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitAttribute(Attribute attr); 97674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 98674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 99674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Starts the visit of the method's code, if any (i.e. non abstract method). 100674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 101674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitCode(); 102674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 103674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 104674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits the current state of the local variables and operand stack 105674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * elements. This method must(*) be called <i>just before</i> any 106674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * instruction <b>i</b> that follows an unconditionnal branch instruction 107674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * such as GOTO or THROW, that is the target of a jump instruction, or that 108674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * starts an exception handler block. The visited types must describe the 109674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * values of the local variables and of the operand stack elements <i>just 110674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * before</i> <b>i</b> is executed. <br> <br> (*) this is mandatory only 111674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * for classes whose version is greater than or equal to 112674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * {@link Opcodes#V1_6 V1_6}. <br> <br> Packed frames are basically 113674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * "deltas" from the state of the previous frame (very first frame is 114674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * implicitly defined by the method's parameters and access flags): <ul> 115674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * <li>{@link Opcodes#F_SAME} representing frame with exactly the same 116674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * locals as the previous frame and with the empty stack.</li> <li>{@link Opcodes#F_SAME1} 117674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * representing frame with exactly the same locals as the previous frame and 118674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * with single value on the stack (<code>nStack</code> is 1 and 119674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * <code>stack[0]</code> contains value for the type of the stack item).</li> 120674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * <li>{@link Opcodes#F_APPEND} representing frame with current locals are 121674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * the same as the locals in the previous frame, except that additional 122674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * locals are defined (<code>nLocal</code> is 1, 2 or 3 and 123674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * <code>local</code> elements contains values representing added types).</li> 124674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * <li>{@link Opcodes#F_CHOP} representing frame with current locals are 125674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * the same as the locals in the previous frame, except that the last 1-3 126674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * locals are absent and with the empty stack (<code>nLocals</code> is 1, 127674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 2 or 3). </li> <li>{@link Opcodes#F_FULL} representing complete frame 128674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * data.</li> </li> </ul> 129674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 130674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param type the type of this stack map frame. Must be 131674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * {@link Opcodes#F_NEW} for expanded frames, or 132674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * {@link Opcodes#F_FULL}, {@link Opcodes#F_APPEND}, 133674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * {@link Opcodes#F_CHOP}, {@link Opcodes#F_SAME} or 134674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * {@link Opcodes#F_APPEND}, {@link Opcodes#F_SAME1} for compressed 135674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * frames. 136674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param nLocal the number of local variables in the visited frame. 137674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param local the local variable types in this frame. This array must not 138674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * be modified. Primitive types are represented by 139674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * {@link Opcodes#TOP}, {@link Opcodes#INTEGER}, 140674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * {@link Opcodes#FLOAT}, {@link Opcodes#LONG}, 141674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * {@link Opcodes#DOUBLE},{@link Opcodes#NULL} or 142674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * {@link Opcodes#UNINITIALIZED_THIS} (long and double are 143674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * represented by a single element). Reference types are represented 144674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * by String objects (representing internal names), and uninitialized 145674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * types by Label objects (this label designates the NEW instruction 146674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * that created this uninitialized value). 147674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param nStack the number of operand stack elements in the visited frame. 148674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param stack the operand stack types in this frame. This array must not 149674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * be modified. Its content has the same format as the "local" array. 150674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 151674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitFrame( 152674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen int type, 153674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen int nLocal, 154674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen Object[] local, 155674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen int nStack, 156674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen Object[] stack); 157674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 158674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // ------------------------------------------------------------------------- 159674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // Normal instructions 160674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // ------------------------------------------------------------------------- 161674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 162674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 163674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits a zero operand instruction. 164674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 165674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param opcode the opcode of the instruction to be visited. This opcode is 166674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * either NOP, ACONST_NULL, ICONST_M1, ICONST_0, ICONST_1, ICONST_2, 167674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * ICONST_3, ICONST_4, ICONST_5, LCONST_0, LCONST_1, FCONST_0, 168674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * FCONST_1, FCONST_2, DCONST_0, DCONST_1, IALOAD, LALOAD, FALOAD, 169674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * DALOAD, AALOAD, BALOAD, CALOAD, SALOAD, IASTORE, LASTORE, FASTORE, 170674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * DASTORE, AASTORE, BASTORE, CASTORE, SASTORE, POP, POP2, DUP, 171674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, SWAP, IADD, LADD, FADD, 172674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * DADD, ISUB, LSUB, FSUB, DSUB, IMUL, LMUL, FMUL, DMUL, IDIV, LDIV, 173674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * FDIV, DDIV, IREM, LREM, FREM, DREM, INEG, LNEG, FNEG, DNEG, ISHL, 174674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * LSHL, ISHR, LSHR, IUSHR, LUSHR, IAND, LAND, IOR, LOR, IXOR, LXOR, 175674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L, F2D, D2I, D2L, D2F, I2B, 176674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * I2C, I2S, LCMP, FCMPL, FCMPG, DCMPL, DCMPG, IRETURN, LRETURN, 177674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * FRETURN, DRETURN, ARETURN, RETURN, ARRAYLENGTH, ATHROW, 178674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * MONITORENTER, or MONITOREXIT. 179674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 180674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitInsn(int opcode); 181674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 182674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 183674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits an instruction with a single int operand. 184674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 185674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param opcode the opcode of the instruction to be visited. This opcode is 186674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * either BIPUSH, SIPUSH or NEWARRAY. 187674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param operand the operand of the instruction to be visited.<br> When 188674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * opcode is BIPUSH, operand value should be between Byte.MIN_VALUE 189674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * and Byte.MAX_VALUE.<br> When opcode is SIPUSH, operand value 190674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * should be between Short.MIN_VALUE and Short.MAX_VALUE.<br> When 191674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * opcode is NEWARRAY, operand value should be one of 192674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * {@link Opcodes#T_BOOLEAN}, {@link Opcodes#T_CHAR}, 193674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * {@link Opcodes#T_FLOAT}, {@link Opcodes#T_DOUBLE}, 194674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * {@link Opcodes#T_BYTE}, {@link Opcodes#T_SHORT}, 195674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * {@link Opcodes#T_INT} or {@link Opcodes#T_LONG}. 196674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 197674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitIntInsn(int opcode, int operand); 198674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 199674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 200674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits a local variable instruction. A local variable instruction is an 201674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * instruction that loads or stores the value of a local variable. 202674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 203674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param opcode the opcode of the local variable instruction to be visited. 204674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * This opcode is either ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE, 205674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * LSTORE, FSTORE, DSTORE, ASTORE or RET. 206674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param var the operand of the instruction to be visited. This operand is 207674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * the index of a local variable. 208674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 209674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitVarInsn(int opcode, int var); 210674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 211674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 212674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits a type instruction. A type instruction is an instruction that 213674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * takes the internal name of a class as parameter. 214674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 215674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param opcode the opcode of the type instruction to be visited. This 216674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * opcode is either NEW, ANEWARRAY, CHECKCAST or INSTANCEOF. 217674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param type the operand of the instruction to be visited. This operand 218674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * must be the internal name of an object or array class (see {@link 219674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Type#getInternalName() getInternalName}). 220674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 221674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitTypeInsn(int opcode, String type); 222674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 223674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 224674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits a field instruction. A field instruction is an instruction that 225674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * loads or stores the value of a field of an object. 226674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 227674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param opcode the opcode of the type instruction to be visited. This 228674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * opcode is either GETSTATIC, PUTSTATIC, GETFIELD or PUTFIELD. 229674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param owner the internal name of the field's owner class (see {@link 230674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Type#getInternalName() getInternalName}). 231674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param name the field's name. 232674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param desc the field's descriptor (see {@link Type Type}). 233674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 234674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitFieldInsn(int opcode, String owner, String name, String desc); 235674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 236674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 237674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits a method instruction. A method instruction is an instruction that 238674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * invokes a method. 239674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 240674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param opcode the opcode of the type instruction to be visited. This 241674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * opcode is either INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC or 242674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * INVOKEINTERFACE. 243674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param owner the internal name of the method's owner class (see {@link 244674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Type#getInternalName() getInternalName}). 245674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param name the method's name. 246674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param desc the method's descriptor (see {@link Type Type}). 247674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 248674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitMethodInsn(int opcode, String owner, String name, String desc); 249674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 250674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 251674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits a jump instruction. A jump instruction is an instruction that may 252674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * jump to another instruction. 253674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 254674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param opcode the opcode of the type instruction to be visited. This 255674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * opcode is either IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE, IF_ICMPEQ, 256674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ACMPEQ, 257674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * IF_ACMPNE, GOTO, JSR, IFNULL or IFNONNULL. 258674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param label the operand of the instruction to be visited. This operand 259674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * is a label that designates the instruction to which the jump 260674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * instruction may jump. 261674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 262674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitJumpInsn(int opcode, Label label); 263674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 264674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 265674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits a label. A label designates the instruction that will be visited 266674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * just after it. 267674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 268674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param label a {@link Label Label} object. 269674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 270674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitLabel(Label label); 271674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 272674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // ------------------------------------------------------------------------- 273674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // Special instructions 274674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // ------------------------------------------------------------------------- 275674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 276674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 277674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits a LDC instruction. 278674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 279674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param cst the constant to be loaded on the stack. This parameter must be 280674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * a non null {@link Integer}, a {@link Float}, a {@link Long}, a 281674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * {@link Double} a {@link String} (or a {@link Type} for 282674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * <tt>.class</tt> constants, for classes whose version is 49.0 or 283674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * more). 284674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 285674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitLdcInsn(Object cst); 286674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 287674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 288674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits an IINC instruction. 289674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 290674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param var index of the local variable to be incremented. 291674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param increment amount to increment the local variable by. 292674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 293674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitIincInsn(int var, int increment); 294674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 295674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 296674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits a TABLESWITCH instruction. 297674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 298674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param min the minimum key value. 299674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param max the maximum key value. 300674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param dflt beginning of the default handler block. 301674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param labels beginnings of the handler blocks. <tt>labels[i]</tt> is 302674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * the beginning of the handler block for the <tt>min + i</tt> key. 303674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 304674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitTableSwitchInsn(int min, int max, Label dflt, Label[] labels); 305674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 306674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 307674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits a LOOKUPSWITCH instruction. 308674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 309674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param dflt beginning of the default handler block. 310674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param keys the values of the keys. 311674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param labels beginnings of the handler blocks. <tt>labels[i]</tt> is 312674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * the beginning of the handler block for the <tt>keys[i]</tt> key. 313674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 314674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels); 315674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 316674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 317674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits a MULTIANEWARRAY instruction. 318674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 319674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param desc an array type descriptor (see {@link Type Type}). 320674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param dims number of dimensions of the array to allocate. 321674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 322674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitMultiANewArrayInsn(String desc, int dims); 323674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 324674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // ------------------------------------------------------------------------- 325674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // Exceptions table entries, debug information, max stack and max locals 326674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // ------------------------------------------------------------------------- 327674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 328674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 329674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits a try catch block. 330674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 331674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param start beginning of the exception handler's scope (inclusive). 332674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param end end of the exception handler's scope (exclusive). 333674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param handler beginning of the exception handler's code. 334674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param type internal name of the type of exceptions handled by the 335674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * handler, or <tt>null</tt> to catch any exceptions (for "finally" 336674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * blocks). 337674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @throws IllegalArgumentException if one of the labels has already been 338674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * visited by this visitor (by the {@link #visitLabel visitLabel} 339674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * method). 340674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 341674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitTryCatchBlock(Label start, Label end, Label handler, String type); 342674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 343674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 344674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits a local variable declaration. 345674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 346674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param name the name of a local variable. 347674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param desc the type descriptor of this local variable. 348674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param signature the type signature of this local variable. May be 349674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * <tt>null</tt> if the local variable type does not use generic 350674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * types. 351674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param start the first instruction corresponding to the scope of this 352674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * local variable (inclusive). 353674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param end the last instruction corresponding to the scope of this local 354674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * variable (exclusive). 355674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param index the local variable's index. 356674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @throws IllegalArgumentException if one of the labels has not already 357674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * been visited by this visitor (by the 358674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * {@link #visitLabel visitLabel} method). 359674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 360674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitLocalVariable( 361674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen String name, 362674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen String desc, 363674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen String signature, 364674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen Label start, 365674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen Label end, 366674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen int index); 367674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 368674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 369674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits a line number declaration. 370674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 371674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param line a line number. This number refers to the source file from 372674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * which the class was compiled. 373674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param start the first instruction corresponding to this line number. 374674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @throws IllegalArgumentException if <tt>start</tt> has not already been 375674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * visited by this visitor (by the {@link #visitLabel visitLabel} 376674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * method). 377674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 378674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitLineNumber(int line, Label start); 379674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 380674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 381674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits the maximum stack size and the maximum number of local variables 382674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * of the method. 383674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 384674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param maxStack maximum stack size of the method. 385674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param maxLocals maximum number of local variables for the method. 386674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 387674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitMaxs(int maxStack, int maxLocals); 388674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 389674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 390674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Visits the end of the method. This method, which is the last one to be 391674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * called, is used to inform the visitor that all the annotations and 392674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * attributes of the method have been visited. 393674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 394674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void visitEnd(); 395674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen} 396