DiffReviewDocument constructor

DiffReviewDocument({
  1. required String id,
  2. required String revision,
  3. required Iterable<DiffFile> files,
})

Snapshots parsed files and builds a source index independent of layout.

Implementation

DiffReviewDocument({
  required this.id,
  required this.revision,
  required Iterable<DiffFile> files,
}) : files = List.unmodifiable(
       files.map(
         (file) => DiffFile(
           oldPath: file.oldPath,
           newPath: file.newPath,
           lines: List.unmodifiable(file.lines),
         ),
       ),
     ) {
  for (final file in this.files) {
    for (final line in file.lines) {
      if (line.type != DiffLineType.context &&
          line.type != DiffLineType.added &&
          line.type != DiffLineType.removed) {
        continue;
      }
      final left = line.oldLineNumber == null
          ? null
          : DiffCommentLineKey(
              path: file.oldPath,
              line: line.oldLineNumber!,
              side: DiffCommentSide.left,
            );
      final right = line.newLineNumber == null
          ? null
          : DiffCommentLineKey(
              path: file.newPath,
              line: line.newLineNumber!,
              side: DiffCommentSide.right,
            );
      if (left == null && right == null) continue;
      _rows.add((left: left, right: right));
      if (left != null) _keys.add(left);
      if (right != null) _keys.add(right);
      if (left != null && right != null) {
        _counterparts[left] = right;
        _counterparts[right] = left;
      }
    }
  }
  for (final key in _keys) {
    _keysByFileSide.putIfAbsent((key.path, key.side), () => []).add(key);
  }
  for (final keys in _keysByFileSide.values) {
    keys.sort((a, b) => a.line.compareTo(b.line));
  }
}