docs: NamedList<Object> getData(boolean showDebugInfo) throws IOException {
      if (dataCollector.getCollectorType()
          .equals(DataCollector.COLLECTOR_TYPE_DATA)) {
        NamedList<Object> mtasResponse = new SimpleOrderedMap<>();
        // functions
        Map<String, NamedList<Object>> functionList = new HashMap<>();
        if (functionData != null && functionData.containsKey(dataCollector)) {
          HashMap<String, MtasSolrMtasResult> functionDataItem = functionData
              .get(dataCollector);
          for (Entry<String, MtasSolrMtasResult> entry : functionDataItem
              .entrySet()) {
            MtasSolrMtasResult functionResult = entry.getValue();
            if (functionResult.dataCollector.getCollectorType()
                .equals(DataCollector.COLLECTOR_TYPE_DATA)) {
              NamedList<Object> functionData = functionResult
                  .getData(showDebugInfo);
              functionList.put(entry.getKey(), functionData);
            } else {
              throw new IOException("unexpected function collectorType "
                  + functionResult.dataCollector.getCollectorType());
            }
          }
        }
        // main result
        MtasDataItem<?, ?> dataItem = dataCollector.getResult().getData();
        if (dataItem != null) {
          mtasResponse.addAll(dataItem.rewrite(showDebugInfo));
          if (functionList.size() > 0) {
            mtasResponse.add("functions", functionList);
          }
          if ((subDataType != null) && (dataItem.getSub() != null)) {
            MtasSolrMtasResult css = new MtasSolrMtasResult(dataItem.getSub(),
                subDataType, subStatsType, subStatsItems, subDistances,
                subSortType, subSortDirection, subStart, subNumber, functionData);
            if (dataItem.getSub().getCollectorType()
                .equals(DataCollector.COLLECTOR_TYPE_LIST)) {
              mtasResponse.add(dataItem.getSub().getCollectorType(),
                  css.getNamedList(showDebugInfo));
            } else if (dataItem.getSub().getCollectorType()
                .equals(DataCollector.COLLECTOR_TYPE_DATA)) {
              mtasResponse.add(dataItem.getSub().getCollectorType(),
                  css.getData(showDebugInfo));
            }
          }
        }
        return mtasResponse;
      } else {
        throw new IOException(
            "only allowed for " + DataCollector.COLLECTOR_TYPE_DATA);
      }
    }