/* * 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 Throwable and which has at least one * constructor that takes a single argument of type * Throwable, for example * java.lang.reflect.UndeclaredThrowableException.class */ 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); } }