Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Unified Diff: lib/src/report.dart

Issue 1322333003: DDC: mostly incremental compilation, fixes #223 (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: rebase Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: lib/src/report.dart
diff --git a/lib/src/report.dart b/lib/src/report.dart
index 6c74fe1ee2c435217d4c3273bac07f1a8ecb2238..3f164c0f263187c02b9f866f44055441f62467fd 100644
--- a/lib/src/report.dart
+++ b/lib/src/report.dart
@@ -6,6 +6,7 @@
library dev_compiler.src.report;
import 'dart:math' show max;
+import 'dart:io';
import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
import 'package:analyzer/src/generated/error.dart';
@@ -20,13 +21,18 @@ final _checkerLogger = new Logger('dev_compiler.checker');
/// Collects errors, and then sorts them and sends them
class ErrorCollector implements AnalysisErrorListener {
+ final AnalysisContext context;
final AnalysisErrorListener listener;
final List<AnalysisError> _errors = [];
+ final bool saveMessages;
+ final Level logLevel;
- ErrorCollector(this.listener);
+ ErrorCollector(this.context, AnalysisErrorListener listener, this.logLevel,
+ {this.saveMessages: false})
+ : listener = listener ?? AnalysisErrorListener.NULL_LISTENER;
/// Flushes errors to the log. Until this is called, errors are buffered.
- void flush() {
+ void flush(String messagePath) {
// TODO(jmesserly): this code was taken from analyzer_cli.
// sort errors
_errors.sort((AnalysisError error1, AnalysisError error2) {
@@ -49,7 +55,27 @@ class ErrorCollector implements AnalysisErrorListener {
return error1.message.compareTo(error2.message);
});
- _errors.forEach(listener.onError);
+ if (saveMessages && messagePath != null) {
+ var text = new StringBuffer();
+ for (var e in _errors) {
+ // TODO(jmesserly): don't use log level for this.
+ var level = _severityToLevel[_strongModeErrorSeverity(e)];
+ if (level >= logLevel) {
+ text
+ ..write(level.name.toLowerCase())
+ ..write(': ')
+ ..writeln(_messageToString(context, e));
+ }
+ }
+ var messageFile = new File(messagePath);
+ if (text.isNotEmpty) {
+ messageFile.writeAsStringSync(text.toString());
+ } else if (messageFile.existsSync()) {
+ messageFile.deleteSync();
+ }
+ } else {
+ _errors.forEach(listener.onError);
+ }
_errors.clear();
}
@@ -72,28 +98,29 @@ ErrorSeverity _strongModeErrorSeverity(AnalysisError error) {
/// Simple reporter that logs checker messages as they are seen.
class LogReporter implements AnalysisErrorListener {
final AnalysisContext _context;
- final bool useColors;
- final List<AnalysisError> _errors = [];
- LogReporter(this._context, {this.useColors: false});
+ LogReporter(this._context);
void onError(AnalysisError error) {
var level = _severityToLevel[_strongModeErrorSeverity(error)];
+ // TODO(jmesserly): just print these instead of sending through logger?
+ _checkerLogger.log(level, _messageToString(_context, error));
+ }
+}
- // TODO(jmesserly): figure out what to do with the error's name.
- var lineInfo = _context.computeLineInfo(error.source);
- var location = lineInfo.getLocation(error.offset);
+String _messageToString(AnalysisContext context, AnalysisError error) {
+ // TODO(jmesserly): figure out what to do with the error's name.
+ var lineInfo = context.computeLineInfo(error.source);
+ var location = lineInfo.getLocation(error.offset);
- // [warning] 'foo' is not a... (/Users/.../tmp/foo.dart, line 1, col 2)
- var text = new StringBuffer()
- ..write('[${errorCodeName(error.errorCode)}] ')
- ..write(error.message)
- ..write(' (${path.prettyUri(error.source.uri)}')
- ..write(', line ${location.lineNumber}, col ${location.columnNumber})');
+ // [warning] 'foo' is not a... (/Users/.../tmp/foo.dart, line 1, col 2)
+ var text = new StringBuffer()
+ ..write('[${errorCodeName(error.errorCode)}] ')
+ ..write(error.message)
+ ..write(' (${path.prettyUri(error.source.uri)}')
+ ..write(', line ${location.lineNumber}, col ${location.columnNumber})');
- // TODO(jmesserly): just print these instead of sending through logger?
- _checkerLogger.log(level, text);
- }
+ return text.toString();
}
// TODO(jmesserly): remove log levels, instead just use severity.

Powered by Google App Engine
This is Rietveld 408576698