docs: @SuppressWarnings("unchecked")
    private static void registerValue(BytesRef term,
        ComponentTermVector termVector, TermvectorNumberFull number,
        String[] mutableKey) throws IOException {
      if (number.docNumber > 0) {
        if (mutableKey[0] == null) {
          mutableKey[0] = MtasToken.getPostfixFromValue(term);
        }
        MtasDataCollector<Long, ?> dataCollector = (MtasDataCollector<Long, ?>) termVector.subComponentFunction.dataCollector;
        long[] valuesLong = new long[number.docNumber];
        for (int i = 0; i < number.docNumber; i++) {
          try {
            valuesLong[i] = termVector.subComponentFunction.parserFunction
                .getValueLong(new long[] { number.args[i] }, number.positions[i]);
          } catch (IOException e) {
            log.debug(e);
            dataCollector.error(mutableKey[0], e.getMessage());
          }
        }
        if (!termVector.subComponentFunction.statsType
            .equals(CodecUtil.STATS_BASIC)) {
          dataCollector.add(mutableKey[0], valuesLong, valuesLong.length);
        }
        for (SubComponentFunction function : termVector.functions) {
          if (!function.parserFunction.sumRule()
              || function.parserFunction.needPositions()
              || !function.statsType.equals(CodecUtil.STATS_BASIC)) {
            if (function.dataType.equals(CodecUtil.DATA_TYPE_LONG)) {
              valuesLong = new long[number.docNumber];
              for (int i = 0; i < number.docNumber; i++) {
                try {
                  valuesLong[i] = function.parserFunction.getValueLong(
                      new long[] { number.args[i] }, number.positions[i]);
                } catch (IOException e) {
                  log.debug(e);
                  function.dataCollector.error(mutableKey[0], e.getMessage());
                }
              }
              function.dataCollector.add(mutableKey[0], valuesLong,
                  valuesLong.length);
            } else if (function.dataType.equals(CodecUtil.DATA_TYPE_DOUBLE)) {
              double[] valuesDouble = new double[number.docNumber];
              for (int i = 0; i < number.docNumber; i++) {
                try {
                  valuesDouble[i] = function.parserFunction.getValueDouble(
                      new long[] { number.args[i] }, number.positions[i]);
                } catch (IOException e) {
                  log.debug(e);
                  function.dataCollector.error(mutableKey[0], e.getMessage());
                }
              }
              function.dataCollector.add(mutableKey[0], valuesDouble,
                  valuesDouble.length);
            }
          }
        }
      }
    }