MixinEverythingEmitter.java revision 674060f01e9090cd21b3c5656cc3204912ad17a6
1c216a01c96d83bd9a90e214af64913e93d39aaccRichard Smith/*
259efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith * Copyright 2004 The Apache Software Foundation
359efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith *
459efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith *  Licensed under the Apache License, Version 2.0 (the "License");
559efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith * you may not use this file except in compliance with the License.
69eed49c2bb0f37bbfefefd0998b6303a686a66c0Richard Smith * You may obtain a copy of the License at
79eed49c2bb0f37bbfefefd0998b6303a686a66c0Richard Smith *
859efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith *      http://www.apache.org/licenses/LICENSE-2.0
959efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith *
1059efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith *  Unless required by applicable law or agreed to in writing, software
111d238ea926bbdd04356ce475934fcd4cac654c4bRichard Smith * distributed under the License is distributed on an "AS IS" BASIS,
121d238ea926bbdd04356ce475934fcd4cac654c4bRichard Smith * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131d238ea926bbdd04356ce475934fcd4cac654c4bRichard Smith * See the License for the specific language governing permissions and
141d238ea926bbdd04356ce475934fcd4cac654c4bRichard Smith * limitations under the License.
151d238ea926bbdd04356ce475934fcd4cac654c4bRichard Smith */
161d238ea926bbdd04356ce475934fcd4cac654c4bRichard Smithpackage org.mockito.cglib.proxy;
171d238ea926bbdd04356ce475934fcd4cac654c4bRichard Smith
181d238ea926bbdd04356ce475934fcd4cac654c4bRichard Smithimport java.lang.reflect.Method;
191d238ea926bbdd04356ce475934fcd4cac654c4bRichard Smithimport java.lang.reflect.Modifier;
201d238ea926bbdd04356ce475934fcd4cac654c4bRichard Smithimport java.util.*;
211d238ea926bbdd04356ce475934fcd4cac654c4bRichard Smith
2259efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smithimport org.mockito.asm.ClassVisitor;
2359efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smithimport org.mockito.cglib.core.CollectionUtils;
2459efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smithimport org.mockito.cglib.core.ReflectUtils;
2559efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smithimport org.mockito.cglib.core.RejectModifierPredicate;
2659efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith
2759efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith/**
2859efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith * @author Chris Nokleberg
2959efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith * @version $Id: MixinEverythingEmitter.java,v 1.3 2004/06/24 21:15:19 herbyderby Exp $
3059efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith */
3159efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smithclass MixinEverythingEmitter extends MixinEmitter {
3259efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith
3359efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith    public MixinEverythingEmitter(ClassVisitor v, String className, Class[] classes) {
3459efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith        super(v, className, classes, null);
3559efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith    }
3659efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith
3759efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith    protected Class[] getInterfaces(Class[] classes) {
3859efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith        List list = new ArrayList();
3959efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith        for (int i = 0; i < classes.length; i++) {
40f15fda02e9c8c82b4a716618f4010b9af8bff796Richard Smith            ReflectUtils.addAllInterfaces(classes[i], list);
419eed49c2bb0f37bbfefefd0998b6303a686a66c0Richard Smith        }
429eed49c2bb0f37bbfefefd0998b6303a686a66c0Richard Smith        return (Class[])list.toArray(new Class[list.size()]);
439eed49c2bb0f37bbfefefd0998b6303a686a66c0Richard Smith    }
4459efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith
4559efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith    protected Method[] getMethods(Class type) {
4659efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith        List methods = new ArrayList(Arrays.asList(type.getMethods()));
479eed49c2bb0f37bbfefefd0998b6303a686a66c0Richard Smith        CollectionUtils.filter(methods, new RejectModifierPredicate(Modifier.FINAL | Modifier.STATIC));
489eed49c2bb0f37bbfefefd0998b6303a686a66c0Richard Smith        return (Method[])methods.toArray(new Method[methods.size()]);
499eed49c2bb0f37bbfefefd0998b6303a686a66c0Richard Smith    }
5059efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith}
5159efe266b804330f4c1f3a1b0ff783e67dd90378Richard Smith