code: Map<SnapshotIdentifier, CdoSnapshot> calculate(List<CdoSnapshot> snapshots) {
          Map<SnapshotIdentifier, CdoSnapshot> previousSnapshots = new HashMap<>();
          populatePreviousSnapshotsWithSnapshots(previousSnapshots, snapshots);
          List<CdoSnapshot> missingPreviousSnapshots = getMissingPreviousSnapshots(snapshots, previousSnapshots);
          populatePreviousSnapshotsWithSnapshots(previousSnapshots, missingPreviousSnapshots);
          return previousSnapshots;
      }
docs: Returns a Map from snapshot.id to snapshot with this id.
  The Map contains entries for all previous snapshots.
  I.e, for each snapshot S from a given list, there is a map entry for S.id.previous()