Examples of Bytecode

This program produces a Code attribute including a bytecode sequence:

@see ConstPool @see CodeAttribute
  • objot.bytecode.Bytecode
  • org.hotswap.agent.javassist.bytecode.Bytecode
    tant pool table Bytecode b = new Bytecode(cp, 1, 0); b.addIconst(3); b.addReturn(CtClass.intType); CodeAttribute ca = b.toCodeAttribute();

    This program produces a Code attribute including a bytecode sequence:

    @see ConstPool @see CodeAttribute
  • org.jboss.forge.furnace.proxy.javassist.bytecode.Bytecode
    tant pool table Bytecode b = new Bytecode(cp, 1, 0); b.addIconst(3); b.addReturn(CtClass.intType); CodeAttribute ca = b.toCodeAttribute();

    This program produces a Code attribute including a bytecode sequence:

    @see ConstPool @see CodeAttribute

  • Examples of ch.grengine.code.Bytecode

         * LoadMode.CURRENT_FIRST: Instead in loadClass(..) tries first to load the class
         *   from bytecode, then tries the other two options.
         */
       
        private Class<?> loadClassFromBytecode(final String name) {
            Bytecode bc = code.getBytecode(name);
            if (bc == null) {
                return null;
            }
           
            byte[] bytes = bc.getBytes();
            // define class if not already defined by another thread
            Class<?> clazz;
            synchronized(this) {
                if ((clazz = findLoadedClass(name)) == null) {
                    definePackage(name);
    View Full Code Here

    Examples of javassist.bytecode.Bytecode

        ConstPool cp = classfile.getConstPool();
        int this_class_index = cp.getThisClassInfo();
        MethodInfo minfo = new MethodInfo(cp, GETFIELDHANDLER_METHOD_NAME,
                                          GETFIELDHANDLER_METHOD_DESCRIPTOR);
        /* local variable | this | */
        Bytecode code = new Bytecode(cp, 2, 1);
        // aload_0 // load this
        code.addAload(0);
        // getfield // get field "$JAVASSIST_CALLBACK" defined already
        code.addOpcode(Opcode.GETFIELD);
        int field_index = cp.addFieldrefInfo(this_class_index,
                                             HANDLER_FIELD_NAME, HANDLER_FIELD_DESCRIPTOR);
        code.addIndex(field_index);
        // areturn // return the value of the field
        code.addOpcode(Opcode.ARETURN);
        minfo.setCodeAttribute(code.toCodeAttribute());
        minfo.setAccessFlags(AccessFlag.PUBLIC);
        classfile.addMethod(minfo);
      }
    View Full Code Here

    Examples of javassist.bytecode.Bytecode

        ConstPool cp = classfile.getConstPool();
        int this_class_index = cp.getThisClassInfo();
        MethodInfo minfo = new MethodInfo(cp, SETFIELDHANDLER_METHOD_NAME,
                                          SETFIELDHANDLER_METHOD_DESCRIPTOR);
        /* local variables | this | callback | */
        Bytecode code = new Bytecode(cp, 3, 3);
        // aload_0 // load this
        code.addAload(0);
        // aload_1 // load callback
        code.addAload(1);
        // putfield // put field "$JAVASSIST_CALLBACK" defined already
        code.addOpcode(Opcode.PUTFIELD);
        int field_index = cp.addFieldrefInfo(this_class_index,
                                             HANDLER_FIELD_NAME, HANDLER_FIELD_DESCRIPTOR);
        code.addIndex(field_index);
        // return
        code.addOpcode(Opcode.RETURN);
        minfo.setCodeAttribute(code.toCodeAttribute());
        minfo.setAccessFlags(AccessFlag.PUBLIC);
        classfile.addMethod(minfo);
      }
    View Full Code Here

    Examples of javassist.bytecode.Bytecode

        int this_class_index = cp.getThisClassInfo();
        String desc = "()" + finfo.getDescriptor();
        MethodInfo minfo = new MethodInfo(cp, EACH_READ_METHOD_PREFIX
                                              + finfo.getName(), desc);
        /* local variables | target obj | each oldvalue | */
        Bytecode code = new Bytecode(cp, 5, 3);
        // aload_0
        code.addAload(0);
        // getfield // get each field
        code.addOpcode(Opcode.GETFIELD);
        int base_field_index = cp.addFieldrefInfo(this_class_index, finfo
            .getName(), finfo.getDescriptor());
        code.addIndex(base_field_index);
        // aload_0
        code.addAload(0);
        // invokeinterface // invoke Enabled.getInterceptFieldCallback()
        int enabled_class_index = cp.addClassInfo(FIELD_HANDLED_TYPE_NAME);
        code.addInvokeinterface(enabled_class_index,
                                GETFIELDHANDLER_METHOD_NAME, GETFIELDHANDLER_METHOD_DESCRIPTOR,
                                1);
        // ifnonnull
        code.addOpcode(Opcode.IFNONNULL);
        code.addIndex(4);
        // *return // each type
        addTypeDependDataReturn(code, finfo.getDescriptor());
        // *store_1 // each type
        addTypeDependDataStore(code, finfo.getDescriptor(), 1);
        // aload_0
        code.addAload(0);
        // invokeinterface // invoke Enabled.getInterceptFieldCallback()
        code.addInvokeinterface(enabled_class_index,
                                GETFIELDHANDLER_METHOD_NAME, GETFIELDHANDLER_METHOD_DESCRIPTOR,
                                1);
        // aload_0
        code.addAload(0);
        // ldc // name of the field
        code.addLdc(finfo.getName());
        // *load_1 // each type
        addTypeDependDataLoad(code, finfo.getDescriptor(), 1);
        // invokeinterface // invoke Callback.read*() // each type
        addInvokeFieldHandlerMethod(classfile, code, finfo.getDescriptor(),
                                    true);
        // *return // each type
        addTypeDependDataReturn(code, finfo.getDescriptor());

        minfo.setCodeAttribute(code.toCodeAttribute());
        minfo.setAccessFlags(AccessFlag.PUBLIC);
        classfile.addMethod(minfo);
      }
    View Full Code Here

    Examples of javassist.bytecode.Bytecode

        int this_class_index = cp.getThisClassInfo();
        String desc = "(" + finfo.getDescriptor() + ")V";
        MethodInfo minfo = new MethodInfo(cp, EACH_WRITE_METHOD_PREFIX
                                              + finfo.getName(), desc);
        /* local variables | target obj | each oldvalue | */
        Bytecode code = new Bytecode(cp, 6, 3);
        // aload_0
        code.addAload(0);
        // invokeinterface // enabled.getInterceptFieldCallback()
        int enabled_class_index = cp.addClassInfo(FIELD_HANDLED_TYPE_NAME);
        code.addInvokeinterface(enabled_class_index,
                                GETFIELDHANDLER_METHOD_NAME, GETFIELDHANDLER_METHOD_DESCRIPTOR,
                                1);
        // ifnonnull (label1)
        code.addOpcode(Opcode.IFNONNULL);
        code.addIndex(9);
        // aload_0
        code.addAload(0);
        // *load_1
        addTypeDependDataLoad(code, finfo.getDescriptor(), 1);
        // putfield
        code.addOpcode(Opcode.PUTFIELD);
        int base_field_index = cp.addFieldrefInfo(this_class_index, finfo
            .getName(), finfo.getDescriptor());
        code.addIndex(base_field_index);
        code.growStack(-Descriptor.dataSize(finfo.getDescriptor()));
        // return ;
        code.addOpcode(Opcode.RETURN);
        // aload_0
        code.addAload(0);
        // dup
        code.addOpcode(Opcode.DUP);
        // invokeinterface // enabled.getInterceptFieldCallback()
        code.addInvokeinterface(enabled_class_index,
                                GETFIELDHANDLER_METHOD_NAME, GETFIELDHANDLER_METHOD_DESCRIPTOR,
                                1);
        // aload_0
        code.addAload(0);
        // ldc // field name
        code.addLdc(finfo.getName());
        // aload_0
        code.addAload(0);
        // getfield // old value of the field
        code.addOpcode(Opcode.GETFIELD);
        code.addIndex(base_field_index);
        code.growStack(Descriptor.dataSize(finfo.getDescriptor()) - 1);
        // *load_1
        addTypeDependDataLoad(code, finfo.getDescriptor(), 1);
        // invokeinterface // callback.write*(..)
        addInvokeFieldHandlerMethod(classfile, code, finfo.getDescriptor(),
                                    false);
        // putfield // new value of the field
        code.addOpcode(Opcode.PUTFIELD);
        code.addIndex(base_field_index);
        code.growStack(-Descriptor.dataSize(finfo.getDescriptor()));
        // return
        code.addOpcode(Opcode.RETURN);

        minfo.setCodeAttribute(code.toCodeAttribute());
        minfo.setAccessFlags(AccessFlag.PUBLIC);
        classfile.addMethod(minfo);
      }
    View Full Code Here

    Examples of javassist.bytecode.Bytecode

            EACH_WRITE_METHOD_PREFIX+ finfo.getName(),
            writeMethodDescriptor
        );

        /* local variables | target obj | each oldvalue | */
        final Bytecode code = new Bytecode(constPool, 6, 3);
        // aload_0
        code.addAload( 0 );
        // invokeinterface : enabled.getInterceptFieldCallback()
        final int enabledClassIndex = constPool.addClassInfo( FIELD_HANDLED_TYPE_NAME );
        code.addInvokeinterface(
            enabledClassIndex,
            GETFIELDHANDLER_METHOD_NAME, GETFIELDHANDLER_METHOD_DESCRIPTOR,
            1
        );
        // ifnonnull (label1)
        code.addOpcode( Opcode.IFNONNULL );
        code.addIndex( 9 );
        // aload_0
        code.addAload( 0 );
        // *load_1
        addTypeDependDataLoad( code, finfo.getDescriptor(), 1 );
        // putfield
        code.addOpcode( Opcode.PUTFIELD );
        final int baseFieldIndex = constPool.addFieldrefInfo( thisClassInfo, finfo.getName(), finfo.getDescriptor() );
        code.addIndex( baseFieldIndex );
        code.growStack( -Descriptor.dataSize( finfo.getDescriptor() ) );
        // return ;
        code.addOpcode( Opcode.RETURN );
        // aload_0
        code.addAload( 0 );
        // dup
        code.addOpcode( Opcode.DUP );
        // invokeinterface // enabled.getInterceptFieldCallback()
        code.addInvokeinterface(
            enabledClassIndex,
            GETFIELDHANDLER_METHOD_NAME,
            GETFIELDHANDLER_METHOD_DESCRIPTOR,
            1
        );
        // aload_0
        code.addAload( 0 );
        // ldc // field name
        code.addLdc( finfo.getName() );
        // aload_0
        code.addAload( 0 );
        // getfield // old value of the field
        code.addOpcode( Opcode.GETFIELD );
        code.addIndex( baseFieldIndex );
        code.growStack( Descriptor.dataSize( finfo.getDescriptor() ) - 1 );
        // *load_1
        addTypeDependDataLoad( code, finfo.getDescriptor(), 1 );
        // invokeinterface // callback.write*(..)
        addInvokeFieldHandlerMethod( classfile, code, finfo.getDescriptor(), false );
        // putfield // new value of the field
        code.addOpcode( Opcode.PUTFIELD );
        code.addIndex( baseFieldIndex );
        code.growStack( -Descriptor.dataSize( finfo.getDescriptor() ) );
        // return
        code.addOpcode( Opcode.RETURN );

        writeMethodInfo.setCodeAttribute( code.toCodeAttribute() );
        writeMethodInfo.setAccessFlags( AccessFlag.PUBLIC );
        final CodeAttribute codeAttribute = writeMethodInfo.getCodeAttribute();
        if ( codeAttribute != null ) {
          final StackMapTable smt = MapMaker.make( classPool, writeMethodInfo );
          codeAttribute.setAttribute( smt );
    View Full Code Here

    Examples of javassist.bytecode.Bytecode

      private void addDefaultConstructor(ClassFile classfile) throws CannotCompileException {
        final ConstPool constPool = classfile.getConstPool();
        final String constructorSignature = "()V";
        final MethodInfo constructorMethodInfo = new MethodInfo( constPool, MethodInfo.nameInit, constructorSignature );

        final Bytecode code = new Bytecode( constPool, 0, 1 );
        // aload_0
        code.addAload( 0 );
        // invokespecial
        code.addInvokespecial( BulkAccessor.class.getName(), MethodInfo.nameInit, constructorSignature );
        // return
        code.addOpcode( Opcode.RETURN );

        constructorMethodInfo.setCodeAttribute( code.toCodeAttribute() );
        constructorMethodInfo.setAccessFlags( AccessFlag.PUBLIC );
        classfile.addMethod( constructorMethodInfo );
      }
    View Full Code Here

    Examples of javassist.bytecode.Bytecode

        final ConstPool constPool = classfile.getConstPool();
        final int targetBeanConstPoolIndex = constPool.addClassInfo( this.targetBean.getName() );
        final String desc = GET_SETTER_DESC;
        final MethodInfo getterMethodInfo = new MethodInfo( constPool, GENERATED_GETTER_NAME, desc );

        final Bytecode code = new Bytecode( constPool, 6, 4 );
        /* | this | bean | args | raw bean | */
        if ( getters.length >= 0 ) {
          // aload_1 // load bean
          code.addAload( 1 );
          // checkcast // cast bean
          code.addCheckcast( this.targetBean.getName() );
          // astore_3 // store bean
          code.addAstore( 3 );
          for ( int i = 0; i < getters.length; ++i ) {
            if ( getters[i] != null ) {
              final Method getter = getters[i];
              // aload_2 // args
              code.addAload( 2 );
              // iconst_i // continue to aastore
              // growing stack is 1
              code.addIconst( i );
              final Class returnType = getter.getReturnType();
              int typeIndex = -1;
              if ( returnType.isPrimitive() ) {
                typeIndex = FactoryHelper.typeIndex( returnType );
                // new
                code.addNew( FactoryHelper.wrapperTypes[typeIndex] );
                // dup
                code.addOpcode( Opcode.DUP );
              }

              // aload_3 // load the raw bean
              code.addAload( 3 );
              final String getterSignature = RuntimeSupport.makeDescriptor( getter );
              final String getterName = getter.getName();
              if ( this.targetBean.isInterface() ) {
                // invokeinterface
                code.addInvokeinterface( targetBeanConstPoolIndex, getterName, getterSignature, 1 );
              }
              else {
                // invokevirtual
                code.addInvokevirtual( targetBeanConstPoolIndex, getterName, getterSignature );
              }

              if ( typeIndex >= 0 ) {
                // is a primitive type
                // invokespecial
                code.addInvokespecial(
                    FactoryHelper.wrapperTypes[typeIndex],
                    MethodInfo.nameInit,
                    FactoryHelper.wrapperDesc[typeIndex]
                );
              }

              // aastore // args
              code.add( Opcode.AASTORE );
              code.growStack( -3 );
            }
          }
        }
        // return
        code.addOpcode( Opcode.RETURN );

        getterMethodInfo.setCodeAttribute( code.toCodeAttribute() );
        getterMethodInfo.setAccessFlags( AccessFlag.PUBLIC );
        classfile.addMethod( getterMethodInfo );
      }
    View Full Code Here

    Examples of javassist.bytecode.Bytecode

        final ConstPool constPool = classfile.getConstPool();
        final int targetTypeConstPoolIndex = constPool.addClassInfo( this.targetBean.getName() );
        final String desc = GET_SETTER_DESC;
        final MethodInfo setterMethodInfo = new MethodInfo( constPool, GENERATED_SETTER_NAME, desc );

        final Bytecode code = new Bytecode( constPool, 4, 6 );
        StackMapTable stackmap = null;
        /* | this | bean | args | i | raw bean | exception | */
        if ( setters.length > 0 ) {
          // required to exception table
          int start;
          int end;
          // iconst_0 // i
          code.addIconst( 0 );
          // istore_3 // store i
          code.addIstore( 3 );
          // aload_1 // load the bean
          code.addAload( 1 );
          // checkcast // cast the bean into a raw bean
          code.addCheckcast( this.targetBean.getName() );
          // astore 4 // store the raw bean
          code.addAstore( 4 );
          /* current stack len = 0 */
          // start region to handling exception (BulkAccessorException)
          start = code.currentPc();
          int lastIndex = 0;
          for ( int i = 0; i < setters.length; ++i ) {
            if ( setters[i] != null ) {
              final int diff = i - lastIndex;
              if ( diff > 0 ) {
                // iinc 3, 1
                code.addOpcode( Opcode.IINC );
                code.add( 3 );
                code.add( diff );
                lastIndex = i;
              }
            }
            /* current stack len = 0 */
            // aload 4 // load the raw bean
            code.addAload( 4 );
            // aload_2 // load the args
            code.addAload( 2 );
            // iconst_i
            code.addIconst( i );
            // aaload
            code.addOpcode( Opcode.AALOAD );
            // checkcast
            final Class[] setterParamTypes = setters[i].getParameterTypes();
            final Class setterParamType = setterParamTypes[0];
            if ( setterParamType.isPrimitive() ) {
              // checkcast (case of primitive type)
              // invokevirtual (case of primitive type)
              this.addUnwrapper( code, setterParamType );
            }
            else {
              // checkcast (case of reference type)
              code.addCheckcast( setterParamType.getName() );
            }
            /* current stack len = 2 */
            final String rawSetterMethodDesc = RuntimeSupport.makeDescriptor( setters[i] );
            if ( !this.targetBean.isInterface() ) {
              // invokevirtual
              code.addInvokevirtual( targetTypeConstPoolIndex, setters[i].getName(), rawSetterMethodDesc );
            }
            else {
              // invokeinterface
              final Class[] params = setters[i].getParameterTypes();
              int size;
              if ( params[0].equals( Double.TYPE ) || params[0].equals( Long.TYPE ) ) {
                size = 3;
              }
              else {
                size = 2;
              }

              code.addInvokeinterface( targetTypeConstPoolIndex, setters[i].getName(), rawSetterMethodDesc, size );
            }
          }

          // end region to handling exception (BulkAccessorException)
          end = code.currentPc();
          // return
          code.addOpcode( Opcode.RETURN );
          /* current stack len = 0 */
          // register in exception table
          final int throwableTypeIndex = constPool.addClassInfo( THROWABLE_CLASS_NAME );
          final int handlerPc = code.currentPc();
          code.addExceptionHandler( start, end, handlerPc, throwableTypeIndex );
          // astore 5 // store exception
          code.addAstore( 5 );
          // new // BulkAccessorException
          code.addNew( BULKEXCEPTION_CLASS_NAME );
          // dup
          code.addOpcode( Opcode.DUP );
          // aload 5 // load exception
          code.addAload( 5 );
          // iload_3 // i
          code.addIload( 3 );
          // invokespecial // BulkAccessorException.<init>
          final String consDesc = "(Ljava/lang/Throwable;I)V";
          code.addInvokespecial( BULKEXCEPTION_CLASS_NAME, MethodInfo.nameInit, consDesc );
          // athrow
          code.addOpcode( Opcode.ATHROW );
          final StackMapTable.Writer writer = new StackMapTable.Writer(32);
          final int[] localTags = {
              StackMapTable.OBJECT,
              StackMapTable.OBJECT,
              StackMapTable.OBJECT,
              StackMapTable.INTEGER
          };
          final int[] localData = {
              constPool.getThisClassInfo(),
              constPool.addClassInfo( "java/lang/Object" ),
              constPool.addClassInfo( "[Ljava/lang/Object;" ),
              0
          };
          final int[] stackTags = {
              StackMapTable.OBJECT
          };
          final int[] stackData = {
              throwableTypeIndex
          };
          writer.fullFrame( handlerPc, localTags, localData, stackTags, stackData );
          stackmap = writer.toStackMapTable( constPool );
        }
        else {
          // return
          code.addOpcode( Opcode.RETURN );
        }
        final CodeAttribute ca = code.toCodeAttribute();
        if ( stackmap != null ) {
          ca.setAttribute( stackmap );
        }
        setterMethodInfo.setCodeAttribute( ca );
        setterMethodInfo.setAccessFlags( AccessFlag.PUBLIC );
    View Full Code Here

    Examples of javassist.bytecode.Bytecode

            GETFIELDHANDLER_METHOD_NAME,
            GETFIELDHANDLER_METHOD_DESCRIPTOR
        );

        /* local variable | this | */
        final Bytecode code = new Bytecode( constPool, 2, 1 );
        // aload_0 // load this
        code.addAload( 0 );
        // getfield // get field "$JAVASSIST_CALLBACK" defined already
        code.addOpcode( Opcode.GETFIELD );
        final int fieldIndex = constPool.addFieldrefInfo( thisClassInfo, HANDLER_FIELD_NAME, HANDLER_FIELD_DESCRIPTOR );
        code.addIndex( fieldIndex );
        // areturn // return the value of the field
        code.addOpcode( Opcode.ARETURN );
        getterMethodInfo.setCodeAttribute( code.toCodeAttribute() );
        getterMethodInfo.setAccessFlags( AccessFlag.PUBLIC );
        final CodeAttribute codeAttribute = getterMethodInfo.getCodeAttribute();
        if ( codeAttribute != null ) {
          final StackMapTable smt = MapMaker.make( classPool, getterMethodInfo );
          codeAttribute.setAttribute( smt );
    View Full Code Here
    TOP
    Copyright © 2018 www.massapi.com. 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.