null,
"org/nutz/lang/reflect/AbstractFastClass",
null);
// 添加默认构造方法
{
MethodVisitor mv = cw.visitMethod(ACC_PUBLIC,
"<init>",
"()V",
null,
null);
mv.visitCode();
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL,
"org/nutz/lang/reflect/AbstractFastClass",
"<init>",
"()V");
mv.visitInsn(RETURN);
mv.visitMaxs(1, 1);
mv.visitEnd();
}
// 添加默认字段
{
cw.visitField(ACC_PUBLIC + ACC_STATIC,
FastClassFactory.MethodArray_FieldName,
"[Ljava/lang/reflect/Method;",
null,
null).visitEnd();
cw.visitField(ACC_PUBLIC + ACC_STATIC,
ConstructorArray_FieldName,
"[Ljava/lang/reflect/Constructor;",
null,
null).visitEnd();
cw.visitField(ACC_PUBLIC + ACC_STATIC,
SrcClass_FieldName,
"Ljava/lang/Class;",
"Ljava/lang/Class<*>;",
null).visitEnd();
}
// 实现默认字段的getter
{
MethodVisitor mv = cw.visitMethod(ACC_PROTECTED,
"getMethods",
"()[Ljava/lang/reflect/Method;",
null,
null);
mv.visitCode();
mv.visitFieldInsn(GETSTATIC,
myName,
FastClassFactory.MethodArray_FieldName,
"[Ljava/lang/reflect/Method;");
mv.visitInsn(ARETURN);
mv.visitMaxs(1, 1);
mv.visitEnd();
// -----------------------------------------------------------------------------------------------------
mv = cw.visitMethod(ACC_PROTECTED,
"getConstructors",
"()[Ljava/lang/reflect/Constructor;",
"()[Ljava/lang/reflect/Constructor<*>;",
null);
mv.visitCode();
mv.visitFieldInsn(GETSTATIC,
myName,
ConstructorArray_FieldName,
"[Ljava/lang/reflect/Constructor;");
mv.visitInsn(ARETURN);
mv.visitMaxs(1, 1);
mv.visitEnd();
// -----------------------------------------------------------------------------------------------------
mv = cw.visitMethod(ACC_PROTECTED,
"getSrcClass",
"()Ljava/lang/Class;",
"()Ljava/lang/Class<*>;",
null);
mv.visitCode();
mv.visitFieldInsn(GETSTATIC,
myName,
SrcClass_FieldName,
"Ljava/lang/Class;");
mv.visitInsn(ARETURN);
mv.visitMaxs(1, 1);
mv.visitEnd();
}
Method[] methods = classZ.getMethods();
Arrays.sort(methods, new MethodComparator());
// 构建_invoke方法
{