| Index: lib/src/transformer/error_listener.dart
|
| diff --git a/lib/src/transformer/error_listener.dart b/lib/src/transformer/error_listener.dart
|
| index 01c3ca6a73b35912d04ad42148e49c3f4f02f371..411949c0edd731deceba2ec879d282774a66c809 100644
|
| --- a/lib/src/transformer/error_listener.dart
|
| +++ b/lib/src/transformer/error_listener.dart
|
| @@ -4,27 +4,55 @@
|
|
|
| library dev_compiler.src.transformer.error_listener;
|
|
|
| -import 'package:barback/barback.dart' show TransformLogger;
|
| import 'package:analyzer/analyzer.dart'
|
| show AnalysisError, ErrorSeverity, AnalysisErrorListener;
|
| +import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
|
| +import 'package:barback/barback.dart' show TransformLogger, AssetId;
|
| +import 'package:source_span/source_span.dart' show SourceSpan, SourceLocation;
|
| +
|
| +import 'uri_resolver.dart';
|
| +
|
| +typedef void _LoggingFunction(String message, {AssetId asset, SourceSpan span});
|
|
|
| class TransformAnalysisErrorListener extends AnalysisErrorListener {
|
| - TransformLogger _logger;
|
| - TransformAnalysisErrorListener(this._logger);
|
| + final TransformLogger _logger;
|
| + final AnalysisContext _context;
|
| + TransformAnalysisErrorListener(this._logger, this._context);
|
|
|
| @override
|
| void onError(AnalysisError error) {
|
| - // TODO(ochafik): Proper location / span.
|
| - switch (error.errorCode.errorSeverity) {
|
| + var content = error.source.contents.data;
|
| + var sourceUrl = error.source.uri.toString();
|
| + var lineInfo = _context.getLineInfo(error.source);
|
| + SourceLocation makeLocation(int offset) {
|
| + var location = lineInfo.getLocation(offset);
|
| + return new SourceLocation(offset,
|
| + sourceUrl: sourceUrl,
|
| + line: location.lineNumber,
|
| + column: location.columnNumber);
|
| + }
|
| + int start = error.offset;
|
| + int end = error.offset + error.length;
|
| + var assetId = resolveAssetId(error.source.uri);
|
| + var span = new SourceSpan(
|
| + makeLocation(start), makeLocation(end), content.substring(start, end));
|
| +
|
| + var logger = _getLogger(error.errorCode.errorSeverity);
|
| + logger(error.message, asset: assetId, span: span);
|
| + }
|
| +
|
| + _LoggingFunction _getLogger(ErrorSeverity severity) {
|
| + switch (severity) {
|
| case ErrorSeverity.ERROR:
|
| - _logger.error(error.message);
|
| - break;
|
| + return _logger.error;
|
| case ErrorSeverity.WARNING:
|
| - _logger.warning(error.message);
|
| - break;
|
| + return _logger.warning;
|
| + case ErrorSeverity.INFO:
|
| + return _logger.info;
|
| + case ErrorSeverity.NONE:
|
| + return _logger.fine;
|
| default:
|
| - _logger.info(error.message);
|
| - break;
|
| + throw new ArgumentError.value(severity, "severity", "not supported");
|
| }
|
| }
|
| }
|
|
|