| /* |
| * Copyright 2003 The Apache Software Foundation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.mockito.cglib.transform.impl; |
| |
| import org.mockito.asm.Attribute; |
| import org.mockito.cglib.core.*; |
| import org.mockito.cglib.transform.*; |
| |
| /** |
| * A {@link GeneratorStrategy} suitable for use with {@link org.mockito.cglib.Enhancer} which |
| * causes all undeclared exceptions thrown from within a proxied method to be wrapped |
| * in an alternative exception of your choice. |
| */ |
| public class UndeclaredThrowableStrategy extends DefaultGeneratorStrategy { |
| private ClassTransformer t; |
| |
| /** |
| * Create a new instance of this strategy. |
| * @param wrapper a class which extends either directly or |
| * indirectly from <code>Throwable</code> and which has at least one |
| * constructor that takes a single argument of type |
| * <code>Throwable</code>, for example |
| * <code>java.lang.reflect.UndeclaredThrowableException.class</code> |
| */ |
| public UndeclaredThrowableStrategy(Class wrapper) { |
| t = new UndeclaredThrowableTransformer(wrapper); |
| t = new MethodFilterTransformer(TRANSFORM_FILTER, t); |
| } |
| |
| private static final MethodFilter TRANSFORM_FILTER = new MethodFilter() { |
| public boolean accept(int access, String name, String desc, String signature, String[] exceptions) { |
| return !TypeUtils.isPrivate(access) && name.indexOf('$') < 0; |
| } |
| }; |
| |
| protected ClassGenerator transform(ClassGenerator cg) throws Exception { |
| return new TransformingClassGenerator(cg, t); |
| } |
| } |
| |