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 ClassVisitorTee implements ClassVisitor { 21674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen private ClassVisitor cv1, cv2; 22674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 23674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public ClassVisitorTee(ClassVisitor cv1, ClassVisitor cv2) { 24674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen this.cv1 = cv1; 25674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen this.cv2 = cv2; 26674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 27674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 28674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public void visit(int version, 29674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen int access, 30674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen String name, 31674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen String signature, 32674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen String superName, 33674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen String[] interfaces) { 34674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen cv1.visit(version, access, name, signature, superName, interfaces); 35674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen cv2.visit(version, access, name, signature, superName, interfaces); 36674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 37674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 38674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public void visitEnd() { 39674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen cv1.visitEnd(); 40674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen cv2.visitEnd(); 41674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen cv1 = cv2 = null; 42674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 43674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 44674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public void visitInnerClass(String name, String outerName, String innerName, int access) { 45674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen cv1.visitInnerClass(name, outerName, innerName, access); 46674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen cv2.visitInnerClass(name, outerName, innerName, access); 47674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 48674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 49674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public FieldVisitor visitField(int access, 50674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen String name, 51674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen String desc, 52674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen String signature, 53674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen Object value) { 54674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen FieldVisitor fv1 = cv1.visitField(access, name, desc, signature, value); 55674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen FieldVisitor fv2 = cv2.visitField(access, name, desc, signature, value); 56674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen if (fv1 == null) 57674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen return fv2; 58674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen if (fv2 == null) 59674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen return fv1; 60674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen return new FieldVisitorTee(fv1, fv2); 61674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 62674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 63674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 64674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public MethodVisitor visitMethod(int access, 65674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen String name, 66674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen String desc, 67674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen String signature, 68674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen String[] exceptions) { 69674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen MethodVisitor mv1 = cv1.visitMethod(access, name, desc, signature, exceptions); 70674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen MethodVisitor mv2 = cv2.visitMethod(access, name, desc, signature, exceptions); 71674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen if (mv1 == null) 72674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen return mv2; 73674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen if (mv2 == null) 74674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen return mv1; 75674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen return new MethodVisitorTee(mv1, mv2); 76674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 77674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 78674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public void visitSource(String source, String debug) { 79674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen cv1.visitSource(source, debug); 80674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen cv2.visitSource(source, debug); 81674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 82674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 83674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public void visitOuterClass(String owner, String name, String desc) { 84674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen cv1.visitOuterClass(owner, name, desc); 85674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen cv2.visitOuterClass(owner, name, desc); 86674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 87674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 88674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public AnnotationVisitor visitAnnotation(String desc, boolean visible) { 89674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen return AnnotationVisitorTee.getInstance(cv1.visitAnnotation(desc, visible), 90674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen cv2.visitAnnotation(desc, visible)); 91674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 92674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 93674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public void visitAttribute(Attribute attrs) { 94674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen cv1.visitAttribute(attrs); 95674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen cv2.visitAttribute(attrs); 96674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 97674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen} 98