in build_runner/lib/src/watcher/collect_changes.dart [13:53]
Map<AssetId, ChangeType> collectChanges(List<List<AssetChange>> changes) {
var changeMap = <AssetId, ChangeType>{};
for (var change in changes.expand((l) => l)) {
var originalChangeType = changeMap[change.id];
if (originalChangeType != null) {
switch (originalChangeType) {
case ChangeType.ADD:
if (change.type == ChangeType.REMOVE) {
// ADD followed by REMOVE, just remove the change.
changeMap.remove(change.id);
}
break;
case ChangeType.REMOVE:
if (change.type == ChangeType.ADD) {
// REMOVE followed by ADD, convert to a MODIFY
changeMap[change.id] = ChangeType.MODIFY;
} else if (change.type == ChangeType.MODIFY) {
// REMOVE followed by MODIFY isn't sensible, just throw.
throw StateError(
'Internal error, got REMOVE event followed by MODIFY event for '
'${change.id}.');
}
break;
case ChangeType.MODIFY:
if (change.type == ChangeType.REMOVE) {
// MODIFY followed by REMOVE, convert to REMOVE
changeMap[change.id] = change.type;
} else if (change.type == ChangeType.ADD) {
// MODIFY followed by ADD isn't sensible, just throw.
throw StateError(
'Internal error, got MODIFY event followed by ADD event for '
'${change.id}.');
}
break;
}
} else {
changeMap[change.id] = change.type;
}
}
return changeMap;
}