1674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen/*
2674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Copyright 2003 The Apache Software Foundation
3674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen *
4674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen *  Licensed under the Apache License, Version 2.0 (the "License");
5674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * you may not use this file except in compliance with the License.
6674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * You may obtain a copy of the License at
7674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen *
8674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen *      http://www.apache.org/licenses/LICENSE-2.0
9674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen *
10674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen *  Unless required by applicable law or agreed to in writing, software
11674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * distributed under the License is distributed on an "AS IS" BASIS,
12674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * See the License for the specific language governing permissions and
14674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * limitations under the License.
15674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */
16674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenpackage org.mockito.cglib.transform;
17674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
18674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenimport org.mockito.asm.*;
19674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
20674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenpublic class MethodVisitorTee implements MethodVisitor {
21674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    private final MethodVisitor mv1;
22674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    private final MethodVisitor mv2;
23674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
24674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public MethodVisitorTee(MethodVisitor mv1, MethodVisitor mv2) {
25674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.mv1 = mv1;
26674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.mv2 = mv2;
27674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
28674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
29674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitFrame(int type, int nLocal, Object[] local, int nStack, Object[] stack) {
30674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitFrame(type, nLocal, local, nStack, stack);
31674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitFrame(type, nLocal, local, nStack, stack);
32674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
33674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
34674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public AnnotationVisitor visitAnnotationDefault() {
35674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        return AnnotationVisitorTee.getInstance(mv1.visitAnnotationDefault(),
36674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                                                mv2.visitAnnotationDefault());
37674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
38674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
39674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
40674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        return AnnotationVisitorTee.getInstance(mv1.visitAnnotation(desc, visible),
41674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                                                mv2.visitAnnotation(desc, visible));
42674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
43674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
44674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public AnnotationVisitor visitParameterAnnotation(int parameter,
45674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                                                      String desc,
46674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                                                      boolean visible) {
47674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        return AnnotationVisitorTee.getInstance(mv1.visitParameterAnnotation(parameter, desc, visible),
48674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                                                mv2.visitParameterAnnotation(parameter, desc, visible));
49674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
50674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
51674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitAttribute(Attribute attr) {
52674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitAttribute(attr);
53674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitAttribute(attr);
54674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
55674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
56674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitCode() {
57674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitCode();
58674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitCode();
59674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
60674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
61674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitInsn(int opcode) {
62674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitInsn(opcode);
63674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitInsn(opcode);
64674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
65674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
66674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitIntInsn(int opcode, int operand) {
67674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitIntInsn(opcode, operand);
68674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitIntInsn(opcode, operand);
69674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
70674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
71674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitVarInsn(int opcode, int var) {
72674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitVarInsn(opcode, var);
73674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitVarInsn(opcode, var);
74674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
75674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
76674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitTypeInsn(int opcode, String desc) {
77674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitTypeInsn(opcode, desc);
78674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitTypeInsn(opcode, desc);
79674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
80674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
81674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitFieldInsn(int opcode, String owner, String name, String desc) {
82674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitFieldInsn(opcode, owner, name, desc);
83674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitFieldInsn(opcode, owner, name, desc);
84674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
85674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
86674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitMethodInsn(int opcode, String owner, String name, String desc) {
87674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitMethodInsn(opcode, owner, name, desc);
88674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitMethodInsn(opcode, owner, name, desc);
89674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
90674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
91674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitJumpInsn(int opcode, Label label) {
92674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitJumpInsn(opcode, label);
93674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitJumpInsn(opcode, label);
94674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
95674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
96674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitLabel(Label label) {
97674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitLabel(label);
98674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitLabel(label);
99674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
100674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
101674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitLdcInsn(Object cst) {
102674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitLdcInsn(cst);
103674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitLdcInsn(cst);
104674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
105674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
106674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitIincInsn(int var, int increment) {
107674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitIincInsn(var, increment);
108674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitIincInsn(var, increment);
109674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
110674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
111674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitTableSwitchInsn(int min, int max, Label dflt, Label labels[]) {
112674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitTableSwitchInsn(min, max, dflt, labels);
113674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitTableSwitchInsn(min, max, dflt, labels);
114674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
115674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
116674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitLookupSwitchInsn(Label dflt, int keys[], Label labels[]) {
117674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitLookupSwitchInsn(dflt, keys, labels);
118674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitLookupSwitchInsn(dflt, keys, labels);
119674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
120674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
121674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitMultiANewArrayInsn(String desc, int dims) {
122674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitMultiANewArrayInsn(desc, dims);
123674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitMultiANewArrayInsn(desc, dims);
124674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
125674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
126674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitTryCatchBlock(Label start, Label end, Label handler, String type) {
127674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitTryCatchBlock(start, end, handler, type);
128674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitTryCatchBlock(start, end, handler, type);
129674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
130674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
131674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) {
132674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitLocalVariable(name, desc, signature, start, end, index);
133674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitLocalVariable(name, desc, signature, start, end, index);
134674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
135674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
136674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitLineNumber(int line, Label start) {
137674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitLineNumber(line, start);
138674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitLineNumber(line, start);
139674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
140674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
141674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitMaxs(int maxStack, int maxLocals) {
142674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitMaxs(maxStack, maxLocals);
143674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitMaxs(maxStack, maxLocals);
144674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
145674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
146674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    public void visitEnd() {
147674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv1.visitEnd();
148674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        mv2.visitEnd();
149674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
150674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen}
151674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
152