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());
}
}