Package org.nutz.repo.org.objectweb.asm

Examples of org.nutz.repo.org.objectweb.asm.MethodVisitor


  void addConstructors() {
    for (Constructor<?> constructor : constructors) {
      String[] expClasses = convertExp(constructor.getExceptionTypes());
      String desc = Type.getConstructorDescriptor(constructor);
      int access = getAccess(constructor.getModifiers());
      MethodVisitor mv = cw.visitMethod(access, "<init>", desc, null, expClasses);
      new ChangeToChildConstructorMethodAdapter(mv, desc, access, enhancedSuperName).visitCode();
    }
  }
View Full Code Here


  private void enhandMethod() {
    for (Method method : methodArray) {
      String methodName = method.getName();
      String methodDesc = Type.getMethodDescriptor(method);
      int methodAccess = getAccess(method.getModifiers());
      MethodVisitor mv = cw.visitMethodmethodAccess,
                        methodName,
                        methodDesc,
                        null,
                        convertExp(method.getExceptionTypes()));
      int methodIndex = findMethodIndex(methodName, methodDesc, methodArray);
View Full Code Here

    void addConstructors() {
        for (Constructor<?> constructor : constructors) {
            String[] expClasses = convertExp(constructor.getExceptionTypes());
            String desc = Type.getConstructorDescriptor(constructor);
            int access = getAccess(constructor.getModifiers());
            MethodVisitor mv = cw.visitMethod(access, "<init>", desc, null, expClasses);
            new ChangeToChildConstructorMethodAdapter(mv, desc, access, enhancedSuperName).visitCode();
        }
    }
View Full Code Here

    private void enhandMethod() {
        for (Method method : methodArray) {
            String methodName = method.getName();
            String methodDesc = Type.getMethodDescriptor(method);
            int methodAccess = getAccess(method.getModifiers());
            MethodVisitor mv = cw.visitMethod(    methodAccess,
                                                methodName,
                                                methodDesc,
                                                null,
                                                convertExp(method.getExceptionTypes()));
            int methodIndex = findMethodIndex(methodName, methodDesc, methodArray);
View Full Code Here

                 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方法
        {
View Full Code Here

TOP

Related Classes of org.nutz.repo.org.objectweb.asm.MethodVisitor

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.