| Index: pkg/compiler/lib/src/info/send_info.dart
 | 
| diff --git a/pkg/compiler/lib/src/info/send_info.dart b/pkg/compiler/lib/src/info/send_info.dart
 | 
| index 0beba58416d30bebb4079550204210515bc21c93..02991421ca3aa8dc7bc75abb44b590753ee7c295 100644
 | 
| --- a/pkg/compiler/lib/src/info/send_info.dart
 | 
| +++ b/pkg/compiler/lib/src/info/send_info.dart
 | 
| @@ -9,6 +9,7 @@ import 'dart:convert';
 | 
|  import 'package:dart2js_info/src/measurements.dart';
 | 
|  import 'package:dart2js_info/src/util.dart' show recursiveDiagnosticString;
 | 
|  
 | 
| +import '../diagnostics/diagnostic_listener.dart' show DiagnosticReporter;
 | 
|  import '../diagnostics/messages.dart' show MessageKind;
 | 
|  import '../compiler.dart' show Compiler;
 | 
|  import '../common/tasks.dart' show CompilerTask;
 | 
| @@ -32,8 +33,10 @@ import 'trusted_types_analysis_result.dart';
 | 
|  
 | 
|  /// Collects a set of [Measurements] about send expressions in the function [f].
 | 
|  // TODO(sigmund): collect information on initializers too.
 | 
| -Measurements collectSendMeasurements(FunctionElement f, Compiler compiler) {
 | 
| -  return compiler.withCurrentElement(f, () {
 | 
| +Measurements collectSendMeasurements(FunctionElement f,
 | 
| +                                     Compiler compiler) {
 | 
| +  DiagnosticReporter reporter = compiler.reporter;
 | 
| +  return reporter.withCurrentElement(f, () {
 | 
|      // TODO(sigmund): enable for platform too.
 | 
|      if (f.library.isPlatformLibrary) return null;
 | 
|      var name = _qualifiedName(f);
 | 
| @@ -61,7 +64,7 @@ Measurements collectSendMeasurements(FunctionElement f, Compiler compiler) {
 | 
|  
 | 
|      var visitor = new _StatsTraversalVisitor(
 | 
|          compiler, resolvedAst.elements,
 | 
| -        compiler.spanFromNode(resolvedAst.node).uri);
 | 
| +        reporter.spanFromSpannable(resolvedAst.node).uri);
 | 
|      resolvedAst.node.accept(visitor);
 | 
|      return visitor.measurements;
 | 
|    });
 | 
| @@ -85,12 +88,12 @@ class _StatsVisitor<T> extends Visitor
 | 
|    /// Results from this function.
 | 
|    final Measurements measurements;
 | 
|  
 | 
| -  final Compiler compiler;
 | 
| +  final DiagnosticReporter reporter;
 | 
|    final TreeElements elements;
 | 
|  
 | 
|    SemanticSendVisitor<dynamic, T> get sendVisitor => this;
 | 
|  
 | 
| -  _StatsVisitor(this.compiler, this.elements, this.info, Uri sourceUri)
 | 
| +  _StatsVisitor(this.reporter, this.elements, this.info, Uri sourceUri)
 | 
|        : measurements = new Measurements.reachableFunction(sourceUri);
 | 
|  
 | 
|    visitNode(Node node) => throw "unhandled ${node.runtimeType}: $node";
 | 
| @@ -99,7 +102,7 @@ class _StatsVisitor<T> extends Visitor
 | 
|  
 | 
|    visitSend(Send node) {
 | 
|      _checkInvariant(node, 'before');
 | 
| -    var span = compiler.spanFromNode(node);
 | 
| +    var span = reporter.spanFromSpannable(node);
 | 
|      measurements.record(Metric.send, span.begin, span.end);
 | 
|      if (node is SendSet) {
 | 
|        if ((node.assignmentOperator != null &&
 | 
| @@ -121,7 +124,7 @@ class _StatsVisitor<T> extends Visitor
 | 
|  
 | 
|    visitNewExpression(NewExpression node) {
 | 
|      _checkInvariant(node, 'before');
 | 
| -    var span = compiler.spanFromNode(node);
 | 
| +    var span = reporter.spanFromSpannable(node);
 | 
|      measurements.record(Metric.send, span.begin, span.end);
 | 
|      super.visitNewExpression(node);
 | 
|      _checkInvariant(node, 'after ');
 | 
| @@ -131,7 +134,7 @@ class _StatsVisitor<T> extends Visitor
 | 
|    ///
 | 
|    /// See [Metric.send] for a full categorization of sends.
 | 
|    handleLocal(Node node) {
 | 
| -    var span = compiler.spanFromNode(node);
 | 
| +    var span = reporter.spanFromSpannable(node);
 | 
|      measurements.record(Metric.monomorphicSend, span.begin, span.end);
 | 
|      measurements.record(Metric.localSend, span.begin, span.end);
 | 
|    }
 | 
| @@ -142,7 +145,7 @@ class _StatsVisitor<T> extends Visitor
 | 
|    ///
 | 
|    /// See [Metric.send] for a full categorization of sends.
 | 
|    handleSingleInstance(Node node) {
 | 
| -    var span = compiler.spanFromNode(node);
 | 
| +    var span = reporter.spanFromSpannable(node);
 | 
|      measurements.record(Metric.monomorphicSend, span.begin, span.end);
 | 
|      measurements.record(Metric.instanceSend, span.begin, span.end);
 | 
|    }
 | 
| @@ -154,7 +157,7 @@ class _StatsVisitor<T> extends Visitor
 | 
|    ///
 | 
|    /// See [Metric.send] for a full categorization of sends.
 | 
|    handleSingleInterceptor(Node node) {
 | 
| -    var span = compiler.spanFromNode(node);
 | 
| +    var span = reporter.spanFromSpannable(node);
 | 
|      measurements.record(Metric.monomorphicSend, span.begin, span.end);
 | 
|      measurements.record(Metric.interceptorSend, span.begin, span.end);
 | 
|    }
 | 
| @@ -163,37 +166,37 @@ class _StatsVisitor<T> extends Visitor
 | 
|    ///
 | 
|    /// See [Metric.send] for a full categorization of sends.
 | 
|    handleMultiInterceptor(Node node) {
 | 
| -    var span = compiler.spanFromNode(node);
 | 
| +    var span = reporter.spanFromSpannable(node);
 | 
|      measurements.record(Metric.polymorphicSend, span.begin, span.end);
 | 
|      measurements.record(Metric.multiInterceptorSend, span.begin, span.end);
 | 
|    }
 | 
|  
 | 
|    handleConstructor(Node node) {
 | 
| -    var span = compiler.spanFromNode(node);
 | 
| +    var span = reporter.spanFromSpannable(node);
 | 
|      measurements.record(Metric.monomorphicSend, span.begin, span.end);
 | 
|      measurements.record(Metric.constructorSend, span.begin, span.end);
 | 
|    }
 | 
|  
 | 
|    handleDynamic(Node node) {
 | 
| -    var span = compiler.spanFromNode(node);
 | 
| +    var span = reporter.spanFromSpannable(node);
 | 
|      measurements.record(Metric.polymorphicSend, span.begin, span.end);
 | 
|      measurements.record(Metric.dynamicSend, span.begin, span.end);
 | 
|    }
 | 
|  
 | 
|    handleVirtual(Node node) {
 | 
| -    var span = compiler.spanFromNode(node);
 | 
| +    var span = reporter.spanFromSpannable(node);
 | 
|      measurements.record(Metric.polymorphicSend, span.begin, span.end);
 | 
|      measurements.record(Metric.virtualSend, span.begin, span.end);
 | 
|    }
 | 
|  
 | 
|    handleNSMError(Node node) {
 | 
| -    var span = compiler.spanFromNode(node);
 | 
| +    var span = reporter.spanFromSpannable(node);
 | 
|      measurements.record(Metric.monomorphicSend, span.begin, span.end);
 | 
|      measurements.record(Metric.nsmErrorSend, span.begin, span.end);
 | 
|    }
 | 
|  
 | 
|    handleNSMSingle(Node node) {
 | 
| -    var span = compiler.spanFromNode(node);
 | 
| +    var span = reporter.spanFromSpannable(node);
 | 
|      measurements.record(Metric.monomorphicSend, span.begin, span.end);
 | 
|      measurements.record(Metric.singleNsmCallSend, span.begin, span.end);
 | 
|    }
 | 
| @@ -209,23 +212,23 @@ class _StatsVisitor<T> extends Visitor
 | 
|    }
 | 
|  
 | 
|    handleNSMAny(Node node) {
 | 
| -    var span = compiler.spanFromNode(node);
 | 
| +    var span = reporter.spanFromSpannable(node);
 | 
|      measurements.record(Metric.polymorphicSend, span.begin, span.end);
 | 
|      measurements.record(Metric.multiNsmCallSend, span.begin, span.end);
 | 
|    }
 | 
|  
 | 
|    handleSuper(Node node) {
 | 
| -    var span = compiler.spanFromNode(node);
 | 
| +    var span = reporter.spanFromSpannable(node);
 | 
|      measurements.record(Metric.monomorphicSend, span.begin, span.end);
 | 
|      measurements.record(Metric.superSend, span.begin, span.end);
 | 
|    }
 | 
|    handleTypeVariable(Node node) {
 | 
| -    var span = compiler.spanFromNode(node);
 | 
| +    var span = reporter.spanFromSpannable(node);
 | 
|      measurements.record(Metric.monomorphicSend, span.begin, span.end);
 | 
|      measurements.record(Metric.typeVariableSend, span.begin, span.end);
 | 
|    }
 | 
|    handleStatic(Node node) {
 | 
| -    var span = compiler.spanFromNode(node);
 | 
| +    var span = reporter.spanFromSpannable(node);
 | 
|      measurements.record(Metric.monomorphicSend, span.begin, span.end);
 | 
|      measurements.record(Metric.staticSend, span.begin, span.end);
 | 
|    }
 | 
| @@ -2246,7 +2249,7 @@ class _StatsVisitor<T> extends Visitor
 | 
|      if (!measurements.checkInvariant(Metric.send) ||
 | 
|          !measurements.checkInvariant(Metric.monomorphicSend) ||
 | 
|          !measurements.checkInvariant(Metric.polymorphicSend)) {
 | 
| -      compiler.reportErrorMessage(node,
 | 
| +      reporter.reportErrorMessage(node,
 | 
|            MessageKind.GENERIC, {'text': 'bad\n-- $msg\nlast:\n-- $last\n'});
 | 
|        last = msg;
 | 
|      } else {
 | 
| @@ -2258,13 +2261,13 @@ class _StatsVisitor<T> extends Visitor
 | 
|  /// Visitor that collects statistics for a single function.
 | 
|  class _StatsTraversalVisitor<T> extends TraversalVisitor<dynamic, T>
 | 
|      implements SemanticSendVisitor<dynamic, T> {
 | 
| -  final Compiler compiler;
 | 
| +  final DiagnosticReporter reporter;
 | 
|    final _StatsVisitor statsVisitor;
 | 
|    Measurements get measurements => statsVisitor.measurements;
 | 
|    _StatsTraversalVisitor(
 | 
|        Compiler compiler, TreeElements elements, Uri sourceUri)
 | 
| -      : compiler = compiler,
 | 
| -        statsVisitor = new _StatsVisitor(compiler, elements,
 | 
| +      : reporter = compiler.reporter,
 | 
| +        statsVisitor = new _StatsVisitor(compiler.reporter, elements,
 | 
|              // TODO(sigmund): accept a list of analyses, so we can compare them
 | 
|              // together.
 | 
|              true
 | 
| @@ -2277,7 +2280,7 @@ class _StatsTraversalVisitor<T> extends TraversalVisitor<dynamic, T>
 | 
|      try {
 | 
|        node.accept(statsVisitor);
 | 
|      } catch (e, t) {
 | 
| -      compiler.reportErrorMessage(
 | 
| +      reporter.reportErrorMessage(
 | 
|            node, MessageKind.GENERIC, {'text': '$e\n$t'});
 | 
|      }
 | 
|      super.visitSend(node);
 | 
| @@ -2287,7 +2290,7 @@ class _StatsTraversalVisitor<T> extends TraversalVisitor<dynamic, T>
 | 
|      try {
 | 
|        node.accept(statsVisitor);
 | 
|      } catch (e, t) {
 | 
| -      compiler.reportErrorMessage(
 | 
| +      reporter.reportErrorMessage(
 | 
|            node, MessageKind.GENERIC, {'text': '$e\n$t'});
 | 
|      }
 | 
|      super.visitNewExpression(node);
 | 
| 
 |