private static void applyChangesInfoOnPreviousData()

in android/plugins/litho/src/main/java/com/facebook/flipper/plugins/sections/ChangesetDebug.java [366:465]


  private static void applyChangesInfoOnPreviousData(
      List<DataModelChangeInfo> dataInfos, ChangesInfo changesInfo, FlipperArray.Builder tree) {
    final List<Change> changes = changesInfo.getAllChanges();

    for (int i = 0; i < changes.size(); i++) {
      final Change change = changes.get(i);
      int index = change.getIndex();

      switch (change.getType()) {
        case Change.INSERT:
          {
            DataModelChangeInfo dataInfo = new DataModelChangeInfo();
            if (change.getNextData() != null) {
              dataInfo.model = change.getNextData().get(0);
            } else {
              dataInfo.model = getNextDataFromChange(change);
            }
            dataInfo.sectionKey =
                (String) change.getRenderInfo().getDebugInfo("section_global_key");

            dataInfo.operation = Change.INSERT;

            int addToPosition = getPositionWithChangesApplied(dataInfos, index);
            dataInfos.add(addToPosition, dataInfo);
            break;
          }
        case Change.INSERT_RANGE:
          {
            int addToPosition = getPositionWithChangesApplied(dataInfos, index);
            for (int item = 0; item < change.getCount(); item++) {
              DataModelChangeInfo dataInfo = new DataModelChangeInfo();
              if (change.getNextData() != null) {
                dataInfo.model = change.getNextData().get(item);
              } else {
                dataInfo.model = getNextDataFromChange(change);
              }
              dataInfo.operation = Change.INSERT_RANGE;
              dataInfo.sectionKey =
                  (String) change.getRenderInfos().get(item).getDebugInfo("section_global_key");
              dataInfos.add(addToPosition + item, dataInfo);
            }
            break;
          }
        case Change.DELETE:
          {
            int addToPosition = getPositionWithChangesApplied(dataInfos, index);
            DataModelChangeInfo dataInfo = dataInfos.get(addToPosition);
            dataInfo.operation = Change.DELETE;
            break;
          }
        case Change.DELETE_RANGE:
          {
            int addToPosition = getPositionWithChangesApplied(dataInfos, index);
            for (int del = addToPosition; del < addToPosition + change.getCount(); del++) {
              dataInfos.get(del).operation = Change.DELETE_RANGE;
            }
            break;
          }
        case Change.UPDATE:
          {
            int getPosition = getPositionWithChangesApplied(dataInfos, index);
            DataModelChangeInfo dataInfo = dataInfos.get(getPosition);
            dataInfo.operation = Change.UPDATE;
            dataInfo.model = getNextDataFromChange(change);
            break;
          }
        case Change.UPDATE_RANGE:
          {
            for (int updateIndex = index; updateIndex < index + change.getCount(); updateIndex++) {
              int getPosition = getPositionWithChangesApplied(dataInfos, updateIndex);
              DataModelChangeInfo dataInfo = dataInfos.get(getPosition);
              dataInfo.operation = Change.UPDATE_RANGE;
              dataInfo.model = getNextDataFromChange(change);
            }
            break;
          }
        default:
          break;
      }
    }

    for (int i = 0; i < dataInfos.size(); i++) {

      DataModelChangeInfo dataInfo = dataInfos.get(i);
      final FlipperObject.Builder dataObject = new FlipperObject.Builder();

      String name = dataInfo.model == null ? "N/A" : dataInfo.model.toString();
      int operation = dataInfo.operation;

      dataObject.put("identifier", name);
      dataObject.put("name", name);
      dataObject.put("parent", dataInfo.sectionKey);
      dataObject.put("unchanged", operation == DataModelChangeInfo.UNCHANGED);
      dataObject.put("inserted", operation == Change.INSERT || operation == Change.INSERT_RANGE);
      dataObject.put("removed", operation == Change.DELETE || operation == Change.DELETE_RANGE);
      dataObject.put("updated", operation == Change.UPDATE || operation == Change.UPDATE_RANGE);
      dataObject.put("isDataModel", true);
      tree.put(dataObject.build());
    }
  }