}
protected static byte[] dump(final Class clazz,
final String className) throws Exception {
final ClassWriter cw = new ClassWriter( true );
buildClassHeader( clazz,
className,
cw );
buildConstructor( clazz,
className,
cw );
buildField( ShadowProxyFactory.DELEGATE_FIELD_NAME,
Type.getDescriptor( clazz ),
cw );
final Method getShadowed = ShadowProxy.class.getDeclaredMethod( GET_SHADOWED_OBJECT,
new Class[]{} );
final Method setShadowed = ShadowProxy.class.getDeclaredMethod( SET_SHADOWED_OBJECT,
new Class[]{Object.class} );
buildSimpleGetMethod( ShadowProxyFactory.DELEGATE_FIELD_NAME,
clazz,
getShadowed,
className,
clazz,
cw );
buildSetShadowedObject( clazz,
className,
setShadowed,
cw );
if ( Collection.class.isAssignableFrom( clazz ) ) {
buildCollectionClass( clazz,
className,
cw );
} else if ( Map.class.isAssignableFrom( clazz ) ) {
buildMapClass( clazz,
className,
cw );
} else {
buildRegularClass( clazz,
className,
cw );
}
return cw.toByteArray();
}