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() {<FILL_FUNCTION_BODY>}

    /**
     * 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);
    }

}

        if (transformer == null) {
            transformer = createTransformer();
        }
        return transformer;
    
<no_super_class>