| Index: lib/src/summary.dart
|
| diff --git a/lib/src/summary.dart b/lib/src/summary.dart
|
| index 7e2307d8d338d71d050b350c2cec1b51fc026b6e..3678a3fbcaa7ce227ede88a063a814ad0594492e 100644
|
| --- a/lib/src/summary.dart
|
| +++ b/lib/src/summary.dart
|
| @@ -5,6 +5,9 @@
|
| /// Summary of error messages produced by a `SummaryReporter`.
|
| library dev_compiler.src.summary;
|
|
|
| +import 'dart:collection' show HashSet;
|
| +import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
|
| +import 'package:analyzer/src/generated/source.dart' show Source;
|
| import 'package:source_span/source_span.dart';
|
|
|
| /// Summary information computed by the DDC checker.
|
| @@ -94,11 +97,23 @@ class LibrarySummary implements IndividualSummary {
|
| /// All messages collected for the library.
|
| final List<MessageSummary> messages;
|
|
|
| - /// Total lines of code (including all parts of the library).
|
| - int lines;
|
| + /// All parts of this library. Only used for computing _lines.
|
| + final _uris = new HashSet<Uri>();
|
|
|
| - LibrarySummary(this.name, [List<MessageSummary> messages, this.lines = 0])
|
| - : messages = messages == null ? <MessageSummary>[] : messages;
|
| + int _lines;
|
| +
|
| + LibrarySummary(this.name, {List<MessageSummary> messages, lines})
|
| + : messages = messages == null ? <MessageSummary>[] : messages,
|
| + _lines = lines == null ? lines : 0;
|
| +
|
| + void clear() {
|
| + _uris.clear();
|
| + _lines = 0;
|
| + messages.clear();
|
| + }
|
| +
|
| + /// Total lines of code (including all parts of the library).
|
| + int get lines => _lines;
|
|
|
| Map toJsonMap() => {
|
| 'library_name': name,
|
| @@ -106,11 +121,24 @@ class LibrarySummary implements IndividualSummary {
|
| 'lines': lines,
|
| };
|
|
|
| + void countSourceLines(AnalysisContext context, Source source) {
|
| + if (_uris.add(source.uri)) {
|
| + // TODO(jmesserly): parsing is serious overkill for this.
|
| + // Should be cached, but still.
|
| + // On the other hand, if we are going to parse, we could get a much better
|
| + // source lines of code estimate by excluding things like comments,
|
| + // blank lines, and closing braces.
|
| + var unit = context.parseCompilationUnit(source);
|
| + _lines += unit.lineInfo.getLocation(unit.endToken.end).lineNumber;
|
| + }
|
| + }
|
| +
|
| void accept(SummaryVisitor visitor) => visitor.visitLibrary(this);
|
|
|
| static LibrarySummary parse(Map json) => new LibrarySummary(
|
| - json['library_name'], json['messages'].map(MessageSummary.parse).toList(),
|
| - json['lines']);
|
| + json['library_name'],
|
| + messages: json['messages'].map(MessageSummary.parse).toList(),
|
| + lines: json['lines']);
|
| }
|
|
|
| /// A summary at the level of an HTML file.
|
|
|