org.objectweb.asm.tree.MethodNode.visitVarInsn()方法的使用及代码示例

x33g5p2x  于2022-01-25 转载在 其他  
字(10.9k)|赞(0)|评价(0)|浏览(61)

本文整理了Java中org.objectweb.asm.tree.MethodNode.visitVarInsn()方法的一些代码示例,展示了MethodNode.visitVarInsn()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。MethodNode.visitVarInsn()方法的具体详情如下:
包路径:org.objectweb.asm.tree.MethodNode
类名称:MethodNode
方法名:visitVarInsn

MethodNode.visitVarInsn介绍

暂无

代码示例

代码示例来源:origin: pxb1988/dex2jar

private void visitOP0(int op){
if(op>=26&&op<=45){    // xload_y
    int x=op-26;
    mn.visitVarInsn(ILOAD+x/4,x%4);
    }else if(op>=59&&op<=78){    // xstore_y
         int x=op-26;
         mn.visitVarInsn(ISTORE+x/4,x%4);
    }else{
  mn.visitInsn(op);
  }
}
private void visitIOP(int op, int a){

代码示例来源:origin: pxb1988/dex2jar

private void visitIOP(int op, int a){
   // xstore
   // xload
   if(op>=21&&op<=58){
   mn.visitVarInsn(op,a);
   }  else {
   // xipush
   mn.visitIntInsn(op,a);
   }
}
private void visitJOP(int op, Label label){

代码示例来源:origin: lenskit/lenskit

private static MethodNode generateBeanConstructor(Class<? extends AttrMethod> superclass) {
  MethodNode ctor = new MethodNode();
  ctor.access = ACC_PUBLIC;
  ctor.desc = getMethodDescriptor(VOID_TYPE, getType(TypedName.class));
  ctor.name = "<init>";
  ctor.exceptions = Collections.emptyList();
  ctor.maxLocals = 2;
  ctor.maxStack = 2;
  // load instance ('this')
  ctor.visitVarInsn(ALOAD, 0);
  // load the attribute
  ctor.visitVarInsn(ALOAD, 1);
  // invoke superclass constructor with attribute
  ctor.visitMethodInsn(INVOKESPECIAL, getInternalName(superclass),
             "<init>", ctor.desc, false);
  ctor.visitInsn(RETURN);
  return ctor;
}

代码示例来源:origin: lenskit/lenskit

private static MethodNode generateGetterConstructor() {
  MethodNode cn = new MethodNode();
  cn.name = "<init>";
  cn.desc = "()V";
  cn.access = ACC_PUBLIC;
  cn.exceptions = Collections.emptyList();
  cn.maxStack = 1;
  cn.maxLocals = 1;
  // load the instance
  cn.visitVarInsn(ALOAD, 0);
  // call superclass constructor
  cn.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(BeanAttributeGetter.class),
            "<init>", "()V", false);
  cn.visitInsn(RETURN);
  return cn;
}

代码示例来源:origin: lenskit/lenskit

private static MethodNode generateLongSetter(Class<? extends AbstractBeanEntityBuilder> type, Method smethod) {
  MethodNode setter = new MethodNode();
  setter.access = ACC_PUBLIC;
  setter.desc = getMethodDescriptor(VOID_TYPE,
                   getType(AbstractBeanEntityBuilder.class),
                   getType(long.class));
  setter.name = "set";
  setter.exceptions = Collections.emptyList();
  setter.maxLocals = 4;
  setter.maxStack = 3;
  // load target object
  setter.visitVarInsn(ALOAD, 1);
  // cast target object
  setter.visitTypeInsn(CHECKCAST, getInternalName(type));
  // load attribute value
  setter.visitVarInsn(LLOAD, 2);
  // call real setter
  setter.visitMethodInsn(INVOKEVIRTUAL, getInternalName(type),
              smethod.getName(), getMethodDescriptor(smethod),
              false);
  setter.visitInsn(RETURN);
  return setter;
}

代码示例来源:origin: lenskit/lenskit

private static MethodNode generateDoubleSetter(Class<? extends AbstractBeanEntityBuilder> type, Method smethod) {
  MethodNode setter = new MethodNode();
  setter.access = ACC_PUBLIC;
  setter.desc = getMethodDescriptor(VOID_TYPE,
                   getType(AbstractBeanEntityBuilder.class),
                   getType(double.class));
  setter.name = "set";
  setter.exceptions = Collections.emptyList();
  setter.maxLocals = 4;
  setter.maxStack = 3;
  // load target object
  setter.visitVarInsn(ALOAD, 1);
  // cast target object
  setter.visitTypeInsn(CHECKCAST, getInternalName(type));
  // load attribute value
  setter.visitVarInsn(DLOAD, 2);
  // call real setter
  setter.visitMethodInsn(INVOKEVIRTUAL, getInternalName(type),
              smethod.getName(), getMethodDescriptor(smethod),
              false);
  setter.visitInsn(RETURN);
  return setter;
}

代码示例来源:origin: lenskit/lenskit

private static MethodNode generateSetter(Class<? extends AbstractBeanEntityBuilder> type, Method smethod) {
  MethodNode setter = new MethodNode();
  setter.access = ACC_PUBLIC;
  setter.desc = getMethodDescriptor(VOID_TYPE,
                   getType(AbstractBeanEntityBuilder.class),
                   getType(Object.class));
  setter.name = "set";
  setter.exceptions = Collections.emptyList();
  setter.maxLocals = 3;
  setter.maxStack = 2;
  // load target object
  setter.visitVarInsn(ALOAD, 1);
  // cast target object
  setter.visitTypeInsn(CHECKCAST, getInternalName(type));
  // load attribute value
  setter.visitVarInsn(ALOAD, 2);
  // convert attribute value if necessary
  setter.maxStack += CGUtils.adaptToType(setter, smethod.getParameterTypes()[0]);
  // call real setter
  setter.visitMethodInsn(INVOKEVIRTUAL, getInternalName(type),
              smethod.getName(), getMethodDescriptor(smethod),
              false);
  setter.visitInsn(RETURN);
  return setter;
}

代码示例来源:origin: lenskit/lenskit

private static MethodNode generateLongGetterMethod(Class<? extends AbstractBeanEntity> type, Method getter) {
  MethodNode gn = new MethodNode();
  gn.name = "getLong";
  gn.desc = Type.getMethodDescriptor(Type.LONG_TYPE, Type.getType(AbstractBeanEntity.class));
  gn.access = ACC_PUBLIC;
  gn.exceptions = Collections.emptyList();
  gn.maxLocals = 2;
  gn.maxStack = 2;
  gn.visitCode();
  gn.visitVarInsn(ALOAD, 1);
  gn.visitTypeInsn(CHECKCAST, Type.getInternalName(type));
  gn.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(type),
            getter.getName(), Type.getMethodDescriptor(getter), false);
  gn.visitInsn(LRETURN);
  return gn;
}

代码示例来源:origin: lenskit/lenskit

private static MethodNode generateDoubleGetterMethod(Class<? extends AbstractBeanEntity> type, Method getter) {
    MethodNode gn = new MethodNode();
    gn.name = "getDouble";
    gn.desc = Type.getMethodDescriptor(Type.DOUBLE_TYPE, Type.getType(AbstractBeanEntity.class));
    gn.access = ACC_PUBLIC;
    gn.exceptions = Collections.emptyList();
    gn.maxLocals = 2;
    gn.maxStack = 2;
    gn.visitCode();
    gn.visitVarInsn(ALOAD, 1);
    gn.visitTypeInsn(CHECKCAST, Type.getInternalName(type));
    gn.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(type),
              getter.getName(), Type.getMethodDescriptor(getter), false);
    gn.visitInsn(DRETURN);
    return gn;
  }
}

代码示例来源:origin: lenskit/lenskit

private static MethodNode generateGetterMethod(Class<? extends AbstractBeanEntity> type, Method getter) {
  MethodNode gn = new MethodNode();
  gn.name = "get";
  gn.desc = Type.getMethodDescriptor(Type.getType(Object.class),
                    Type.getType(AbstractBeanEntity.class));
  gn.access = ACC_PUBLIC;
  gn.exceptions = Collections.emptyList();
  Type rt = Type.getReturnType(getter);
  gn.maxLocals = 2;
  gn.maxStack = 1 + rt.getSize();
  gn.visitCode();
  // load the target object from parameter
  gn.visitVarInsn(ALOAD, 1);
  // cast to target object type
  gn.visitTypeInsn(CHECKCAST, Type.getInternalName(type));
  // call target object method
  gn.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(type),
            getter.getName(), Type.getMethodDescriptor(getter), false);
  // convert from primitive to object if necessary
  CGUtils.adaptFromType(gn, getter.getReturnType());
  gn.visitInsn(ARETURN);
  return gn;
}

代码示例来源:origin: lenskit/lenskit

if (cmethod != null) {
  clearer.visitVarInsn(ALOAD, 1);
} else if (!smethod.getParameterTypes()[0].isPrimitive()) {
  clearer.visitVarInsn(ALOAD, 1);
  clearer.visitTypeInsn(CHECKCAST, getInternalName(type));

代码示例来源:origin: dragome/dragome-sdk

public void visitVarInsn(int opcode, int var)
{
  super.visitVarInsn(opcode, var);
  if (opcode == ALOAD)
  {
    //store it for reuse for Method.invoke
    _variables.add(var);
  }
}

代码示例来源:origin: RS485/LogisticsPipes

@Override
public void visitInsn(int opcode) {
  if (opcode == Opcodes.ARETURN) {
    super.visitVarInsn(Opcodes.ALOAD, 1);
    super.visitMethodInsn(Opcodes.INVOKESTATIC, "logisticspipes/proxy/cc/LPASMHookCC", "onCCWrappedILuaObject", "(Lorg/luaj/vm2/LuaTable;Ldan200/computercraft/api/lua/ILuaObject;)Lorg/luaj/vm2/LuaTable;");
  }
  super.visitInsn(opcode);
}

代码示例来源:origin: org.lenskit/lenskit-core

private static MethodNode generateGetterConstructor() {
  MethodNode cn = new MethodNode();
  cn.name = "<init>";
  cn.desc = "()V";
  cn.access = ACC_PUBLIC;
  cn.exceptions = Collections.emptyList();
  cn.maxStack = 1;
  cn.maxLocals = 1;
  // load the instance
  cn.visitVarInsn(ALOAD, 0);
  // call superclass constructor
  cn.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(BeanAttributeGetter.class),
            "<init>", "()V", false);
  cn.visitInsn(RETURN);
  return cn;
}

代码示例来源:origin: RS485/LogisticsPipes

@Override
  public void visitVarInsn(int opcode, int var) {
    super.visitVarInsn(opcode, var);
    if(watchForHandling) {
      watchForHandling = false;
      Label l = new Label();
      visitLabel(l);
      visitVarInsn(Opcodes.ALOAD, var);
      visitMethodInsn(Opcodes.INVOKESTATIC, "logisticspipes/asm/ParamProfiler", "handleException", "(Ljava/lang/Throwable;)V", false);
    }
  }
};

代码示例来源:origin: org.lenskit/lenskit-core

private static MethodNode generateLongGetterMethod(Class<? extends AbstractBeanEntity> type, Method getter) {
  MethodNode gn = new MethodNode();
  gn.name = "getLong";
  gn.desc = Type.getMethodDescriptor(Type.LONG_TYPE, Type.getType(AbstractBeanEntity.class));
  gn.access = ACC_PUBLIC;
  gn.exceptions = Collections.emptyList();
  gn.maxLocals = 2;
  gn.maxStack = 2;
  gn.visitCode();
  gn.visitVarInsn(ALOAD, 1);
  gn.visitTypeInsn(CHECKCAST, Type.getInternalName(type));
  gn.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(type),
            getter.getName(), Type.getMethodDescriptor(getter), false);
  gn.visitInsn(LRETURN);
  return gn;
}

代码示例来源:origin: RS485/LogisticsPipes

@Override
  public void visitCode() {
    super.visitCode();
    Label l0 = new Label();
    super.visitLabel(l0);
    super.visitVarInsn(Opcodes.ALOAD, 1);
    super.visitMethodInsn(Opcodes.INVOKESTATIC, "logisticspipes/proxy/cc/LPASMHookCC", "handleCCWrappedILuaObject", "(Ldan200/computercraft/api/lua/ILuaObject;)Z");
    Label l1 = new Label();
    super.visitJumpInsn(Opcodes.IFEQ, l1);
    Label l2 = new Label();
    super.visitLabel(l2);
    super.visitVarInsn(Opcodes.ALOAD, 1);
    super.visitMethodInsn(Opcodes.INVOKESTATIC, "logisticspipes/proxy/cc/LPASMHookCC", "returnCCWrappedILuaObject", "(Ldan200/computercraft/api/lua/ILuaObject;)Lorg/luaj/vm2/LuaTable;");
    super.visitInsn(Opcodes.ARETURN);
    super.visitLabel(l1);
  }
};

代码示例来源:origin: org.multiverse/multiverse-alpha-unborn

public MethodNode createGetTranlocalMethod() {
  MethodNode m = new MethodNode(
      ACC_PUBLIC + ACC_SYNTHETIC,
      "getTranlocal",
      format("()%s", getDescriptor(AlphaTranlocal.class)),
      null,
      new String[]{});
  m.visitVarInsn(ALOAD, 0);
  m.visitFieldInsn(GETFIELD, tranlocalSnapshotName, "___tranlocal", internalToDesc(tranlocalName));
  m.visitInsn(ARETURN);
  m.visitMaxs(0, 0);
  m.visitEnd();
  return m;
}

代码示例来源:origin: org.multiverse/multiverse-alpha-unborn

private Object createOpenForWriteMethod() {
  String desc = "()" + Type.getDescriptor(AlphaTranlocal.class);
  MethodNode m = new MethodNode(
      ACC_PUBLIC + ACC_SYNTHETIC,
      "openForWrite",
      desc,
      null,
      new String[]{});
  m.visitTypeInsn(NEW, tranlocalName);
  m.visitInsn(DUP);
  m.visitVarInsn(ALOAD, 0);
  m.visitMethodInsn(INVOKESPECIAL, tranlocalName, "<init>", format("(%s)V", internalToDesc(tranlocalName)));
  m.visitInsn(ARETURN);
  return m;
}

代码示例来源:origin: Mine-and-blade-admin/Battlegear2

private MethodNode generateIsBattleMode() {
  MethodNode mv = new MethodNode(ACC_PUBLIC, "isBattlemode", "()Z", null, null);
  mv.visitCode();
  Label l0 = new Label();
  mv.visitLabel(l0);
  mv.visitVarInsn(ALOAD, 0);
  mv.visitMethodInsn(INVOKESTATIC, UTILITY_CLASS, "isPlayerInBattlemode", "(L" + entityPlayerClassName + ";)Z");
  mv.visitInsn(IRETURN);
  Label l1 = new Label();
  mv.visitLabel(l1);
  mv.visitLocalVariable("this", "L" + entityPlayerClassName + ";", null, l0, l1, 0);
  mv.visitMaxs(1, 1);
  mv.visitEnd();
  return mv;
}

相关文章