ctor.visitCode(); ctor.visitInsn(Opcodes.RETURN); ctor.visitEnd();
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; } }
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; }
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; }
public ParNestMethodTransformer(ClassVisitor cv, File originalClassFile) { super(ASM4, cv); classFile = originalClassFile; atomicClInit = new MethodNode(ACC_STATIC, "<clinit>", "()V", null, null); atomicClInit.visitCode(); }
@Override public void visitCode() { super.visitCode(); Label l0 = new Label(); visitLabel(l0); visitVarInsn(Opcodes.ALOAD, 0); this.visitMethodInsn(Opcodes.INVOKESTATIC, "logisticspipes/asm/LogisticsASMHookClass", "invalidate", "(Lnet/minecraft/tileentity/TileEntity;)V"); } };
@Override public void visitCode() { super.visitCode(); Label l0 = new Label(); visitLabel(l0); visitVarInsn(Opcodes.ALOAD, 0); this.visitMethodInsn(Opcodes.INVOKESTATIC, "logisticspipes/asm/LogisticsASMHookClass", "validate", "(Lnet/minecraft/tileentity/TileEntity;)V"); } };
@Override public void visitCode() { super.visitCode(); Label l = new Label(); visitLabel(l); visitVarInsn(Opcodes.ALOAD, 0); visitVarInsn(Opcodes.ALOAD, 1); this.visitMethodInsn(Opcodes.INVOKESTATIC, "logisticspipes/asm/td/ThermalDynamicsHooks", "travelingItemToNBT", "(Lcofh/thermaldynamics/duct/item/TravelingItem;Lnet/minecraft/nbt/NBTTagCompound;)V", false); } };
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; }
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; } }
public static MethodNode generateGetter(String className, String methodName, String fieldName, String fieldType) { MethodNode mn = new MethodNode(ACC_PUBLIC, methodName, "()" + fieldType, null, null); mn.visitCode(); mn.visitVarInsn(ALOAD, 0); mn.visitFieldInsn(GETFIELD, className, fieldName, fieldType); int opCode; if (fieldType.equals("I") || fieldType.equals("Z")) { opCode = IRETURN; } else if (fieldType.equals("L")) { opCode = LRETURN; } else if (fieldType.equals("F")) { opCode = FRETURN; } else if (fieldType.equals("D")) { opCode = DRETURN; } else { opCode = ARETURN; } mn.visitInsn(opCode); mn.visitMaxs(1, 1); mn.visitEnd(); return mn; } }
public static MethodNode generateSetter(String className, String methodName, String fieldName, String fieldType) { MethodNode mn = new MethodNode(ACC_PUBLIC, methodName, "(" + fieldType + ")V", null, null); mn.visitCode(); mn.visitVarInsn(ALOAD, 0); int opCode; if (fieldType.equals("I") || fieldType.equals("Z")) { opCode = ILOAD; } else if (fieldType.equals("L")) { opCode = LLOAD; } else if (fieldType.equals("F")) { opCode = FLOAD; } else if (fieldType.equals("D")) { opCode = DLOAD; } else { opCode = ALOAD; } mn.visitVarInsn(opCode, 1); mn.visitFieldInsn(PUTFIELD, className, fieldName, fieldType); mn.visitInsn(RETURN); mn.visitMaxs(2, 2); mn.visitEnd(); return mn; }
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; }
@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); } };
ctor.visitCode(); ctor.visitInsn(RETURN); ctor.visitEnd();
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; }
private MethodNode generateAttackOffhandMethod() { MethodNode mv = new MethodNode(ACC_PUBLIC, "attackTargetEntityWithCurrentOffItem", "(L" + entityClassName + ";)V", null, null); mv.visitCode(); Label l0 = new Label(); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESTATIC, UTILITY_CLASS, "attackTargetEntityWithCurrentOffItem", "(L" + entityPlayerClassName + ";L" + entityClassName + ";)V"); Label l1 = new Label(); mv.visitLabel(l1); mv.visitInsn(RETURN); Label l2 = new Label(); mv.visitLabel(l2); mv.visitLocalVariable("this", "L" + entityPlayerClassName + ";", null, l0, l2, 0); mv.visitLocalVariable("target", "L" + entityClassName + ";", null, l0, l2, 1); mv.visitMaxs(2, 2); mv.visitEnd(); return mv; }
null, null); method.visitCode(); int numberOfStrings = strings.size(); if (numberOfStrings <= 5) {
private MethodNode generateIsBlockingWithShield() { MethodNode mv = new MethodNode(ACC_PUBLIC, "isBlockingWithShield", "()Z", null, null); mv.visitCode(); Label l0 = new Label(); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESTATIC, UTILITY_CLASS, "canBlockWithShield", "(L" + entityPlayerClassName + ";)Z"); Label l1 = new Label(); mv.visitJumpInsn(IFEQ, l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, entityPlayerClassName, "isShielding", "Z"); mv.visitJumpInsn(IFEQ, l1); mv.visitInsn(ICONST_1); Label l2 = new Label(); mv.visitJumpInsn(GOTO, l2); mv.visitLabel(l1); mv.visitFrame(F_SAME, 0, null, 0, null); mv.visitInsn(ICONST_0); mv.visitLabel(l2); mv.visitFrame(F_SAME1, 0, null, 1, new Object[]{INTEGER}); mv.visitInsn(IRETURN); Label l3 = new Label(); mv.visitLabel(l3); mv.visitLocalVariable("this", "L" + entityPlayerClassName + ";", null, l0, l3, 0); mv.visitMaxs(1, 1); mv.visitEnd(); return mv; }
private MethodNode generateSetBlockingWithShield() { MethodNode mv = new MethodNode(ACC_PUBLIC, "setBlockingWithShield", "(Z)V", null, null); mv.visitCode(); Label l0 = new Label(); mv.visitLabel(l0);