package org.hotswap.agent.plugin.proxy; import org.hotswap.agent.javassist.ClassPool; /** * Redefines a proxy * * @author Erki Ehtla * */ public abstract class AbstractProxyTransformer implements ProxyTransformer { public AbstractProxyTransformer(Class<?> classBeingRedefined, ClassPool classPool) { super(); this.classBeingRedefined = classBeingRedefined; this.classPool = classPool; } protected ProxyBytecodeGenerator generator; protected ProxyBytecodeTransformer transformer; protected Class<?> classBeingRedefined; protected ClassPool classPool; protected ProxyBytecodeGenerator getGenerator() { if (generator == null) { generator = createGenerator(); } return generator; } protected ProxyBytecodeTransformer getTransformer() { if (transformer == null) { transformer = createTransformer(); } return transformer; } /** * creates a new ProxyBytecodeGenerator insatance for use in this transformer * * @return */ protected abstract ProxyBytecodeGenerator createGenerator(); /** * creates a new ProxyBytecodeTransformer insatance for use in this transformer * * @return */ protected abstract ProxyBytecodeTransformer createTransformer(); /** * Checks if there were changes that require the redefinition of the proxy * * @return true if there wre changes that require redefinition */ protected boolean isTransformingNeeded() { return ProxyClassSignatureHelper.isNonSyntheticPoolClassOrParentDifferent(classBeingRedefined, classPool); } }