*
* @param cw
* @param className
*/
public void createMandatoryMethods(final ClassWriter cw, final String className) {
CodeVisitor cv;
// invoke
{
cv = cw.visitMethod(
ACC_PUBLIC,
AOP_ALLIANCE_CLOSURE_PROCEED_METHOD_NAME,
AOP_ALLIANCE_CLOSURE_PROCEED_METHOD_SIGNATURE,
new String[]{THROWABLE_CLASS_NAME},
null
);
cv.visitVarInsn(ALOAD, 0);
cv.visitMethodInsn(INVOKEVIRTUAL, className, PROCEED_METHOD_NAME, PROCEED_METHOD_SIGNATURE);
cv.visitInsn(ARETURN);
cv.visitMaxs(0, 0);
}
// getStaticPart
{
cv = cw.visitMethod(
ACC_PUBLIC,
GET_STATIC_PART_METHOD_NAME,
GET_STATIC_PART_METHOD_SIGNATURE,
null, null
);
cv.visitFieldInsn(GETSTATIC, className, SIGNATURE_FIELD_NAME, METHOD_SIGNATURE_IMPL_CLASS_SIGNATURE);
cv.visitTypeInsn(CHECKCAST, METHOD_SIGNATURE_IMPL_CLASS_NAME);
cv.visitMethodInsn(
INVOKEVIRTUAL, METHOD_SIGNATURE_IMPL_CLASS_NAME, GET_METHOD_METHOD_NAME,
GET_METHOD_METHOD_SIGNATURE
);
cv.visitInsn(ARETURN);
cv.visitMaxs(1, 1);
}
// getMethod
{
cv =
cw.visitMethod(
ACC_PUBLIC,
GET_METHOD_METHOD_NAME,
GET_METHOD_METHOD_SIGNATURE,
null, null
);
cv.visitFieldInsn(GETSTATIC, className, SIGNATURE_FIELD_NAME, METHOD_SIGNATURE_IMPL_CLASS_SIGNATURE);
cv.visitTypeInsn(CHECKCAST, METHOD_SIGNATURE_IMPL_CLASS_NAME);
cv.visitMethodInsn(
INVOKEVIRTUAL, METHOD_SIGNATURE_IMPL_CLASS_NAME, GET_METHOD_METHOD_NAME,
GET_METHOD_METHOD_SIGNATURE
);
cv.visitInsn(ARETURN);
cv.visitMaxs(1, 1);
}
// getArguments
{
cv = cw.visitMethod(
ACC_PUBLIC,
GET_ARGUMENTS_METHOD_NAME,
GET_ARGUMENTS_METHOD_SIGNATURE,
null, null
);
cv.visitVarInsn(ALOAD, 0);
cv.visitMethodInsn(INVOKESPECIAL, className, GET_RTTI_METHOD_NAME, GET_RTTI_METHOD_SIGNATURE);
cv.visitTypeInsn(CHECKCAST, METHOD_RTTI_IMPL_CLASS_NAME);
cv.visitMethodInsn(
INVOKEVIRTUAL,
METHOD_RTTI_IMPL_CLASS_NAME,
GET_PARAMETER_VALUES_METHOD_NAME,
GET_ARGUMENTS_METHOD_SIGNATURE
);
cv.visitInsn(ARETURN);
cv.visitMaxs(1, 1);
}
}