Package net.sf.joafip.asm

Examples of net.sf.joafip.asm.MethodVisitor


    final String[] exceptions = new String[exceptionsClass.length];// NOPMD
    for (int index = 0; index < exceptionsClass.length; index++) {
      exceptions[index] = Type.getInternalName(exceptionsClass[index]);
    }

    MethodVisitor methodVisitor;
    methodVisitor = classWriter.visitMethod(
    /**/ACC_PUBLIC,
    /**/INIT_METHOD_NAME,
    /**/desc,
    /**/null/* signature */,
    /**/exceptions);

    methodVisitor.visitCode();

    methodVisitor.visitVarInsn(ALOAD, 0);

    methodVisitor.visitTypeInsn(NEW, PROXY_CALL_BACK);
    methodVisitor.visitInsn(DUP);
    methodVisitor.visitMethodInsn(INVOKESPECIAL, PROXY_CALL_BACK,
        INIT_METHOD_NAME, proxyCallBackConstructorDesc);

    methodVisitor.visitFieldInsn(
    /**/PUTFIELD,/* opcode */
        /**/classInternalName,/* owner */
        /**/PROXY_CALL_BACK_FIELD_NAME,/* name */
        /**/I_PROXY_CALL_BACK_DELEGATION_DESC);/* desc */

    methodVisitor.visitVarInsn(ALOAD, 0);
    final Class<?>[] parameterTypes = constructor.getParameterTypes();
    final int numberOfParams = parameterTypes.length;
    int paramSize = 0;
    for (int paramIndex = 0; paramIndex < numberOfParams; paramIndex++) {
      final Type type = Type.getType(parameterTypes[paramIndex]);
      final int opcode = type.getOpcode(ILOAD);
      methodVisitor.visitVarInsn(opcode, paramSize + 1);
      paramSize += type.getSize();
    }

    methodVisitor.visitMethodInsn(
    /**/INVOKESPECIAL,
    /**/superClassInternalName,
    /**/INIT_METHOD_NAME,
    /**/desc);

    methodVisitor.visitVarInsn(ALOAD, 0);
    methodVisitor.visitMethodInsn(
    /**/INVOKEVIRTUAL,
    /**/classInternalName,
    /**/CONSTRUCTOR_END_METHOD_NAME,
    /**/constructorEndMethodDesc);

    methodVisitor.visitInsn(RETURN);

    // FIXMELUC _visitmaxs call needed ?
    methodVisitor.visitMaxs(0, 0);
    methodVisitor.visitEnd();

  }
View Full Code Here


    /*
     * $proxyCallBack$ private field
     */
    FieldVisitor fieldVisitor;
    MethodVisitor methodVisitor;
    fieldVisitor = classWriter.visitField(
    /**/ACC_TRANSIENT,/* access */
        /**/PROXY_CALL_BACK_FIELD_NAME,/* name */
        /**/I_PROXY_CALL_BACK_DELEGATION_DESC,/* desc */
        /**/null,/* signature */
        /**/null/* value */);
    fieldVisitor.visitEnd();

    /*
     * setProxyCallBack method
     */
    methodVisitor = classWriter.visitMethod(
    /**/ACC_PUBLIC,
    /**/SET_PROXY_CALL_BACK_METHOD_NAME,
    /**/setProxyCallBackMethodDesc,
    /**/null,
    /**/null);
    methodVisitor.visitCode();

    methodVisitor.visitVarInsn(ALOAD, 0);
    methodVisitor.visitVarInsn(ALOAD, 1);
    methodVisitor.visitFieldInsn(
    /**/PUTFIELD,/* opcode */
        /**/classInternalName,/* owner */
        /**/PROXY_CALL_BACK_FIELD_NAME,/* name */
        /**/I_PROXY_CALL_BACK_DELEGATION_DESC);/* desc */

    methodVisitor.visitInsn(RETURN);

    methodVisitor.visitMaxs(0, 0);
    methodVisitor.visitEnd();

    /*
     * getProxyCallBack
     */
    methodVisitor = classWriter.visitMethod(
    /**/ACC_PUBLIC,
    /**/GET_PROXY_CALL_BACK_METHOD_NAME,
    /**/getProxyCallBackMethodDesc,
    /**/null,
    /**/null);
    methodVisitor.visitCode();

    methodVisitor.visitVarInsn(ALOAD, 0);
    methodVisitor.visitFieldInsn(
    /**/GETFIELD,
    /**/classInternalName,
    /**/PROXY_CALL_BACK_FIELD_NAME,
    /**/I_PROXY_CALL_BACK_DELEGATION_DESC);
    methodVisitor.visitInsn(ARETURN);

    // FIXMELUC _visitmaxs call needed ?
    methodVisitor.visitMaxs(0, 0);
    methodVisitor.visitEnd();

    /*
     * forceLoad
     */
    methodVisitor = classWriter.visitMethod(
    /**/ACC_PUBLIC,
    /**/FORCE_LOAD_METHOD_NAME,
    /**/forceLoadMethodDesc,
    /**/null,
    /**/FORCE_LOAD_EXCEPTION);

    methodVisitor.visitCode();
    methodVisitor.visitVarInsn(ALOAD, 0);
    methodVisitor.visitFieldInsn(
    /**/GETFIELD,
    /**/classInternalName,
    /**/PROXY_CALL_BACK_FIELD_NAME,
    /**/I_PROXY_CALL_BACK_DELEGATION_DESC);
    methodVisitor.visitMethodInsn(
    /**/INVOKEINTERFACE,
    /**/I_PROXY_CALL_BACK_INTERFACE,
    /**/FORCE_LOAD_METHOD_NAME,
    /**/forceLoadMethodDesc);
    methodVisitor.visitInsn(RETURN);
    // FIXMELUC _visitmaxs call needed ?
    methodVisitor.visitMaxs(0, 0);
    methodVisitor.visitEnd();

    /*
     * unload
     */
    methodVisitor = classWriter.visitMethod(
    /**/ACC_PUBLIC,
    /**/UNLOAD_METHOD_NAME,
    /**/unloadMethodDesc,
    /**/null,
    /**/UNLOAD_EXCEPTION);

    methodVisitor.visitCode();

    methodVisitor.visitVarInsn(ALOAD, 0);
    methodVisitor.visitFieldInsn(
    /**/GETFIELD,
    /**/classInternalName,
    /**/PROXY_CALL_BACK_FIELD_NAME,
    /**/I_PROXY_CALL_BACK_DELEGATION_DESC);
    methodVisitor.visitMethodInsn(
    /**/INVOKEINTERFACE,
    /**/I_PROXY_CALL_BACK_INTERFACE,
    /**/UNLOAD_METHOD_NAME,
    /**/unloadMethodDesc);
    methodVisitor.visitInsn(RETURN);

    // FIXMELUC _visitmaxs call needed ?
    methodVisitor.visitMaxs(0, 0);
    methodVisitor.visitEnd();

    /*
     * intercept
     */
    methodVisitor = classWriter.visitMethod(
    /**/ACC_PUBLIC,
    /**/INTERCEPT_METHOD_NAME,
    /**/interceptMethodDesc,
    /**/null,
    /**/null);
    methodVisitor.visitCode();
    methodVisitor.visitVarInsn(ALOAD, 0);
    methodVisitor.visitFieldInsn(
    /**/GETFIELD,
    /**/classInternalName,
    /**/PROXY_CALL_BACK_FIELD_NAME,
    /**/I_PROXY_CALL_BACK_DELEGATION_DESC);
    methodVisitor.visitMethodInsn(
    /**/INVOKEINTERFACE,
    /**/I_PROXY_CALL_BACK_INTERFACE,
    /**/INTERCEPT_METHOD_NAME,
    /**/interceptMethodDesc);
    methodVisitor.visitInsn(RETURN);
    // FIXMELUC _visitmaxs call needed ?
    methodVisitor.visitMaxs(0, 0);
    methodVisitor.visitEnd();

    /*
     * constructor end
     */

    methodVisitor = classWriter.visitMethod(
    /**/ACC_PUBLIC,
    /**/CONSTRUCTOR_END_METHOD_NAME,
    /**/constructorEndMethodDesc,
    /**/null,
    /**/null);
    methodVisitor.visitCode();
    methodVisitor.visitVarInsn(ALOAD, 0);
    methodVisitor.visitFieldInsn(
    /**/GETFIELD,
    /**/classInternalName,
    /**/PROXY_CALL_BACK_FIELD_NAME,
    /**/I_PROXY_CALL_BACK_DELEGATION_DESC);
    methodVisitor.visitMethodInsn(
    /**/INVOKEINTERFACE,
    /**/I_PROXY_CALL_BACK_INTERFACE,
    /**/CONSTRUCTOR_END_METHOD_NAME,
    /**/constructorEndMethodDesc);
    methodVisitor.visitInsn(RETURN);
    // FIXMELUC _visitmaxs call needed ?
    methodVisitor.visitMaxs(0, 0);
    methodVisitor.visitEnd();

    /*
     * method end
     */

    methodVisitor = classWriter.visitMethod(
    /**/ACC_PUBLIC,
    /**/METHOD_END_METHOD_NAME,
    /**/methodEndMethodDesc,
    /**/null,
    /**/null);
    methodVisitor.visitCode();
    methodVisitor.visitVarInsn(ALOAD, 0);
    methodVisitor.visitFieldInsn(
    /**/GETFIELD,
    /**/classInternalName,
    /**/PROXY_CALL_BACK_FIELD_NAME,
    /**/I_PROXY_CALL_BACK_DELEGATION_DESC);
    methodVisitor.visitMethodInsn(
    /**/INVOKEINTERFACE,
    /**/I_PROXY_CALL_BACK_INTERFACE,
    /**/METHOD_END_METHOD_NAME,
    /**/methodEndMethodDesc);
    methodVisitor.visitInsn(RETURN);
    // FIXMELUC _visitmaxs call needed ?
    methodVisitor.visitMaxs(0, 0);
    methodVisitor.visitEnd();

    /*
     * isLoaded
     */
    methodVisitor = classWriter.visitMethod(
    /**/ACC_PUBLIC,
    /**/IS_LOADED_METHOD_NAME,
    /**/isLoadedMethodDesc,
    /**/null,
    /**/IS_LOADED_EXCEPTION);
    methodVisitor.visitCode();
    methodVisitor.visitVarInsn(ALOAD, 0);
    methodVisitor.visitFieldInsn(
    /**/GETFIELD,
    /**/classInternalName,
    /**/PROXY_CALL_BACK_FIELD_NAME,
    /**/I_PROXY_CALL_BACK_DELEGATION_DESC);
    methodVisitor.visitMethodInsn(
    /**/INVOKEINTERFACE,
    /**/I_PROXY_CALL_BACK_INTERFACE,
    /**/IS_LOADED_METHOD_NAME,
    /**/isLoadedMethodDesc);
    methodVisitor.visitInsn(IRETURN);
    // FIXMELUC _visitmaxs call needed ?
    methodVisitor.visitMaxs(0, 0);
    methodVisitor.visitEnd();

    /*
     * setIsLoaded
     */
    methodVisitor = classWriter.visitMethod(
    /**/ACC_PUBLIC,
    /**/SET_IS_LOADED_METHOD_NAME,
    /**/setIsLoadedMethodDesc,
    /**/null,
    /**/SET_IS_LOADED_EXCEPTION);
    methodVisitor.visitCode();
    methodVisitor.visitVarInsn(ALOAD, 0);
    methodVisitor.visitFieldInsn(
    /**/GETFIELD,
    /**/classInternalName,
    /**/PROXY_CALL_BACK_FIELD_NAME, I_PROXY_CALL_BACK_DELEGATION_DESC);
    methodVisitor.visitMethodInsn(
    /**/INVOKEINTERFACE,
    /**/I_PROXY_CALL_BACK_INTERFACE,
    /**/SET_IS_LOADED_METHOD_NAME,
    /**/setIsLoadedMethodDesc);
    methodVisitor.visitInsn(RETURN);
    // FIXMELUC _visitmaxs call needed ?
    methodVisitor.visitMaxs(0, 0);
    methodVisitor.visitEnd();

    /*
     * setIsLoadedNoSave
     */
    methodVisitor = classWriter.visitMethod(
    /**/ACC_PUBLIC,
    /**/SET_IS_LOADED_NO_SAVE_METHOD_NAME,
    /**/setIsLoadedNoSaveMethodDesc,
    /**/null,
    /**/null);
    methodVisitor.visitCode();
    methodVisitor.visitVarInsn(ALOAD, 0);
    methodVisitor.visitFieldInsn(
    /**/GETFIELD,
    /**/classInternalName,
    /**/PROXY_CALL_BACK_FIELD_NAME, I_PROXY_CALL_BACK_DELEGATION_DESC);
    methodVisitor.visitMethodInsn(
    /**/INVOKEINTERFACE,
    /**/I_PROXY_CALL_BACK_INTERFACE,
    /**/SET_IS_LOADED_NO_SAVE_METHOD_NAME,
    /**/setIsLoadedNoSaveMethodDesc);
    methodVisitor.visitInsn(RETURN);
    // FIXMELUC _visitmaxs call needed ?
    methodVisitor.visitMaxs(0, 0);
    methodVisitor.visitEnd();

    /*
     * setLoading
     */
    methodVisitor = classWriter.visitMethod(
    /**/ACC_PUBLIC,
    /**/SET_LOADING_METHOD_NAME,
    /**/setLoadingMethodDesc,
    /**/null,
    /**/null);
    methodVisitor.visitCode();
    methodVisitor.visitVarInsn(ALOAD, 0);
    methodVisitor.visitFieldInsn(
    /**/GETFIELD,
    /**/classInternalName,
    /**/PROXY_CALL_BACK_FIELD_NAME, I_PROXY_CALL_BACK_DELEGATION_DESC);
    methodVisitor.visitVarInsn(ILOAD, 1);
    methodVisitor.visitMethodInsn(
    /**/INVOKEINTERFACE,
    /**/I_PROXY_CALL_BACK_INTERFACE,
    /**/SET_LOADING_METHOD_NAME,
    /**/setLoadingMethodDesc);
    methodVisitor.visitInsn(RETURN);
    // FIXMELUC _visitmaxs call needed ?
    methodVisitor.visitMaxs(0, 0);
    methodVisitor.visitEnd();

    /*
     * getMyFileAccessSessionIdentifier
     */
    methodVisitor = classWriter.visitMethod(
    /**/ACC_PUBLIC,
    /**/GET_MY_FILE_ACCESS_SESSION_IDENTIFIER_METHOD_NAME,
    /**/getMyFileAccessSessionIdentifierClassDesc,
    /**/null,
    /**/null);
    methodVisitor.visitCode();
    methodVisitor.visitVarInsn(ALOAD, 0);
    methodVisitor.visitFieldInsn(
    /**/GETFIELD,
    /**/classInternalName,
    /**/PROXY_CALL_BACK_FIELD_NAME,
    /**/I_PROXY_CALL_BACK_DELEGATION_DESC);
    methodVisitor.visitMethodInsn(
    /**/INVOKEINTERFACE,
    /**/I_PROXY_CALL_BACK_INTERFACE,
    /**/GET_MY_FILE_ACCESS_SESSION_IDENTIFIER_METHOD_NAME,
    /**/getMyFileAccessSessionIdentifierClassDesc);
    methodVisitor.visitInsn(LRETURN);
    // FIXMELUC _visitmaxs call needed ?
    methodVisitor.visitMaxs(0, 0);
    methodVisitor.visitEnd();

    /*
     * getInstance$JOAFIP$
     */
    methodVisitor = classWriter.visitMethod(
    /**/ACC_PUBLIC,
    /**/GET_INSTANCE_METHOD_NAME,
    /**/getInstanceMethodDesc,
    /**/null,
    /**/null);
    methodVisitor.visitCode();
    methodVisitor.visitVarInsn(ALOAD, 0);
    methodVisitor.visitFieldInsn(
    /**/GETFIELD,
    /**/classInternalName,
    /**/PROXY_CALL_BACK_FIELD_NAME,
    /**/I_PROXY_CALL_BACK_DELEGATION_DESC);
    methodVisitor.visitMethodInsn(
    /**/INVOKEINTERFACE,
    /**/I_PROXY_CALL_BACK_INTERFACE,
    /**/GET_INSTANCE_METHOD_NAME,
    /**/getInstanceMethodDesc);
    methodVisitor.visitInsn(ARETURN);
    // FIXMELUC _visitmaxs call needed ?
    methodVisitor.visitMaxs(0, 0);
    methodVisitor.visitEnd();

  }
View Full Code Here

      final String classPackageName, final String superClassPackageName,
      final boolean overridePublicOnly) throws EnhanceException {
    final int methodModifiers = method.getModifiers();
    if (checkAccess(overridePublicOnly, method, methodModifiers,
        classPackageName, superClassPackageName)) {
      MethodVisitor methodVisitor;
      final String desc = Type.getMethodDescriptor(method);
      final Class<?>[] exceptionsClass = method.getExceptionTypes();
      final String[] exceptions = new String[exceptionsClass.length];// NOPMD
      for (int index = 0; index < exceptionsClass.length; index++) {
        exceptions[index] = Type
            .getInternalName(exceptionsClass[index]);
      }

      // final int access =
      // /**/(Modifier.isPublic(method.getModifiers()) ? ACC_PUBLIC : 0)
      // /**/| (Modifier.isStrict(method.getModifiers()) ? ACC_STRICT
      // : 0)
      // /**/| (Modifier.isSynchronized(method.getModifiers()) ?
      // ACC_SYNCHRONIZED
      // : 0);
      // final int access =method.getModifiers();
      final String methodName = method.getName();
      assert !Modifier.isPrivate(methodModifiers) : "method "
          + superClassInternalName + "#" + methodName
          + " must not be private and is: "
          + Modifier.toString(methodModifiers);
      // always public even if super method is not public
      final int access = ACC_PUBLIC;
      // final int access = computeAccess(method);
      methodVisitor = classWriter.visitMethod(
      /**/access,
      /**/methodName,
      /**/desc,
      /**/null,
      /**/exceptions);

      methodVisitor.visitCode();

      methodVisitor.visitVarInsn(ALOAD, 0);
      methodVisitor.visitMethodInsn(
      /**/INVOKEVIRTUAL,
      /**/classInternalName,
      /**/INTERCEPT_METHOD_NAME,
      /**/interceptMethodDesc);

      methodVisitor.visitVarInsn(ALOAD, 0);
      final Class<?>[] parameterTypes = method.getParameterTypes();
      final int numberOfParams = parameterTypes.length;
      int paramSize = 0;
      for (int paramIndex = 0; paramIndex < numberOfParams; paramIndex++) {
        final Type type = Type.getType(parameterTypes[paramIndex]);
        final int opcode = type.getOpcode(ILOAD);
        methodVisitor.visitVarInsn(opcode, paramSize + 1);
        paramSize += type.getSize();
      }
      final Type returnType = Type.getReturnType(method);

      methodVisitor.visitMethodInsn(
      /**/INVOKESPECIAL,
      /**/superClassInternalName,
      /**/methodName,
      /**/desc);

      final int opcode = returnType.getOpcode(IRETURN);
      methodVisitor.visitInsn(opcode);

      // FIXMELUC _visitmaxs call needed ?
      methodVisitor.visitMaxs(0, 0);
      methodVisitor.visitEnd();
    }
  }
View Full Code Here

      final boolean overridePublicOnly) throws EnhanceException {
    final int methodModifiers = method.getModifiers();
    if (checkAccess(overridePublicOnly, method, methodModifiers,
        classPackageName, superClassPackageName)) {

      MethodVisitor methodVisitor;
      final String desc = Type.getMethodDescriptor(method);
      final Class<?>[] exceptionsClass = method.getExceptionTypes();
      final String[] exceptions = new String[exceptionsClass.length];// NOPMD
      for (int index = 0; index < exceptionsClass.length; index++) {
        exceptions[index] = Type
            .getInternalName(exceptionsClass[index]);
      }

      // final int access =
      // /**/(Modifier.isPublic(method.getModifiers()) ? ACC_PUBLIC : 0)
      // /**/| (Modifier.isStrict(method.getModifiers()) ? ACC_STRICT
      // : 0)
      // /**/| (Modifier.isSynchronized(method.getModifiers()) ?
      // ACC_SYNCHRONIZED
      // : 0);
      // // final int access =ACC_PUBLIC;
      // // final int access =method.getModifiers();
      final String methodName = method.getName();
      assert !Modifier.isPrivate(methodModifiers) : "method "
          + superClassInternalName + "#" + methodName
          + " must not be private and is: "
          + Modifier.toString(methodModifiers);
      // always public even if super method is not public
      final int access = ACC_PUBLIC;
      // final int access = computeAccess(method);
      methodVisitor = classWriter.visitMethod(
      /**/access,
      /**/methodName,
      /**/desc,
      /**/null,
      /**/exceptions);

      methodVisitor.visitCode();

      final Label label0 = new Label();
      final Label label1 = new Label();
      final Label label2 = new Label();
      methodVisitor.visitTryCatchBlock(label0, label1, label2, null);

      methodVisitor.visitLabel(label0);
      methodVisitor.visitVarInsn(ALOAD, 0);
      methodVisitor.visitMethodInsn(
      /**/INVOKEVIRTUAL,
      /**/classInternalName,
      /**/INTERCEPT_METHOD_NAME,
      /**/interceptMethodDesc);

      methodVisitor.visitVarInsn(ALOAD, 0);
      final Class<?>[] parameterTypes = method.getParameterTypes();
      final int numberOfParams = parameterTypes.length;
      int paramSize = 0;
      for (int paramIndex = 0; paramIndex < numberOfParams; paramIndex++) {
        final Type type = Type.getType(parameterTypes[paramIndex]);
        final int opcode = type.getOpcode(ILOAD);
        methodVisitor.visitVarInsn(opcode, paramSize + 1);
        paramSize += type.getSize();
      }
      final Type returnType = Type.getReturnType(method);

      methodVisitor.visitMethodInsn(
      /**/INVOKESPECIAL,
      /**/superClassInternalName,
      /**/methodName,
      /**/desc);

      methodVisitor.visitLabel(label1);

      int opcode;
      if (!Type.VOID_TYPE.equals(returnType)) {
        opcode = returnType.getOpcode(ISTORE);
        methodVisitor.visitVarInsn(opcode, paramSize + 1);
      }

      methodVisitor.visitVarInsn(ALOAD, 0);
      methodVisitor.visitMethodInsn(
      /**/INVOKEVIRTUAL,
      /**/classInternalName,
      /**/METHOD_END_METHOD_NAME,
      /**/methodEndMethodDesc);

      if (!Type.VOID_TYPE.equals(returnType)) {
        opcode = returnType.getOpcode(ILOAD);
        methodVisitor.visitVarInsn(opcode, paramSize + 1);
      }

      opcode = returnType.getOpcode(IRETURN);
      methodVisitor.visitInsn(opcode);

      // finally block
      methodVisitor.visitLabel(label2);
      methodVisitor.visitVarInsn(ASTORE, 1);

      methodVisitor.visitVarInsn(ALOAD, 0);
      methodVisitor.visitMethodInsn(
      /**/INVOKEVIRTUAL,
      /**/classInternalName,
      /**/METHOD_END_METHOD_NAME,
      /**/methodEndMethodDesc);

      methodVisitor.visitVarInsn(ALOAD, 1);
      methodVisitor.visitInsn(ATHROW);

      // FIXMELUC _visitmaxs call needed ?
      methodVisitor.visitMaxs(0, 0);
      methodVisitor.visitEnd();
    }
  }
View Full Code Here

TOP

Related Classes of net.sf.joafip.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.