package org.springframework.aop.framework.asm;
import java.lang.reflect.Method;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.Type;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.springframework.aop.framework.AdvisedSupport;
/**
* @author robh
*/
public abstract class AbstractMethodProxyCodeGenerationStrategy extends AbstractCodeGenerationStrategy{
public void generate(ClassWriter cw, Method method, AdvisedSupport advised, String proxyInternalName, String targetInternalName, String targetDescriptor) {
String methodDescriptor = Type.getMethodDescriptor(method);
String[] exceptionTypes = convertToInternalTypes(method.getExceptionTypes());
String methodName = method.getName();
MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, methodName, methodDescriptor, null, exceptionTypes);
generateMethod(mv, method, advised, proxyInternalName, targetInternalName, targetDescriptor);
}
protected abstract void generateMethod(MethodVisitor mv, Method method, AdvisedSupport advised, String proxyInternalName, String targetInternalName, String targetDescriptor);
}