package org.hotswap.agent.plugin.proxy.java;
import org.hotswap.agent.javassist.ClassPool;
import org.hotswap.agent.javassist.CtClass;
import org.hotswap.agent.javassist.CtMethod;
import org.hotswap.agent.javassist.Modifier;
import org.hotswap.agent.plugin.proxy.AbstractProxyBytecodeTransformer;
/**
* Transforms the bytecode of a new Java proxy definition so it is initialized on the first access of one of its
* methods.
*
* @author Erki Ehtla
*
*/
public class JavaProxyBytecodeTransformer extends AbstractProxyBytecodeTransformer {
public JavaProxyBytecodeTransformer(ClassPool classPool) {
super(classPool);
}
@Override
protected String getInitCall(CtClass cc, String initFieldName) throws Exception {
// clinit method already contains the setting of our static clinitFieldName to true
CtMethod method = cc.getClassInitializer().toMethod(initFieldName, cc);
method.setModifiers(Modifier.PRIVATE | Modifier.STATIC);
cc.addMethod(method);
return method.getName() + "();";
}
}