| Index: lib/src/codegen/reify_coercions.dart
|
| diff --git a/lib/src/codegen/reify_coercions.dart b/lib/src/codegen/reify_coercions.dart
|
| index e9b54b06e60b68214eda30440a8f8998e0987c86..cff462edc4d8d0b5a95e7d2f1b521aac52e8ca3c 100644
|
| --- a/lib/src/codegen/reify_coercions.dart
|
| +++ b/lib/src/codegen/reify_coercions.dart
|
| @@ -7,9 +7,10 @@ library dev_compiler.src.codegen.reify_coercions;
|
| import 'package:analyzer/analyzer.dart' as analyzer;
|
| import 'package:analyzer/src/generated/ast.dart';
|
| import 'package:analyzer/src/generated/element.dart';
|
| +import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
|
| import 'package:logging/logging.dart' as logger;
|
| -import 'package:source_span/source_span.dart' show SourceFile;
|
|
|
| +import 'package:dev_compiler/devc.dart' show AbstractCompiler;
|
| import 'package:dev_compiler/src/checker/rules.dart';
|
| import 'package:dev_compiler/src/info.dart';
|
| import 'package:dev_compiler/src/options.dart' show CompilerOptions;
|
| @@ -108,30 +109,34 @@ class _Inference extends DownwardsInference {
|
| // abstract coercion nodes with their dart implementations.
|
| class CoercionReifier extends analyzer.GeneralizingAstVisitor<Object>
|
| with ConversionVisitor<Object> {
|
| + final AnalysisContext _context;
|
| final CoercionManager _cm;
|
| final TypeManager _tm;
|
| final VariableManager _vm;
|
| final LibraryUnit _library;
|
| - SourceFile _file;
|
| bool _skipCoercions = false;
|
| final TypeRules _rules;
|
| final _Inference _inferrer;
|
| final InstrumentedRuntime _runtime;
|
| final CompilerOptions _options;
|
|
|
| + CompilationUnit _unit;
|
| +
|
| CoercionReifier._(this._cm, this._tm, this._vm, this._library, this._rules,
|
| - this._inferrer, this._runtime, this._options);
|
| + this._inferrer, this._runtime, this._context, this._options);
|
|
|
| - factory CoercionReifier(
|
| - LibraryUnit library, TypeRules rules, CompilerOptions options,
|
| + factory CoercionReifier(LibraryUnit library, AbstractCompiler compiler,
|
| [InstrumentedRuntime runtime]) {
|
| var vm = new VariableManager();
|
| var tm =
|
| new TypeManager(library.library.element.enclosingElement, vm, runtime);
|
| + var rules = compiler.rules;
|
| var cm = new CoercionManager(vm, tm, rules, runtime);
|
| var inferrer = new _Inference(rules, tm);
|
| + var context = compiler.context;
|
| + var options = compiler.options;
|
| return new CoercionReifier._(
|
| - cm, tm, vm, library, rules, inferrer, runtime, options);
|
| + cm, tm, vm, library, rules, inferrer, runtime, context, options);
|
| }
|
|
|
| // This should be the entry point for this class. Entering via the
|
| @@ -144,21 +149,20 @@ class CoercionReifier extends analyzer.GeneralizingAstVisitor<Object>
|
| }
|
|
|
| void generateUnit(CompilationUnit unit) {
|
| - _file = new SourceFile(unit.element.source.contents.data,
|
| - url: unit.element.source.uri);
|
| + _unit = unit;
|
| visitCompilationUnit(unit);
|
| - _file = null;
|
| + _unit = null;
|
| }
|
|
|
| ///////////////// Private //////////////////////////////////
|
|
|
| String _locationInfo(Expression e) {
|
| - if (_file != null) {
|
| + if (_unit != null) {
|
| final begin = e is AnnotatedNode
|
| ? (e as AnnotatedNode).firstTokenAfterCommentAndMetadata.offset
|
| : e.offset;
|
| if (begin != 0 && e.end > begin) {
|
| - var span = _file.span(begin, e.end);
|
| + var span = utils.createSpan(_context, _unit, begin, e.end);
|
| var s = span.message("Cast");
|
| return s.substring(0, s.indexOf("Cast"));
|
| }
|
|
|