@Override
  public DataValue binaryOperation(AbstractInsnNode insn, DataValue value1, DataValue value2) {
    return switch (insn.getOpcode()) {
      case Opcodes.LALOAD, Opcodes.DALOAD, Opcodes.LADD, Opcodes.DADD, Opcodes.LSUB, Opcodes.DSUB, Opcodes.LMUL,
        Opcodes.DMUL, Opcodes.LDIV, Opcodes.DDIV, Opcodes.LREM, Opcodes.LSHL, Opcodes.LSHR, Opcodes.LUSHR,
        Opcodes.LAND, Opcodes.LOR, Opcodes.LXOR -> DataValue.UnknownDataValue2;
      case Opcodes.PUTFIELD -> {
        final EffectQuantum effectQuantum = getChangeQuantum(value1);
        int insnIndex = methodNode.instructions.indexOf(insn);
        effects[insnIndex] = effectQuantum;
        yield DataValue.UnknownDataValue1;
      }
      default -> DataValue.UnknownDataValue1;
    };
  }
@Override
  public DataValue binaryOperation(AbstractInsnNode insn, DataValue value1, DataValue value2)