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 * An empty {@link MethodVisitor} that delegates to another
34674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * {@link MethodVisitor}. This class can be used as a super class to quickly
35674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * implement usefull method adapter classes, just by overriding the necessary
36674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * methods.
37674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen *
38674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @author Eric Bruneton
39674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */
40674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenpublic class MethodAdapter implements MethodVisitor {
41674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
42674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
43674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * The {@link MethodVisitor} to which this adapter delegates calls.
44674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
45674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    protected MethodVisitor mv;
46674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
47674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
48674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Constructs a new {@link MethodAdapter} object.
49674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     *
50674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * @param mv the code visitor to which this adapter must delegate calls.
51674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
52674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public MethodAdapter(final MethodVisitor mv) {
53674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.mv = mv;
54674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
55674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
56674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public AnnotationVisitor visitAnnotationDefault() {
57674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        return mv.visitAnnotationDefault();
58674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
59674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
60674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public AnnotationVisitor visitAnnotation(
61674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final String desc,
62674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final boolean visible)
63674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    {
64674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        return mv.visitAnnotation(desc, visible);
65674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
66674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
67674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public AnnotationVisitor visitParameterAnnotation(
68674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final int parameter,
69674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final String desc,
70674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final boolean visible)
71674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    {
72674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        return mv.visitParameterAnnotation(parameter, desc, visible);
73674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
74674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
75674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitAttribute(final Attribute attr) {
76674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitAttribute(attr);
77674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
78674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
79674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitCode() {
80674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitCode();
81674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
82674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
83674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitFrame(
84674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final int type,
85674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final int nLocal,
86674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final Object[] local,
87674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final int nStack,
88674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final Object[] stack)
89674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    {
90674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitFrame(type, nLocal, local, nStack, stack);
91674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
92674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
93674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitInsn(final int opcode) {
94674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitInsn(opcode);
95674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
96674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
97674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitIntInsn(final int opcode, final int operand) {
98674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitIntInsn(opcode, operand);
99674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
100674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
101674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitVarInsn(final int opcode, final int var) {
102674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitVarInsn(opcode, var);
103674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
104674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
105674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitTypeInsn(final int opcode, final String type) {
106674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitTypeInsn(opcode, type);
107674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
108674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
109674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitFieldInsn(
110674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final int opcode,
111674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final String owner,
112674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final String name,
113674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final String desc)
114674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    {
115674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitFieldInsn(opcode, owner, name, desc);
116674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
117674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
118674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitMethodInsn(
119674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final int opcode,
120674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final String owner,
121674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final String name,
122674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final String desc)
123674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    {
124674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitMethodInsn(opcode, owner, name, desc);
125674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
126674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
127674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitJumpInsn(final int opcode, final Label label) {
128674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitJumpInsn(opcode, label);
129674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
130674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
131674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitLabel(final Label label) {
132674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitLabel(label);
133674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
134674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
135674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitLdcInsn(final Object cst) {
136674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitLdcInsn(cst);
137674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
138674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
139674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitIincInsn(final int var, final int increment) {
140674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitIincInsn(var, increment);
141674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
142674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
143674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitTableSwitchInsn(
144674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final int min,
145674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final int max,
146674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final Label dflt,
147674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final Label[] labels)
148674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    {
149674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitTableSwitchInsn(min, max, dflt, labels);
150674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
151674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
152674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitLookupSwitchInsn(
153674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final Label dflt,
154674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final int[] keys,
155674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final Label[] labels)
156674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    {
157674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitLookupSwitchInsn(dflt, keys, labels);
158674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
159674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
160674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitMultiANewArrayInsn(final String desc, final int dims) {
161674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitMultiANewArrayInsn(desc, dims);
162674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
163674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
164674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitTryCatchBlock(
165674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final Label start,
166674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final Label end,
167674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final Label handler,
168674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final String type)
169674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    {
170674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitTryCatchBlock(start, end, handler, type);
171674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
172674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
173674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitLocalVariable(
174674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final String name,
175674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final String desc,
176674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final String signature,
177674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final Label start,
178674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final Label end,
179674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final int index)
180674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    {
181674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitLocalVariable(name, desc, signature, start, end, index);
182674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
183674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
184674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitLineNumber(final int line, final Label start) {
185674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitLineNumber(line, start);
186674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
187674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
188674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitMaxs(final int maxStack, final int maxLocals) {
189674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitMaxs(maxStack, maxLocals);
190674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
191674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
192674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitEnd() {
193674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv.visitEnd();
194674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
195674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen}
196