Version 1.22.0-dev.7.0

Merge 45c3ecdf9c11296a0074416ed53b2e5434b45ab4 into dev
diff --git a/BUILD.gn b/BUILD.gn
index 67a6b43..7b7946c 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -49,6 +49,7 @@
   deps = [
     "runtime/bin:dart_bootstrap($host_toolchain)",
     "runtime/bin:dart_precompiled_runtime",
+    "runtime/bin:process_test",
     "runtime/vm:patched_sdk",
   ]
 }
diff --git a/DEPS b/DEPS
index 70e1d42..c896280 100644
--- a/DEPS
+++ b/DEPS
@@ -59,7 +59,7 @@
   "csslib_tag" : "@0.13.2",
   "dart2js_info_tag" : "@0.5.0",
   "dart_services_rev" : "@7aea2574e6f3924bf409a80afb8ad52aa2be4f97",
-  "dart_style_tag": "@0.2.13",
+  "dart_style_tag": "@0.2.14",
   "dartdoc_tag" : "@v0.9.8+1",
   "fixnum_tag": "@0.10.5",
   "func_tag": "@0.1.0",
@@ -75,7 +75,7 @@
   "isolate_tag": "@0.2.3",
   "jinja2_rev": "@2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_tag": "@2.0.2",
-  "linter_rev": "@bde08fddf7a24e73d788e62b1725e4db95533269",
+  "linter_rev": "@393695e77bf95213130935e969e86140cb322667",
   "logging_tag": "@0.11.3+1",
   "markdown_tag": "@0.11.0",
   "matcher_tag": "@0.12.0+2",
@@ -96,7 +96,7 @@
   "pub_semver_tag": "@1.3.0",
   "quiver_tag": "@0.22.0",
   "resource_rev":"@a49101ba2deb29c728acba6fb86000a8f730f4b1",
-  "root_certificates_rev": "@aed07942ce98507d2be28cbd29e879525410c7fc",
+  "root_certificates_rev": "@0068d8911140e591ebb750af296e81940a9906f5",
   "scheduled_test_tag": "@0.12.6",
   "shelf_static_tag": "@0.2.4",
   "shelf_packages_handler_tag": "@1.0.0",
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 52043c8..1f513f4 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -745,7 +745,7 @@
     ldflags = common_optimize_on_ldflags
   } else {
     cflags = [
-      "-O1",
+      "-O2",
       "-fdata-sections",
       "-ffunction-sections",
     ]
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 771f9f1..869bd81 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -242,7 +242,7 @@
   /**
    * The controller that is notified when analysis is started.
    */
-  StreamController<AnalysisContext> _onAnalysisStartedController;
+  StreamController<bool> _onAnalysisStartedController;
 
   /**
    * The controller that is notified when a single file has been analyzed.
@@ -492,9 +492,9 @@
   }
 
   /**
-   * The stream that is notified when analysis of a context is started.
+   * The stream that is notified with `true` when analysis is started.
    */
-  Stream<AnalysisContext> get onAnalysisStarted {
+  Stream<bool> get onAnalysisStarted {
     return _onAnalysisStartedController.stream;
   }
 
@@ -1084,7 +1084,7 @@
    * Schedules analysis of the given context.
    */
   void schedulePerformAnalysisOperation(AnalysisContext context) {
-    _onAnalysisStartedController.add(context);
+    _onAnalysisStartedController.add(true);
     scheduleOperation(new PerformAnalysisOperation(context, false));
   }
 
@@ -1168,6 +1168,9 @@
    * the [status] information.
    */
   void sendStatusNotificationNew(nd.AnalysisStatus status) {
+    if (status.isAnalyzing) {
+      _onAnalysisStartedController.add(true);
+    }
     if (_onAnalysisCompleteCompleter != null && !status.isAnalyzing) {
       _onAnalysisCompleteCompleter.complete();
       _onAnalysisCompleteCompleter = null;
@@ -1832,7 +1835,7 @@
         analysisServer.fileContentOverlay,
         sourceFactory,
         analysisOptions);
-    analysisDriver.name = folder.shortName;
+    analysisDriver.name = folder.path;
     analysisDriver.status.listen((status) {
       // TODO(scheglov) send server status
     });
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights.dart b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
index 1214ea4..5768a88 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
@@ -500,6 +500,19 @@
   }
 
   @override
+  Object visitGenericFunctionType(GenericFunctionType node) {
+    computer._addRegion_token(
+        node.functionKeyword, HighlightRegionType.KEYWORD);
+    return super.visitGenericFunctionType(node);
+  }
+
+  @override
+  Object visitGenericTypeAlias(GenericTypeAlias node) {
+    computer._addRegion_token(node.typedefKeyword, HighlightRegionType.KEYWORD);
+    return super.visitGenericTypeAlias(node);
+  }
+
+  @override
   Object visitHideCombinator(HideCombinator node) {
     computer._addRegion_token(node.keyword, HighlightRegionType.BUILT_IN);
     return super.visitHideCombinator(node);
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights2.dart b/pkg/analysis_server/lib/src/computer/computer_highlights2.dart
index 630b41f..184c35d 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights2.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights2.dart
@@ -591,6 +591,19 @@
   }
 
   @override
+  Object visitGenericFunctionType(GenericFunctionType node) {
+    computer._addRegion_token(
+        node.functionKeyword, HighlightRegionType.KEYWORD);
+    return super.visitGenericFunctionType(node);
+  }
+
+  @override
+  Object visitGenericTypeAlias(GenericTypeAlias node) {
+    computer._addRegion_token(node.typedefKeyword, HighlightRegionType.KEYWORD);
+    return super.visitGenericTypeAlias(node);
+  }
+
+  @override
   Object visitHideCombinator(HideCombinator node) {
     computer._addRegion_token(node.keyword, HighlightRegionType.BUILT_IN);
     return super.visitHideCombinator(node);
diff --git a/pkg/analysis_server/lib/src/computer/computer_outline.dart b/pkg/analysis_server/lib/src/computer/computer_outline.dart
index a89ff02..f72cbe9 100644
--- a/pkg/analysis_server/lib/src/computer/computer_outline.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_outline.dart
@@ -40,7 +40,7 @@
             FieldDeclaration fieldDeclaration = classMember;
             VariableDeclarationList fields = fieldDeclaration.fields;
             if (fields != null) {
-              TypeName fieldType = fields.type;
+              TypeAnnotation fieldType = fields.type;
               String fieldTypeName = _safeToSource(fieldType);
               for (VariableDeclaration field in fields.variables) {
                 classContents.add(_newVariableOutline(fieldTypeName,
@@ -67,7 +67,7 @@
         TopLevelVariableDeclaration fieldDeclaration = unitMember;
         VariableDeclarationList fields = fieldDeclaration.variables;
         if (fields != null) {
-          TypeName fieldType = fields.type;
+          TypeAnnotation fieldType = fields.type;
           String fieldTypeName = _safeToSource(fieldType);
           for (VariableDeclaration field in fields.variables) {
             unitContents.add(_newVariableOutline(
@@ -251,7 +251,7 @@
   }
 
   Outline _newFunctionOutline(FunctionDeclaration function, bool isStatic) {
-    TypeName returnType = function.returnType;
+    TypeAnnotation returnType = function.returnType;
     SimpleIdentifier nameNode = function.name;
     String name = nameNode.name;
     FunctionExpression functionExpression = function.functionExpression;
@@ -285,7 +285,7 @@
   }
 
   Outline _newFunctionTypeAliasOutline(FunctionTypeAlias node) {
-    TypeName returnType = node.returnType;
+    TypeAnnotation returnType = node.returnType;
     SimpleIdentifier nameNode = node.name;
     String name = nameNode.name;
     _SourceRegion sourceRegion = _getSourceRegion(node);
@@ -306,7 +306,7 @@
   }
 
   Outline _newMethodOutline(MethodDeclaration method) {
-    TypeName returnType = method.returnType;
+    TypeAnnotation returnType = method.returnType;
     SimpleIdentifier nameNode = method.name;
     String name = nameNode.name;
     FormalParameterList parameters = method.parameters;
diff --git a/pkg/analysis_server/lib/src/domain_diagnostic.dart b/pkg/analysis_server/lib/src/domain_diagnostic.dart
index 1f2609c..d91aacf 100644
--- a/pkg/analysis_server/lib/src/domain_diagnostic.dart
+++ b/pkg/analysis_server/lib/src/domain_diagnostic.dart
@@ -11,6 +11,7 @@
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analyzer/src/context/cache.dart';
 import 'package:analyzer/src/context/context.dart';
+import 'package:analyzer/src/dart/analysis/driver.dart' as nd;
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/utilities_collection.dart';
@@ -38,15 +39,19 @@
 
   /// Answer the `diagnostic.diagnostics` request.
   Response computeDiagnostics(Request request) {
-    List<ContextData> infos = <ContextData>[];
-    for (AnalysisContext context in server.analysisContexts) {
-      infos.add(extractData(context));
+    List<ContextData> contexts = <ContextData>[];
+    if (server.options.enableNewAnalysisDriver) {
+      contexts = server.driverMap.values.map(extractDataFromDriver).toList();
+    } else {
+      for (AnalysisContext context in server.analysisContexts) {
+        contexts.add(extractDataFromContext(context));
+      }
     }
-    return new DiagnosticGetDiagnosticsResult(infos).toResponse(request.id);
+    return new DiagnosticGetDiagnosticsResult(contexts).toResponse(request.id);
   }
 
   /// Extract context data from the given [context].
-  ContextData extractData(AnalysisContext context) {
+  ContextData extractDataFromContext(AnalysisContext context) {
     int explicitFiles = 0;
     int implicitFiles = 0;
     int workItems = 0;
@@ -84,6 +89,14 @@
         workItems, exceptions.toList());
   }
 
+  /// Extract context data from the given [driver].
+  ContextData extractDataFromDriver(nd.AnalysisDriver driver) {
+    int explicitFileCount = driver.addedFiles.length;
+    int knownFileCount = driver.knownFiles.length;
+    return new ContextData(driver.name, explicitFileCount,
+        knownFileCount - explicitFileCount, driver.numberOfFilesToAnalyze, []);
+  }
+
   @override
   Response handleRequest(Request request) {
     try {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/label_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/label_contributor.dart
index 0db3193..774727d 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/label_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/label_contributor.dart
@@ -103,7 +103,7 @@
   }
 
   @override
-  void declaredLocalVar(SimpleIdentifier name, TypeName type) {
+  void declaredLocalVar(SimpleIdentifier name, TypeAnnotation type) {
     // ignored
   }
 
@@ -113,7 +113,7 @@
   }
 
   @override
-  void declaredParam(SimpleIdentifier name, TypeName type) {
+  void declaredParam(SimpleIdentifier name, TypeAnnotation type) {
     // ignored
   }
 
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_constructor_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_constructor_contributor.dart
index e2b3a46..7b908a8 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_constructor_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_constructor_contributor.dart
@@ -95,13 +95,13 @@
   void declaredLabel(Label label, bool isCaseLabel) {}
 
   @override
-  void declaredLocalVar(SimpleIdentifier name, TypeName type) {}
+  void declaredLocalVar(SimpleIdentifier name, TypeAnnotation type) {}
 
   @override
   void declaredMethod(MethodDeclaration declaration) {}
 
   @override
-  void declaredParam(SimpleIdentifier name, TypeName type) {}
+  void declaredParam(SimpleIdentifier name, TypeAnnotation type) {}
 
   @override
   void declaredTopLevelVar(
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_declaration_visitor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_declaration_visitor.dart
index adf26c7..e290304 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_declaration_visitor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_declaration_visitor.dart
@@ -39,11 +39,11 @@
 
   void declaredLabel(Label label, bool isCaseLabel);
 
-  void declaredLocalVar(SimpleIdentifier name, TypeName type);
+  void declaredLocalVar(SimpleIdentifier name, TypeAnnotation type);
 
   void declaredMethod(MethodDeclaration declaration);
 
-  void declaredParam(SimpleIdentifier name, TypeName type);
+  void declaredParam(SimpleIdentifier name, TypeAnnotation type);
 
   void declaredTopLevelVar(
       VariableDeclarationList varList, VariableDeclaration varDecl);
@@ -128,7 +128,7 @@
   @override
   void visitForEachStatement(ForEachStatement node) {
     SimpleIdentifier id;
-    TypeName type;
+    TypeAnnotation type;
     DeclaredIdentifier loopVar = node.loopVariable;
     if (loopVar != null) {
       id = loopVar.identifier;
@@ -233,7 +233,7 @@
         } else if (param is NormalFormalParameter) {
           normalParam = param;
         }
-        TypeName type = null;
+        TypeAnnotation type = null;
         if (normalParam is FieldFormalParameter) {
           type = normalParam.type;
         } else if (normalParam is FunctionTypedFormalParameter) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
index 41e50c5..ae66900 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
@@ -166,7 +166,7 @@
     if (optype.includeReturnValueSuggestions &&
         (!optype.inStaticMethodBody || fieldDecl.isStatic)) {
       bool deprecated = isDeprecated(fieldDecl) || isDeprecated(varDecl);
-      TypeName typeName = fieldDecl.fields.type;
+      TypeAnnotation typeName = fieldDecl.fields.type;
       _addLocalSuggestion_includeReturnValueSuggestions(
           fieldDecl.documentationComment,
           varDecl.name,
@@ -182,7 +182,7 @@
   void declaredFunction(FunctionDeclaration declaration) {
     if (optype.includeReturnValueSuggestions ||
         optype.includeVoidReturnSuggestions) {
-      TypeName typeName = declaration.returnType;
+      TypeAnnotation typeName = declaration.returnType;
       protocol.ElementKind elemKind;
       int relevance = DART_RELEVANCE_DEFAULT;
       if (declaration.isGetter) {
@@ -233,7 +233,7 @@
   }
 
   @override
-  void declaredLocalVar(SimpleIdentifier id, TypeName typeName) {
+  void declaredLocalVar(SimpleIdentifier id, TypeAnnotation typeName) {
     if (optype.includeReturnValueSuggestions) {
       _addLocalSuggestion_includeReturnValueSuggestions(
           null, id, typeName, protocol.ElementKind.LOCAL_VARIABLE,
@@ -248,7 +248,7 @@
         (!optype.inStaticMethodBody || declaration.isStatic)) {
       protocol.ElementKind elemKind;
       FormalParameterList param;
-      TypeName typeName = declaration.returnType;
+      TypeAnnotation typeName = declaration.returnType;
       int relevance = DART_RELEVANCE_DEFAULT;
       if (declaration.isGetter) {
         elemKind = protocol.ElementKind.GETTER;
@@ -283,7 +283,7 @@
   }
 
   @override
-  void declaredParam(SimpleIdentifier id, TypeName typeName) {
+  void declaredParam(SimpleIdentifier id, TypeAnnotation typeName) {
     if (optype.includeReturnValueSuggestions) {
       _addLocalSuggestion_includeReturnValueSuggestions(
           null, id, typeName, protocol.ElementKind.PARAMETER,
@@ -306,7 +306,7 @@
   }
 
   void _addLocalSuggestion(Comment documentationComment, SimpleIdentifier id,
-      TypeName typeName, protocol.ElementKind elemKind,
+      TypeAnnotation typeName, protocol.ElementKind elemKind,
       {bool isAbstract: false,
       bool isDeprecated: false,
       ClassDeclaration classDecl,
@@ -377,7 +377,7 @@
   void _addLocalSuggestion_includeReturnValueSuggestions(
       Comment documentationComment,
       SimpleIdentifier id,
-      TypeName typeName,
+      TypeAnnotation typeName,
       protocol.ElementKind elemKind,
       {bool isAbstract: false,
       bool isDeprecated: false,
@@ -417,7 +417,7 @@
   void _addLocalSuggestion_includeTypeNameSuggestions(
       Comment documentationComment,
       SimpleIdentifier id,
-      TypeName typeName,
+      TypeAnnotation typeName,
       protocol.ElementKind elemKind,
       {bool isAbstract: false,
       bool isDeprecated: false,
@@ -443,7 +443,7 @@
         .map((FormalParameter param) => param.identifier.name)
         .toList();
     suggestion.parameterTypes = paramList.map((FormalParameter param) {
-      TypeName type = null;
+      TypeAnnotation type = null;
       if (param is DefaultFormalParameter) {
         NormalFormalParameter child = param.parameter;
         if (child is SimpleFormalParameter) {
@@ -460,11 +460,15 @@
       if (type == null) {
         return 'dynamic';
       }
-      Identifier typeId = type.name;
-      if (typeId == null) {
-        return 'dynamic';
+      if (type is TypeName) {
+        Identifier typeId = type.name;
+        if (typeId == null) {
+          return 'dynamic';
+        }
+        return typeId.name;
       }
-      return typeId.name;
+      // TODO(brianwilkerson) Support function types.
+      return 'dynamic';
     }).toList();
     suggestion.requiredParameterCount = paramList
         .where((FormalParameter param) => param is! DefaultFormalParameter)
@@ -473,8 +477,8 @@
         .any((FormalParameter param) => param.kind == ParameterKind.NAMED);
   }
 
-  bool _isVoid(TypeName returnType) {
-    if (returnType != null) {
+  bool _isVoid(TypeAnnotation returnType) {
+    if (returnType is TypeName) {
       Identifier id = returnType.name;
       if (id != null && id.name == 'void') {
         return true;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/optype.dart b/pkg/analysis_server/lib/src/services/completion/dart/optype.dart
index da0e6a0..c9954d5 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/optype.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/optype.dart
@@ -126,15 +126,6 @@
   OpType._();
 
   /**
-   * Indicate whether only type names should be suggested
-   */
-  bool get includeOnlyNamedArgumentSuggestions =>
-      includeNamedArgumentSuggestions &&
-      !includeTypeNameSuggestions &&
-      !includeReturnValueSuggestions &&
-      !includeVoidReturnSuggestions;
-
-  /**
    * Return `true` if free standing identifiers should be suggested
    */
   bool get includeIdentifiers {
@@ -148,6 +139,15 @@
   /**
    * Indicate whether only type names should be suggested
    */
+  bool get includeOnlyNamedArgumentSuggestions =>
+      includeNamedArgumentSuggestions &&
+      !includeTypeNameSuggestions &&
+      !includeReturnValueSuggestions &&
+      !includeVoidReturnSuggestions;
+
+  /**
+   * Indicate whether only type names should be suggested
+   */
   bool get includeOnlyTypeNameSuggestions =>
       includeTypeNameSuggestions &&
       !includeNamedArgumentSuggestions &&
@@ -845,9 +845,9 @@
 
   @override
   void visitTypeArgumentList(TypeArgumentList node) {
-    NodeList<TypeName> arguments = node.arguments;
-    for (TypeName typeName in arguments) {
-      if (identical(entity, typeName)) {
+    NodeList<TypeAnnotation> arguments = node.arguments;
+    for (TypeAnnotation type in arguments) {
+      if (identical(entity, type)) {
         optype.includeTypeNameSuggestions = true;
         break;
       }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
index d535ef4..1921bfa 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
@@ -161,7 +161,7 @@
   @override
   void declaredFunction(FunctionDeclaration declaration) {
     if (declaration.name.name == targetName) {
-      TypeName typeName = declaration.returnType;
+      TypeAnnotation typeName = declaration.returnType;
       if (typeName != null) {
         typeFound = typeName.type;
       }
@@ -172,7 +172,7 @@
   @override
   void declaredFunctionTypeAlias(FunctionTypeAlias declaration) {
     if (declaration.name.name == targetName) {
-      TypeName typeName = declaration.returnType;
+      TypeAnnotation typeName = declaration.returnType;
       if (typeName != null) {
         typeFound = typeName.type;
       }
@@ -189,7 +189,7 @@
   }
 
   @override
-  void declaredLocalVar(SimpleIdentifier name, TypeName type) {
+  void declaredLocalVar(SimpleIdentifier name, TypeAnnotation type) {
     if (name.name == targetName) {
       typeFound = name.bestType;
       finished();
@@ -199,7 +199,7 @@
   @override
   void declaredMethod(MethodDeclaration declaration) {
     if (declaration.name.name == targetName) {
-      TypeName typeName = declaration.returnType;
+      TypeAnnotation typeName = declaration.returnType;
       if (typeName != null) {
         typeFound = typeName.type;
       }
@@ -208,7 +208,7 @@
   }
 
   @override
-  void declaredParam(SimpleIdentifier name, TypeName type) {
+  void declaredParam(SimpleIdentifier name, TypeAnnotation type) {
     if (name.name == targetName) {
       // Type provided by the element in computeFull above
       finished();
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
index 0cba871..a3ec936 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
@@ -34,7 +34,7 @@
 protocol.Element createLocalElement(
     Source source, protocol.ElementKind kind, SimpleIdentifier id,
     {String parameters,
-    TypeName returnType,
+    TypeAnnotation returnType,
     bool isAbstract: false,
     bool isDeprecated: false}) {
   String name;
@@ -64,7 +64,7 @@
 CompletionSuggestion createLocalFieldSuggestion(
     Source source, FieldDeclaration fieldDecl, VariableDeclaration varDecl) {
   bool deprecated = isDeprecated(fieldDecl) || isDeprecated(varDecl);
-  TypeName type = fieldDecl.fields.type;
+  TypeAnnotation type = fieldDecl.fields.type;
   return createLocalSuggestion(
       varDecl.name, deprecated, DART_RELEVANCE_LOCAL_FIELD, type,
       classDecl: fieldDecl.parent,
@@ -78,7 +78,7 @@
  * suggestion or `null` if it could not be created.
  */
 CompletionSuggestion createLocalSuggestion(SimpleIdentifier id,
-    bool isDeprecated, int defaultRelevance, TypeName returnType,
+    bool isDeprecated, int defaultRelevance, TypeAnnotation returnType,
     {ClassDeclaration classDecl,
     CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION,
     protocol.Element element}) {
@@ -129,24 +129,29 @@
 /**
  * Return the name for the given [type].
  */
-String nameForType(TypeName type) {
+String nameForType(TypeAnnotation type) {
   if (type == NO_RETURN_TYPE) {
     return null;
   }
   if (type == null) {
     return DYNAMIC;
   }
-  Identifier id = type.name;
-  if (id == null) {
-    return DYNAMIC;
+  if (type is TypeName) {
+    Identifier id = type.name;
+    if (id == null) {
+      return DYNAMIC;
+    }
+    String name = id.name;
+    if (name == null || name.length <= 0) {
+      return DYNAMIC;
+    }
+    TypeArgumentList typeArgs = type.typeArguments;
+    if (typeArgs != null) {
+      //TODO (danrubel) include type arguments
+    }
+    return name;
+  } else if (type is GenericFunctionType) {
+    // TODO(brianwilkerson) Implement this.
   }
-  String name = id.name;
-  if (name == null || name.length <= 0) {
-    return DYNAMIC;
-  }
-  TypeArgumentList typeArgs = type.typeArguments;
-  if (typeArgs != null) {
-    //TODO (danrubel) include type arguments
-  }
-  return name;
+  return DYNAMIC;
 }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/variable_name_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/variable_name_contributor.dart
index 2c4d913..98b7f4b 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/variable_name_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/variable_name_contributor.dart
@@ -56,7 +56,10 @@
           strName = _getStringName(node.expression as Identifier);
         }
       } else if (node is VariableDeclarationList) {
-        strName = _getStringName(node.type.name);
+        TypeAnnotation typeAnnotation = node.type;
+        if (typeAnnotation is TypeName) {
+          strName = _getStringName(typeAnnotation.name);
+        }
       } else if (node is TopLevelVariableDeclaration) {
         // The parser parses 'Foo ' and 'Foo ;' differently, resulting in the
         // following.
@@ -64,8 +67,11 @@
         // 'Foo ;': TopLevelVariableDeclaration with type null, and a first
         // variable of 'Foo'
         VariableDeclarationList varDeclarationList = node.variables;
-        if (varDeclarationList.type != null) {
-          strName = _getStringName(varDeclarationList.type.name);
+        TypeAnnotation typeAnnotation = varDeclarationList.type;
+        if (typeAnnotation != null) {
+          if (typeAnnotation is TypeName) {
+            strName = _getStringName(typeAnnotation.name);
+          }
         } else {
           NodeList<VariableDeclaration> varDeclarations =
               varDeclarationList.variables;
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index ebd7ca3..27cc2cf 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -505,7 +505,9 @@
         getter = n;
         break;
       }
-      if (n is SimpleIdentifier || n is TypeName || n is TypeArgumentList) {
+      if (n is SimpleIdentifier ||
+          n is TypeAnnotation ||
+          n is TypeArgumentList) {
         continue;
       }
       break;
@@ -571,7 +573,7 @@
       if (n is SimpleIdentifier ||
           n is VariableDeclaration ||
           n is VariableDeclarationList ||
-          n is TypeName ||
+          n is TypeAnnotation ||
           n is TypeArgumentList) {
         continue;
       }
@@ -1564,7 +1566,7 @@
       return;
     }
     // we need a type
-    TypeName typeNode = declarationList.type;
+    TypeAnnotation typeNode = declarationList.type;
     if (typeNode == null) {
       _coverageMarker();
       return;
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index c96165d..325f723 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -570,7 +570,7 @@
       AstNode variableList = declaration.parent;
       if (variableList is VariableDeclarationList &&
           variableList.variables.length == 1) {
-        TypeName typeNode = variableList.type;
+        TypeAnnotation typeNode = variableList.type;
         if (typeNode != null) {
           Expression initializer = coveredNode;
           DartType newType = initializer.bestType;
@@ -1436,7 +1436,7 @@
 
   void _addFix_illegalAsyncReturnType() {
     // prepare the existing type
-    TypeName typeName = node.getAncestor((n) => n is TypeName);
+    TypeAnnotation typeName = node.getAncestor((n) => n is TypeAnnotation);
     _replaceTypeWithFuture(typeName);
     // add proposal
     _addFix(DartFixKind.REPLACE_RETURN_TYPE_FUTURE, []);
@@ -2825,7 +2825,7 @@
     }
   }
 
-  void _replaceTypeWithFuture(TypeName typeName) {
+  void _replaceTypeWithFuture(TypeAnnotation typeName) {
     InterfaceType futureType = context.typeProvider.futureType;
     // validate the type
     DartType type = typeName?.type;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
index e904e14..6e3c2cb 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
@@ -859,6 +859,15 @@
   }
 
   @override
+  Object visitGenericFunctionType(GenericFunctionType node) {
+    super.visitGenericFunctionType(node);
+    if (_isFirstSelectedNode(node)) {
+      invalidSelection('Cannot extract a single type reference.');
+    }
+    return null;
+  }
+
+  @override
   Object visitSimpleIdentifier(SimpleIdentifier node) {
     super.visitSimpleIdentifier(node);
     if (_isFirstSelectedNode(node)) {
diff --git a/pkg/analysis_server/lib/src/status/ast_writer.dart b/pkg/analysis_server/lib/src/status/ast_writer.dart
index 1b292d6..b32886d 100644
--- a/pkg/analysis_server/lib/src/status/ast_writer.dart
+++ b/pkg/analysis_server/lib/src/status/ast_writer.dart
@@ -141,7 +141,7 @@
       properties['value'] = node.value;
     } else if (node is SuperConstructorInvocation) {
       properties['static element'] = node.staticElement;
-    } else if (node is TypeName) {
+    } else if (node is TypeAnnotation) {
       properties['type'] = node.type;
     } else if (node is VariableDeclarationList) {
       properties['keyword'] = node.keyword;
@@ -195,7 +195,7 @@
       return node.name.name;
     } else if (node is TopLevelVariableDeclaration) {
       return _getNames(node.variables);
-    } else if (node is TypeName) {
+    } else if (node is TypeAnnotation) {
       return node.toSource();
     } else if (node is TypeParameter) {
       return node.name.name;
diff --git a/pkg/analysis_server/test/domain_diagnostic_test.dart b/pkg/analysis_server/test/domain_diagnostic_test.dart
index 1842045..fcaf755 100644
--- a/pkg/analysis_server/test/domain_diagnostic_test.dart
+++ b/pkg/analysis_server/test/domain_diagnostic_test.dart
@@ -5,86 +5,72 @@
 library test.domain.diagnostic;
 
 import 'package:analysis_server/plugin/protocol/protocol.dart';
-import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/domain_diagnostic.dart';
-import 'package:analysis_server/src/plugin/server_plugin.dart';
-import 'package:analyzer/file_system/memory_file_system.dart';
-import 'package:analyzer/instrumentation/instrumentation.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/sdk.dart';
-import 'package:plugin/manager.dart';
-import 'package:plugin/plugin.dart';
 import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import 'mock_sdk.dart';
-import 'mocks.dart';
+import 'analysis_abstract.dart';
 
 main() {
-  AnalysisServer server;
-  DiagnosticDomainHandler handler;
-  MemoryResourceProvider resourceProvider;
+  defineReflectiveSuite(() {
+    defineReflectiveTests(DiagnosticDomainTest);
+    defineReflectiveTests(DiagnosticDomainTest_Driver);
+  });
+}
 
-  void processRequiredPlugins(ServerPlugin serverPlugin) {
-    List<Plugin> plugins = <Plugin>[];
-    plugins.addAll(AnalysisEngine.instance.requiredPlugins);
-    plugins.add(serverPlugin);
-
-    ExtensionManager manager = new ExtensionManager();
-    manager.processPlugins(plugins);
+@reflectiveTest
+class DiagnosticDomainTest extends AbstractAnalysisTest {
+  @override
+  void setUp() {
+    super.setUp();
+    handler = new DiagnosticDomainHandler(server);
+    server.handlers = [handler];
   }
 
-  setUp(() {
-    ServerPlugin serverPlugin = new ServerPlugin();
-    processRequiredPlugins(serverPlugin);
-    //
-    // Create the server
-    //
-    var serverChannel = new MockServerChannel();
-    resourceProvider = new MemoryResourceProvider();
-    // Create an SDK in the mock file system.
-    new MockSdk(resourceProvider: resourceProvider);
-    server = new AnalysisServer(
-        serverChannel,
-        resourceProvider,
-        new MockPackageMapProvider(),
-        null,
-        serverPlugin,
-        new AnalysisServerOptions(),
-        new DartSdkManager('/', false),
-        InstrumentationService.NULL_SERVICE);
-    handler = new DiagnosticDomainHandler(server);
-  });
+  test_getDiagnostics() async {
+    String file = '/project/bin/test.dart';
+    resourceProvider.newFile('/project/pubspec.yaml', 'name: project');
+    resourceProvider.newFile(file, 'main() {}');
 
-  group('DiagnosticDomainHandler', () {
-    test('getDiagnostics', () async {
-      String file = '/project/bin/test.dart';
-      resourceProvider.newFile('/project/pubspec.yaml', 'name: project');
-      resourceProvider.newFile(file, 'main() {}');
+    server.setAnalysisRoots('0', ['/project/'], [], {});
 
-      server.setAnalysisRoots('0', ['/project/'], [], {});
+    await server.onAnalysisComplete;
 
-      await server.onAnalysisComplete;
+    var request = new DiagnosticGetDiagnosticsParams().toRequest('0');
+    var response = handler.handleRequest(request);
+    var result = new DiagnosticGetDiagnosticsResult.fromResponse(response);
 
-      var request = new DiagnosticGetDiagnosticsParams().toRequest('0');
-      var response = handler.handleRequest(request);
+    expect(result.contexts, hasLength(1));
 
-      int fileCount = 1 /* test.dart */;
+    ContextData context = result.contexts[0];
+    expect(context.name, '/project');
+    expect(context.explicitFileCount, 1); /* test.dart */
 
-      Map json = response.toJson()[Response.RESULT];
-      expect(json['contexts'], hasLength(1));
-      var context = json['contexts'][0];
-      expect(context['name'], '/project');
-      expect(context['explicitFileCount'], fileCount);
+    if (enableNewAnalysisDriver) {
+      // dart:core (although it should not be here)
+      expect(context.implicitFileCount, 1);
+    } else {
       // dart:core dart:async dart:math dart:_internal
-      expect(context['implicitFileCount'], 4);
-      expect(context['workItemQueueLength'], isNotNull);
-    });
+      expect(context.implicitFileCount, 4);
+    }
 
-    test('getDiagnostics - (no root)', () async {
-      var request = new DiagnosticGetDiagnosticsParams().toRequest('0');
-      var response = handler.handleRequest(request);
-      Map json = response.toJson()[Response.RESULT];
-      expect(json['contexts'], hasLength(0));
-    });
-  });
+    expect(context.workItemQueueLength, isNotNull);
+  }
+
+  test_getDiagnostics_noRoot() async {
+    var request = new DiagnosticGetDiagnosticsParams().toRequest('0');
+    var response = handler.handleRequest(request);
+    var result = new DiagnosticGetDiagnosticsResult.fromResponse(response);
+    expect(result.contexts, isEmpty);
+  }
+}
+
+@reflectiveTest
+class DiagnosticDomainTest_Driver extends DiagnosticDomainTest {
+  @override
+  void setUp() {
+    enableNewAnalysisDriver = true;
+    generateSummaryFiles = true;
+    super.setUp();
+  }
 }
diff --git a/pkg/analysis_server/test/services/completion/dart/local_declaration_visitor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_declaration_visitor_test.dart
index fe3456d..4e4e727 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_declaration_visitor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_declaration_visitor_test.dart
@@ -73,7 +73,7 @@
   void declaredLabel(Label label, bool isCaseLabel) {}
 
   @override
-  void declaredLocalVar(SimpleIdentifier name, TypeName type) {
+  void declaredLocalVar(SimpleIdentifier name, TypeAnnotation type) {
     expect(name, isNotNull);
   }
 
@@ -81,7 +81,7 @@
   void declaredMethod(MethodDeclaration declaration) {}
 
   @override
-  void declaredParam(SimpleIdentifier name, TypeName type) {}
+  void declaredParam(SimpleIdentifier name, TypeAnnotation type) {}
 
   @override
   void declaredTopLevelVar(
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index 78b3c06..ba966a3 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -254,7 +254,7 @@
  * An as expression.
  *
  *    asExpression ::=
- *        [Expression] 'as' [TypeName]
+ *        [Expression] 'as' [TypeAnnotation]
  *
  * Clients may not extend, implement or mix-in this class.
  */
@@ -281,14 +281,14 @@
   void set expression(Expression expression);
 
   /**
-   * Return the name of the type being cast to.
+   * Return the type being cast to.
    */
-  TypeName get type;
+  TypeAnnotation get type;
 
   /**
-   * Set the name of the type being cast to to the given [name].
+   * Set the type being cast to to the given [type].
    */
-  void set type(TypeName name);
+  void set type(TypeAnnotation type);
 }
 
 /**
@@ -556,7 +556,14 @@
 /**
  * An object that can be used to visit an AST structure.
  *
- * Clients may extend or implement this class.
+ * Clients may not extend, implement or mix-in this class. There are classes
+ * that implement this interface that provide useful default behaviors in
+ * `package:analyzer/dart/ast/visitor.dart`. A couple of the most useful include
+ * * SimpleAstVisitor which implements every visit method by doing nothing,
+ * * RecursiveAstVisitor which will cause every node in a structure to be
+ *   visited, and
+ * * ThrowingAstVisitor which implements every visit method by throwing an
+ *   exception.
  */
 abstract class AstVisitor<R> {
   R visitAdjacentStrings(AdjacentStrings node);
@@ -659,6 +666,10 @@
 
   R visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node);
 
+  R visitGenericFunctionType(GenericFunctionType node);
+
+  R visitGenericTypeAlias(GenericTypeAlias node);
+
   R visitHideCombinator(HideCombinator node);
 
   R visitIfStatement(IfStatement node);
@@ -1097,13 +1108,13 @@
    * Return the type of exceptions caught by this catch clause, or `null` if
    * this catch clause catches every type of exception.
    */
-  TypeName get exceptionType;
+  TypeAnnotation get exceptionType;
 
   /**
    * Set the type of exceptions caught by this catch clause to the given
    * [exceptionType].
    */
-  void set exceptionType(TypeName exceptionType);
+  void set exceptionType(TypeAnnotation exceptionType);
 
   /**
    * Return the left parenthesis, or `null` if there is no 'catch' keyword.
@@ -2187,12 +2198,12 @@
    * Return the name of the declared type of the parameter, or `null` if the
    * parameter does not have a declared type.
    */
-  TypeName get type;
+  TypeAnnotation get type;
 
   /**
-   * Set the name of the declared type of the parameter to the given [typeName].
+   * Set the declared type of the parameter to the given [type].
    */
-  void set type(TypeName typeName);
+  void set type(TypeAnnotation type);
 }
 
 /**
@@ -2789,7 +2800,7 @@
  * A field formal parameter.
  *
  *    fieldFormalParameter ::=
- *        ('final' [TypeName] | 'const' [TypeName] | 'var' | [TypeName])?
+ *        ('final' [TypeAnnotation] | 'const' [TypeAnnotation] | 'var' | [TypeAnnotation])?
  *        'this' '.' [SimpleIdentifier] ([TypeParameterList]? [FormalParameterList])?
  *
  * Clients may not extend, implement or mix-in this class.
@@ -2840,17 +2851,16 @@
   void set thisKeyword(Token token);
 
   /**
-   * Return the name of the declared type of the parameter, or `null` if the
-   * parameter does not have a declared type. Note that if this is a
-   * function-typed field formal parameter this is the return type of the
-   * function.
+   * Return the declared type of the parameter, or `null` if the parameter does
+   * not have a declared type. Note that if this is a function-typed field
+   * formal parameter this is the return type of the function.
    */
-  TypeName get type;
+  TypeAnnotation get type;
 
   /**
-   * Set the name of the declared type of the parameter to the given [typeName].
+   * Set the declared type of the parameter to the given [type].
    */
-  void set type(TypeName typeName);
+  void set type(TypeAnnotation type);
 
   /**
    * Return the type parameters associated with this method, or `null` if this
@@ -3348,12 +3358,12 @@
    * Return the return type of the function, or `null` if no return type was
    * declared.
    */
-  TypeName get returnType;
+  TypeAnnotation get returnType;
 
   /**
-   * Set the return type of the function to the given [returnType].
+   * Set the return type of the function to the given [type].
    */
-  void set returnType(TypeName returnType);
+  void set returnType(TypeAnnotation type);
 }
 
 /**
@@ -3506,7 +3516,7 @@
  *        functionPrefix [TypeParameterList]? [FormalParameterList] ';'
  *
  *    functionPrefix ::=
- *        [TypeName]? [SimpleIdentifier]
+ *        [TypeAnnotation]? [SimpleIdentifier]
  *
  * Clients may not extend, implement or mix-in this class.
  */
@@ -3523,16 +3533,15 @@
   void set parameters(FormalParameterList parameters);
 
   /**
-   * Return the name of the return type of the function type being defined, or
-   * `null` if no return type was given.
+   * Return the return type of the function type being defined, or `null` if no
+   * return type was given.
    */
-  TypeName get returnType;
+  TypeAnnotation get returnType;
 
   /**
-   * Set the name of the return type of the function type being defined to the
-   * given [typeName].
+   * Set the return type of the function type being defined to the given [type].
    */
-  void set returnType(TypeName typeName);
+  void set returnType(TypeAnnotation type);
 
   /**
    * Return the type parameters for the function type, or `null` if the function
@@ -3551,7 +3560,7 @@
  * A function-typed formal parameter.
  *
  *    functionSignature ::=
- *        [TypeName]? [SimpleIdentifier] [TypeParameterList]? [FormalParameterList]
+ *        [TypeAnnotation]? [SimpleIdentifier] [TypeParameterList]? [FormalParameterList]
  *
  * Clients may not extend, implement or mix-in this class.
  */
@@ -3583,12 +3592,12 @@
    * Return the return type of the function, or `null` if the function does not
    * have a return type.
    */
-  TypeName get returnType;
+  TypeAnnotation get returnType;
 
   /**
    * Set the return type of the function to the given [type].
    */
-  void set returnType(TypeName type);
+  void set returnType(TypeAnnotation type);
 
   /**
    * Return the type parameters associated with this function, or `null` if
@@ -3604,6 +3613,128 @@
 }
 
 /**
+ * An anonymous function type.
+ *
+ *    functionType ::=
+ *        [TypeAnnotation]? 'Function' [TypeParameterList]? [FormalParameterList]
+ *
+ * where the FormalParameterList is being used to represent the following
+ * grammar, despite the fact that FormalParameterList can represent a much
+ * larger grammar than the one below. This is done in order to simplify the
+ * implementation.
+ *
+ *    parameterTypeList ::=
+ *        () |
+ *        ( normalParameterTypes ,? ) |
+ *        ( normalParameterTypes , optionalParameterTypes ) |
+ *        ( optionalParameterTypes )
+ *    namedParameterTypes ::=
+ *        { namedParameterType (, namedParameterType)* ,? }
+ *    namedParameterType ::=
+ *        [TypeAnnotation]? [SimpleIdentifier]
+ *    normalParameterTypes ::=
+ *        normalParameterType (, normalParameterType)*
+ *    normalParameterType ::=
+ *        [TypeAnnotation] [SimpleIdentifier]?
+ *    optionalParameterTypes ::=
+ *        optionalPositionalParameterTypes | namedParameterTypes
+ *    optionalPositionalParameterTypes ::=
+ *        [ normalParameterTypes ,? ]
+ *
+ * Clients may not extend, implement or mix-in this class.
+ */
+abstract class GenericFunctionType extends TypeAnnotation {
+  /**
+   * Return the keyword 'Function'.
+   */
+  Token get functionKeyword;
+
+  /**
+   * Set the keyword 'Function' to the given [token].
+   */
+  void set functionKeyword(Token token);
+
+  /**
+   * Return the parameters associated with the function type.
+   */
+  FormalParameterList get parameters;
+
+  /**
+   * Set the parameters associated with the function type to the given list of
+   * [parameters].
+   */
+  void set parameters(FormalParameterList parameters);
+
+  /**
+   * Return the return type of the function type being defined, or `null` if
+   * no return type was given.
+   */
+  TypeAnnotation get returnType;
+
+  /**
+   * Set the return type of the function type being defined to the given[type].
+   */
+  void set returnType(TypeAnnotation type);
+
+  /**
+   * Return the type parameters for the function type, or `null` if the function
+   * type does not have any type parameters.
+   */
+  TypeParameterList get typeParameters;
+
+  /**
+   * Set the type parameters for the function type to the given list of
+   * [typeParameters].
+   */
+  void set typeParameters(TypeParameterList typeParameters);
+}
+
+/**
+ * A generic type alias.
+ *
+ *    functionTypeAlias ::=
+ *        metadata 'typedef' [SimpleIdentifier] [TypeParameterList]? = [FunctionType] ';'
+ *
+ * Clients may not extend, implement or mix-in this class.
+ */
+abstract class GenericTypeAlias extends TypeAlias {
+  /**
+     * Return the equal sign separating the name being defined from the function
+     * type.
+     */
+  Token get equals;
+
+  /**
+     * Set the equal sign separating the name being defined from the function type
+     * to the given [token].
+     */
+  void set equals(Token token);
+
+  /**
+     * Return the type of function being defined by the alias.
+     */
+  GenericFunctionType get functionType;
+
+  /**
+     * Set the type of function being defined by the alias to the given
+     * [functionType].
+     */
+  void set functionType(GenericFunctionType functionType);
+
+  /**
+     * Return the type parameters for the function type, or `null` if the function
+     * type does not have any type parameters.
+     */
+  TypeParameterList get typeParameters;
+
+  /**
+     * Set the type parameters for the function type to the given list of
+     * [typeParameters].
+     */
+  void set typeParameters(TypeParameterList typeParameters);
+}
+
+/**
  * A combinator that restricts the names being imported to those that are not in
  * a given list.
  *
@@ -4303,7 +4434,7 @@
  * An is expression.
  *
  *    isExpression ::=
- *        [Expression] 'is' '!'? [TypeName]
+ *        [Expression] 'is' '!'? [TypeAnnotation]
  *
  * Clients may not extend, implement or mix-in this class.
  */
@@ -4340,14 +4471,14 @@
   void set notOperator(Token token);
 
   /**
-   * Return the name of the type being tested for.
+   * Return the type being tested for.
    */
-  TypeName get type;
+  TypeAnnotation get type;
 
   /**
-   * Set the name of the type being tested for to the given [name].
+   * Set the type being tested for to the given [type].
    */
-  void set type(TypeName name);
+  void set type(TypeAnnotation type);
 }
 
 /**
@@ -4466,7 +4597,7 @@
  * A list literal.
  *
  *    listLiteral ::=
- *        'const'? ('<' [TypeName] '>')? '[' ([Expression] ','?)? ']'
+ *        'const'? ('<' [TypeAnnotation] '>')? '[' ([Expression] ','?)? ']'
  *
  * Clients may not extend, implement or mix-in this class.
  */
@@ -4517,7 +4648,7 @@
  * A literal map.
  *
  *    mapLiteral ::=
- *        'const'? ('<' [TypeName] (',' [TypeName])* '>')?
+ *        'const'? ('<' [TypeAnnotation] (',' [TypeAnnotation])* '>')?
  *        '{' ([MapLiteralEntry] (',' [MapLiteralEntry])* ','?)? '}'
  *
  * Clients may not extend, implement or mix-in this class.
@@ -4719,12 +4850,12 @@
    * Return the return type of the method, or `null` if no return type was
    * declared.
    */
-  TypeName get returnType;
+  TypeAnnotation get returnType;
 
   /**
-   * Set the return type of the method to the given [typeName].
+   * Set the return type of the method to the given [type].
    */
-  void set returnType(TypeName typeName);
+  void set returnType(TypeAnnotation type);
 
   /**
    * Return the type parameters associated with this method, or `null` if this
@@ -5636,7 +5767,7 @@
  * A simple formal parameter.
  *
  *    simpleFormalParameter ::=
- *        ('final' [TypeName] | 'var' | [TypeName])? [SimpleIdentifier]
+ *        ('final' [TypeAnnotation] | 'var' | [TypeAnnotation])? [SimpleIdentifier]
  *
  * Clients may not extend, implement or mix-in this class.
  */
@@ -5654,15 +5785,15 @@
   void set keyword(Token token);
 
   /**
-   * Return the name of the declared type of the parameter, or `null` if the
-   * parameter does not have a declared type.
+   * Return the declared type of the parameter, or `null` if the parameter does
+   * not have a declared type.
    */
-  TypeName get type;
+  TypeAnnotation get type;
 
   /**
-   * Set the name of the declared type of the parameter to the given [typeName].
+   * Set the declared type of the parameter to the given [type].
    */
-  void set type(TypeName typeName);
+  void set type(TypeAnnotation type);
 }
 
 /**
@@ -6329,6 +6460,23 @@
 }
 
 /**
+ * A type annotation.
+ *
+ *    type ::=
+ *        [NamedType]
+ *      | [GenericFunctionType]
+ *
+ * Clients may not extend, implement or mix-in this class.
+ */
+abstract class TypeAnnotation extends AstNode {
+  /**
+   * Return the type being named, or `null` if the AST structure has not been
+   * resolved.
+   */
+  DartType get type;
+}
+
+/**
  * A list of type arguments.
  *
  *    typeArguments ::=
@@ -6340,7 +6488,7 @@
   /**
    * Return the type arguments associated with the type.
    */
-  NodeList<TypeName> get arguments;
+  NodeList<TypeAnnotation> get arguments;
 
   /**
    * Return the left bracket.
@@ -6405,7 +6553,7 @@
  *
  * Clients may not extend, implement or mix-in this class.
  */
-abstract class TypeName extends AstNode {
+abstract class TypeName extends TypeAnnotation {
   /**
    * Return `true` if this type is a deferred type.
    *
@@ -6437,12 +6585,6 @@
   void set question(Token question);
 
   /**
-   * Return the type being named, or `null` if the AST structure has not been
-   * resolved.
-   */
-  DartType get type;
-
-  /**
    * Set the type being named to the given [type].
    */
   void set type(DartType type);
@@ -6464,22 +6606,21 @@
  * A type parameter.
  *
  *    typeParameter ::=
- *        [SimpleIdentifier] ('extends' [TypeName])?
+ *        [SimpleIdentifier] ('extends' [TypeAnnotation])?
  *
  * Clients may not extend, implement or mix-in this class.
  */
 abstract class TypeParameter extends Declaration {
   /**
-   * Return the name of the upper bound for legal arguments, or `null` if there
-   * is no explicit upper bound.
+   * Return the upper bound for legal arguments, or `null` if there is no
+   * explicit upper bound.
    */
-  TypeName get bound;
+  TypeAnnotation get bound;
 
   /**
-   * Set the name of the upper bound for legal arguments to the given
-   * [typeName].
+   * Set the upper bound for legal arguments to the given [type].
    */
-  void set bound(TypeName typeName);
+  void set bound(TypeAnnotation type);
 
   /**
    * Return the token representing the 'extends' keyword, or `null` if there is
@@ -6662,10 +6803,10 @@
  *        finalConstVarOrType [VariableDeclaration] (',' [VariableDeclaration])*
  *
  *    finalConstVarOrType ::=
- *      | 'final' [TypeName]?
- *      | 'const' [TypeName]?
+ *      | 'final' [TypeAnnotation]?
+ *      | 'const' [TypeAnnotation]?
  *      | 'var'
- *      | [TypeName]
+ *      | [TypeAnnotation]
  *
  * Clients may not extend, implement or mix-in this class.
  */
@@ -6700,12 +6841,12 @@
    * Return the type of the variables being declared, or `null` if no type was
    * provided.
    */
-  TypeName get type;
+  TypeAnnotation get type;
 
   /**
-   * Set the type of the variables being declared to the given [typeName].
+   * Set the type of the variables being declared to the given [type].
    */
-  void set type(TypeName typeName);
+  void set type(TypeAnnotation type);
 
   /**
    * Return a list containing the individual variables being declared.
diff --git a/pkg/analyzer/lib/dart/ast/ast_factory.dart b/pkg/analyzer/lib/dart/ast/ast_factory.dart
index ffaf90e..48b918d 100644
--- a/pkg/analyzer/lib/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/dart/ast/ast_factory.dart
@@ -39,7 +39,7 @@
    * Returns a newly created as expression.
    */
   AsExpression asExpression(
-      Expression expression, Token asOperator, TypeName type);
+      Expression expression, Token asOperator, TypeAnnotation type);
 
   /**
    * Returns a newly created assert initializer. The [comma] and [message]
@@ -128,7 +128,7 @@
    */
   CatchClause catchClause(
       Token onKeyword,
-      TypeName exceptionType,
+      TypeAnnotation exceptionType,
       Token catchKeyword,
       Token leftParenthesis,
       SimpleIdentifier exceptionParameter,
@@ -290,7 +290,7 @@
       Comment comment,
       List<Annotation> metadata,
       Token keyword,
-      TypeName type,
+      TypeAnnotation type,
       SimpleIdentifier identifier);
 
   /**
@@ -423,7 +423,7 @@
       Comment comment,
       List<Annotation> metadata,
       Token keyword,
-      TypeName type,
+      TypeAnnotation type,
       Token thisKeyword,
       Token period,
       SimpleIdentifier identifier,
@@ -502,7 +502,7 @@
       Comment comment,
       List<Annotation> metadata,
       Token externalKeyword,
-      TypeName returnType,
+      TypeAnnotation returnType,
       Token propertyKeyword,
       SimpleIdentifier name,
       FunctionExpression functionExpression);
@@ -536,7 +536,7 @@
       Comment comment,
       List<Annotation> metadata,
       Token keyword,
-      TypeName returnType,
+      TypeAnnotation returnType,
       SimpleIdentifier name,
       TypeParameterList typeParameters,
       FormalParameterList parameters,
@@ -551,7 +551,7 @@
   FunctionTypedFormalParameter functionTypedFormalParameter(
       Comment comment,
       List<Annotation> metadata,
-      TypeName returnType,
+      TypeAnnotation returnType,
       SimpleIdentifier identifier,
       TypeParameterList typeParameters,
       FormalParameterList parameters,
@@ -642,7 +642,7 @@
    * if the sense of the test is not negated.
    */
   IsExpression isExpression(Expression expression, Token isOperator,
-      Token notOperator, TypeName type);
+      Token notOperator, TypeAnnotation type);
 
   /**
    * Returns a newly created label.
@@ -706,7 +706,7 @@
       List<Annotation> metadata,
       Token externalKeyword,
       Token modifierKeyword,
-      TypeName returnType,
+      TypeAnnotation returnType,
       Token propertyKeyword,
       Token operatorKeyword,
       SimpleIdentifier name,
@@ -849,7 +849,7 @@
       Comment comment,
       List<Annotation> metadata,
       Token keyword,
-      TypeName type,
+      TypeAnnotation type,
       SimpleIdentifier identifier);
 
   /**
@@ -948,7 +948,7 @@
    * Returns a newly created list of type arguments.
    */
   TypeArgumentList typeArgumentList(
-      Token leftBracket, List<TypeName> arguments, Token rightBracket);
+      Token leftBracket, List<TypeAnnotation> arguments, Token rightBracket);
 
   /**
    * Returns a newly created type name. The [typeArguments] can be `null` if
@@ -964,7 +964,7 @@
    * the parameter does not have an upper bound.
    */
   TypeParameter typeParameter(Comment comment, List<Annotation> metadata,
-      SimpleIdentifier name, Token extendsKeyword, TypeName bound);
+      SimpleIdentifier name, Token extendsKeyword, TypeAnnotation bound);
 
   /**
    * Returns a newly created list of type parameters.
@@ -989,10 +989,23 @@
       Comment comment,
       List<Annotation> metadata,
       Token keyword,
-      TypeName type,
+      TypeAnnotation type,
       List<VariableDeclaration> variables);
 
   /**
+   * Returns a newly created generic type alias. Either or both of the
+   * [comment] and [metadata] can be `null` if the variable list does not have
+   * the corresponding attribute. The [typeParameters] can be `null` if there
+   * are no type parameters.
+   */
+  GenericTypeAlias genericTypeAlias(Comment comment, List<Annotation> metadata, Token typedefKeyword, SimpleIdentifier name, TypeParameterList typeParameters, Token equals, GenericFunctionType functionType, Token semicolon);
+
+  /**
+   * Initialize a newly created generic function type.
+   */
+  GenericFunctionType genericFunctionType(TypeAnnotation returnType, Token functionKeyword, TypeParameterList typeParameters, FormalParameterList _parameters);
+
+  /**
    * Returns a newly created variable declaration statement.
    */
   VariableDeclarationStatement variableDeclarationStatement(
diff --git a/pkg/analyzer/lib/dart/ast/resolution_map.dart b/pkg/analyzer/lib/dart/ast/resolution_map.dart
index 37ee054..a9e59ff 100644
--- a/pkg/analyzer/lib/dart/ast/resolution_map.dart
+++ b/pkg/analyzer/lib/dart/ast/resolution_map.dart
@@ -279,7 +279,7 @@
    * Return the type being named by [node], or `null` if the AST structure has
    * not been resolved.
    */
-  DartType typeForTypeName(TypeName node);
+  DartType typeForTypeName(TypeAnnotation node);
 
   /**
    * Return the element associated with the uri of the directive [node], or
diff --git a/pkg/analyzer/lib/dart/ast/visitor.dart b/pkg/analyzer/lib/dart/ast/visitor.dart
index ad96bed..79f3bfb 100644
--- a/pkg/analyzer/lib/dart/ast/visitor.dart
+++ b/pkg/analyzer/lib/dart/ast/visitor.dart
@@ -50,7 +50,7 @@
  *
  *     visitor.visitAllNodes(rootNode);
  *
- * Clients may extend or implement this class.
+ * Clients may extend this class.
  */
 class BreadthFirstVisitor<R> extends GeneralizingAstVisitor<R> {
   /**
@@ -147,7 +147,7 @@
  * do so will cause the visit methods for superclasses of the node to not be
  * invoked and will cause the children of the visited node to not be visited.
  *
- * Clients may extend or implement this class.
+ * Clients may extend this class.
  */
 class GeneralizingAstVisitor<R> implements AstVisitor<R> {
   @override
@@ -336,6 +336,13 @@
       visitNormalFormalParameter(node);
 
   @override
+  R visitGenericFunctionType(GenericFunctionType node) =>
+      visitTypeAnnotation(node);
+
+  @override
+  R visitGenericTypeAlias(GenericTypeAlias node) => visitTypeAlias(node);
+
+  @override
   R visitHideCombinator(HideCombinator node) => visitCombinator(node);
 
   R visitIdentifier(Identifier node) => visitExpression(node);
@@ -528,6 +535,8 @@
 
   R visitTypeAlias(TypeAlias node) => visitNamedCompilationUnitMember(node);
 
+  R visitTypeAnnotation(TypeAnnotation node) => visitNode(node);
+
   @override
   R visitTypeArgumentList(TypeArgumentList node) => visitNode(node);
 
@@ -576,7 +585,7 @@
  * Failure to do so will cause the children of the visited node to not be
  * visited.
  *
- * Clients may extend or implement this class.
+ * Clients may extend this class.
  */
 class RecursiveAstVisitor<R> implements AstVisitor<R> {
   @override
@@ -880,6 +889,18 @@
   }
 
   @override
+  R visitGenericFunctionType(GenericFunctionType node) {
+    node.visitChildren(this);
+    return null;
+  }
+
+  @override
+  R visitGenericTypeAlias(GenericTypeAlias node) {
+    node.visitChildren(this);
+    return null;
+  }
+
+  @override
   R visitHideCombinator(HideCombinator node) {
     node.visitChildren(this);
     return null;
@@ -1241,7 +1262,7 @@
  * dispatch mechanism (and hence don't need to recursively visit a whole
  * structure) and that only need to visit a small number of node types.
  *
- * Clients may extend or implement this class.
+ * Clients may extend this class.
  */
 class SimpleAstVisitor<R> implements AstVisitor<R> {
   @override
@@ -1398,6 +1419,12 @@
       null;
 
   @override
+  R visitGenericFunctionType(GenericFunctionType node) => null;
+
+  @override
+  R visitGenericTypeAlias(GenericTypeAlias node) => null;
+
+  @override
   R visitHideCombinator(HideCombinator node) => null;
 
   @override
@@ -1579,7 +1606,366 @@
 }
 
 /**
- * An AST Visitor that captures visit call timings.
+ * An AST visitor that will throw an exception if any of the visit methods that
+ * are invoked have not been overridden. It is intended to be a superclass for
+ * classes that implement the visitor pattern and need to (a) override all of
+ * the visit methods or (b) need to override a subset of the visit method and
+ * want to catch when any other visit methods have been invoked.
+ *
+ * Clients may extend this class.
+ */
+class ThrowingAstVisitor<R> implements AstVisitor<R> {
+  @override
+  R visitAdjacentStrings(AdjacentStrings node) => _throw(node);
+
+  @override
+  R visitAnnotation(Annotation node) => _throw(node);
+
+  @override
+  R visitArgumentList(ArgumentList node) => _throw(node);
+
+  @override
+  R visitAsExpression(AsExpression node) => _throw(node);
+
+  @override
+  R visitAssertInitializer(AssertInitializer node) => _throw(node);
+
+  @override
+  R visitAssertStatement(AssertStatement node) => _throw(node);
+
+  @override
+  R visitAssignmentExpression(AssignmentExpression node) => _throw(node);
+
+  @override
+  R visitAwaitExpression(AwaitExpression node) => _throw(node);
+
+  @override
+  R visitBinaryExpression(BinaryExpression node) => _throw(node);
+
+  @override
+  R visitBlock(Block node) => _throw(node);
+
+  @override
+  R visitBlockFunctionBody(BlockFunctionBody node) => _throw(node);
+
+  @override
+  R visitBooleanLiteral(BooleanLiteral node) => _throw(node);
+
+  @override
+  R visitBreakStatement(BreakStatement node) => _throw(node);
+
+  @override
+  R visitCascadeExpression(CascadeExpression node) => _throw(node);
+
+  @override
+  R visitCatchClause(CatchClause node) => _throw(node);
+
+  @override
+  R visitClassDeclaration(ClassDeclaration node) => _throw(node);
+
+  @override
+  R visitClassTypeAlias(ClassTypeAlias node) => _throw(node);
+
+  @override
+  R visitComment(Comment node) => _throw(node);
+
+  @override
+  R visitCommentReference(CommentReference node) => _throw(node);
+
+  @override
+  R visitCompilationUnit(CompilationUnit node) => _throw(node);
+
+  @override
+  R visitConditionalExpression(ConditionalExpression node) => _throw(node);
+
+  @override
+  R visitConfiguration(Configuration node) => _throw(node);
+
+  @override
+  R visitConstructorDeclaration(ConstructorDeclaration node) => _throw(node);
+
+  @override
+  R visitConstructorFieldInitializer(ConstructorFieldInitializer node) =>
+      _throw(node);
+
+  @override
+  R visitConstructorName(ConstructorName node) => _throw(node);
+
+  @override
+  R visitContinueStatement(ContinueStatement node) => _throw(node);
+
+  @override
+  R visitDeclaredIdentifier(DeclaredIdentifier node) => _throw(node);
+
+  @override
+  R visitDefaultFormalParameter(DefaultFormalParameter node) => _throw(node);
+
+  @override
+  R visitDoStatement(DoStatement node) => _throw(node);
+
+  @override
+  R visitDottedName(DottedName node) => _throw(node);
+
+  @override
+  R visitDoubleLiteral(DoubleLiteral node) => _throw(node);
+
+  @override
+  R visitEmptyFunctionBody(EmptyFunctionBody node) => _throw(node);
+
+  @override
+  R visitEmptyStatement(EmptyStatement node) => _throw(node);
+
+  @override
+  R visitEnumConstantDeclaration(EnumConstantDeclaration node) => _throw(node);
+
+  @override
+  R visitEnumDeclaration(EnumDeclaration node) => _throw(node);
+
+  @override
+  R visitExportDirective(ExportDirective node) => _throw(node);
+
+  @override
+  R visitExpressionFunctionBody(ExpressionFunctionBody node) => _throw(node);
+
+  @override
+  R visitExpressionStatement(ExpressionStatement node) => _throw(node);
+
+  @override
+  R visitExtendsClause(ExtendsClause node) => _throw(node);
+
+  @override
+  R visitFieldDeclaration(FieldDeclaration node) => _throw(node);
+
+  @override
+  R visitFieldFormalParameter(FieldFormalParameter node) => _throw(node);
+
+  @override
+  R visitForEachStatement(ForEachStatement node) => _throw(node);
+
+  @override
+  R visitFormalParameterList(FormalParameterList node) => _throw(node);
+
+  @override
+  R visitForStatement(ForStatement node) => _throw(node);
+
+  @override
+  R visitFunctionDeclaration(FunctionDeclaration node) => _throw(node);
+
+  @override
+  R visitFunctionDeclarationStatement(FunctionDeclarationStatement node) =>
+      _throw(node);
+
+  @override
+  R visitFunctionExpression(FunctionExpression node) => _throw(node);
+
+  @override
+  R visitFunctionExpressionInvocation(FunctionExpressionInvocation node) =>
+      _throw(node);
+
+  @override
+  R visitFunctionTypeAlias(FunctionTypeAlias node) => _throw(node);
+
+  @override
+  R visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) =>
+      _throw(node);
+
+  @override
+  R visitGenericFunctionType(GenericFunctionType node) => _throw(node);
+
+  @override
+  R visitGenericTypeAlias(GenericTypeAlias node) => _throw(node);
+
+  @override
+  R visitHideCombinator(HideCombinator node) => _throw(node);
+
+  @override
+  R visitIfStatement(IfStatement node) => _throw(node);
+
+  @override
+  R visitImplementsClause(ImplementsClause node) => _throw(node);
+
+  @override
+  R visitImportDirective(ImportDirective node) => _throw(node);
+
+  @override
+  R visitIndexExpression(IndexExpression node) => _throw(node);
+
+  @override
+  R visitInstanceCreationExpression(InstanceCreationExpression node) =>
+      _throw(node);
+
+  @override
+  R visitIntegerLiteral(IntegerLiteral node) => _throw(node);
+
+  @override
+  R visitInterpolationExpression(InterpolationExpression node) => _throw(node);
+
+  @override
+  R visitInterpolationString(InterpolationString node) => _throw(node);
+
+  @override
+  R visitIsExpression(IsExpression node) => _throw(node);
+
+  @override
+  R visitLabel(Label node) => _throw(node);
+
+  @override
+  R visitLabeledStatement(LabeledStatement node) => _throw(node);
+
+  @override
+  R visitLibraryDirective(LibraryDirective node) => _throw(node);
+
+  @override
+  R visitLibraryIdentifier(LibraryIdentifier node) => _throw(node);
+
+  @override
+  R visitListLiteral(ListLiteral node) => _throw(node);
+
+  @override
+  R visitMapLiteral(MapLiteral node) => _throw(node);
+
+  @override
+  R visitMapLiteralEntry(MapLiteralEntry node) => _throw(node);
+
+  @override
+  R visitMethodDeclaration(MethodDeclaration node) => _throw(node);
+
+  @override
+  R visitMethodInvocation(MethodInvocation node) => _throw(node);
+
+  @override
+  R visitNamedExpression(NamedExpression node) => _throw(node);
+
+  @override
+  R visitNativeClause(NativeClause node) => _throw(node);
+
+  @override
+  R visitNativeFunctionBody(NativeFunctionBody node) => _throw(node);
+
+  @override
+  R visitNullLiteral(NullLiteral node) => _throw(node);
+
+  @override
+  R visitParenthesizedExpression(ParenthesizedExpression node) => _throw(node);
+
+  @override
+  R visitPartDirective(PartDirective node) => _throw(node);
+
+  @override
+  R visitPartOfDirective(PartOfDirective node) => _throw(node);
+
+  @override
+  R visitPostfixExpression(PostfixExpression node) => _throw(node);
+
+  @override
+  R visitPrefixedIdentifier(PrefixedIdentifier node) => _throw(node);
+
+  @override
+  R visitPrefixExpression(PrefixExpression node) => _throw(node);
+
+  @override
+  R visitPropertyAccess(PropertyAccess node) => _throw(node);
+
+  @override
+  R visitRedirectingConstructorInvocation(
+          RedirectingConstructorInvocation node) =>
+      _throw(node);
+
+  @override
+  R visitRethrowExpression(RethrowExpression node) => _throw(node);
+
+  @override
+  R visitReturnStatement(ReturnStatement node) => _throw(node);
+
+  @override
+  R visitScriptTag(ScriptTag node) => _throw(node);
+
+  @override
+  R visitShowCombinator(ShowCombinator node) => _throw(node);
+
+  @override
+  R visitSimpleFormalParameter(SimpleFormalParameter node) => _throw(node);
+
+  @override
+  R visitSimpleIdentifier(SimpleIdentifier node) => _throw(node);
+
+  @override
+  R visitSimpleStringLiteral(SimpleStringLiteral node) => _throw(node);
+
+  @override
+  R visitStringInterpolation(StringInterpolation node) => _throw(node);
+
+  @override
+  R visitSuperConstructorInvocation(SuperConstructorInvocation node) =>
+      _throw(node);
+
+  @override
+  R visitSuperExpression(SuperExpression node) => _throw(node);
+
+  @override
+  R visitSwitchCase(SwitchCase node) => _throw(node);
+
+  @override
+  R visitSwitchDefault(SwitchDefault node) => _throw(node);
+
+  @override
+  R visitSwitchStatement(SwitchStatement node) => _throw(node);
+
+  @override
+  R visitSymbolLiteral(SymbolLiteral node) => _throw(node);
+
+  @override
+  R visitThisExpression(ThisExpression node) => _throw(node);
+
+  @override
+  R visitThrowExpression(ThrowExpression node) => _throw(node);
+
+  @override
+  R visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) =>
+      _throw(node);
+
+  @override
+  R visitTryStatement(TryStatement node) => _throw(node);
+
+  @override
+  R visitTypeArgumentList(TypeArgumentList node) => _throw(node);
+
+  @override
+  R visitTypeName(TypeName node) => _throw(node);
+
+  @override
+  R visitTypeParameter(TypeParameter node) => _throw(node);
+
+  @override
+  R visitTypeParameterList(TypeParameterList node) => _throw(node);
+
+  @override
+  R visitVariableDeclaration(VariableDeclaration node) => _throw(node);
+
+  @override
+  R visitVariableDeclarationList(VariableDeclarationList node) => _throw(node);
+
+  @override
+  R visitVariableDeclarationStatement(VariableDeclarationStatement node) =>
+      _throw(node);
+
+  @override
+  R visitWhileStatement(WhileStatement node) => _throw(node);
+
+  @override
+  R visitWithClause(WithClause node) => _throw(node);
+  @override
+  R visitYieldStatement(YieldStatement node) => _throw(node);
+
+  R _throw(AstNode node) {
+    throw new Exception('Missing implementation of visit${node.runtimeType}');
+  }
+}
+
+/**
+ * An AST visitor that captures visit call timings.
+ *
+ * Clients may not extend, implement or mix-in this class.
  */
 class TimedAstVisitor<T> implements AstVisitor<T> {
   /**
@@ -2000,6 +2386,22 @@
   }
 
   @override
+  T visitGenericFunctionType(GenericFunctionType node) {
+    stopwatch.start();
+    T result = _baseVisitor.visitGenericFunctionType(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
+  T visitGenericTypeAlias(GenericTypeAlias node) {
+    stopwatch.start();
+    T result = _baseVisitor.visitGenericTypeAlias(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
   T visitHideCombinator(HideCombinator node) {
     stopwatch.start();
     T result = _baseVisitor.visitHideCombinator(node);
@@ -2483,7 +2885,7 @@
  * Failure to do so will cause the children of the visited node to not be
  * visited.
  *
- * Clients may extend or implement this class.
+ * Clients may extend this class.
  */
 class UnifyingAstVisitor<R> implements AstVisitor<R> {
   @override
@@ -2642,6 +3044,12 @@
       visitNode(node);
 
   @override
+  R visitGenericFunctionType(GenericFunctionType node) => visitNode(node);
+
+  @override
+  R visitGenericTypeAlias(GenericTypeAlias node) => visitNode(node);
+
+  @override
   R visitHideCombinator(HideCombinator node) => visitNode(node);
 
   @override
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index c235ea3..5edb586 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -1017,7 +1017,14 @@
 /**
  * An object that can be used to visit an element structure.
  *
- * Clients may implement this class.
+ * Clients may not extend, implement or mix-in this class. There are classes
+ * that implement this interface that provide useful default behaviors in
+ * `package:analyzer/dart/ast/visitor.dart`. A couple of the most useful include
+ * * SimpleElementVisitor which implements every visit method by doing nothing,
+ * * RecursiveElementVisitor which will cause every node in a structure to be
+ *   visited, and
+ * * ThrowingElementVisitor which implements every visit method by throwing an
+ *   exception.
  */
 abstract class ElementVisitor<R> {
   R visitClassElement(ClassElement element);
diff --git a/pkg/analyzer/lib/dart/element/visitor.dart b/pkg/analyzer/lib/dart/element/visitor.dart
index 185357d..c34c771 100644
--- a/pkg/analyzer/lib/dart/element/visitor.dart
+++ b/pkg/analyzer/lib/dart/element/visitor.dart
@@ -82,7 +82,7 @@
  * do so will cause the visit methods for superclasses of the element to not be
  * invoked and will cause the children of the visited node to not be visited.
  *
- * Clients may extend or implement this class.
+ * Clients may extend this class.
  */
 class GeneralizingElementVisitor<R> implements ElementVisitor<R> {
   @override
@@ -189,7 +189,7 @@
  * children. Failure to do so will cause the children of the visited element to
  * not be visited.
  *
- * Clients may extend or implement this class.
+ * Clients may extend this class.
  */
 class RecursiveElementVisitor<R> implements ElementVisitor<R> {
   @override
@@ -313,7 +313,7 @@
  * mechanism (and hence don't need to recursively visit a whole structure) and
  * that only need to visit a small number of element types.
  *
- * Clients may extend or implement this class.
+ * Clients may extend this class.
  */
 class SimpleElementVisitor<R> implements ElementVisitor<R> {
   @override
@@ -374,3 +374,82 @@
   @override
   R visitTypeParameterElement(TypeParameterElement element) => null;
 }
+
+/**
+ * An AST visitor that will throw an exception if any of the visit methods that
+ * are invoked have not been overridden. It is intended to be a superclass for
+ * classes that implement the visitor pattern and need to (a) override all of
+ * the visit methods or (b) need to override a subset of the visit method and
+ * want to catch when any other visit methods have been invoked.
+ *
+ * Clients may extend this class.
+ */
+class ThrowingElementVisitor<R> implements ElementVisitor<R> {
+  @override
+  R visitClassElement(ClassElement element) => _throw(element);
+
+  @override
+  R visitCompilationUnitElement(CompilationUnitElement element) =>
+      _throw(element);
+
+  @override
+  R visitConstructorElement(ConstructorElement element) => _throw(element);
+
+  @override
+  R visitExportElement(ExportElement element) => _throw(element);
+
+  @override
+  R visitFieldElement(FieldElement element) => _throw(element);
+
+  @override
+  R visitFieldFormalParameterElement(FieldFormalParameterElement element) =>
+      _throw(element);
+
+  @override
+  R visitFunctionElement(FunctionElement element) => _throw(element);
+
+  @override
+  R visitFunctionTypeAliasElement(FunctionTypeAliasElement element) =>
+      _throw(element);
+
+  @override
+  R visitImportElement(ImportElement element) => _throw(element);
+
+  @override
+  R visitLabelElement(LabelElement element) => _throw(element);
+
+  @override
+  R visitLibraryElement(LibraryElement element) => _throw(element);
+
+  @override
+  R visitLocalVariableElement(LocalVariableElement element) => _throw(element);
+
+  @override
+  R visitMethodElement(MethodElement element) => _throw(element);
+
+  @override
+  R visitMultiplyDefinedElement(MultiplyDefinedElement element) =>
+      _throw(element);
+
+  @override
+  R visitParameterElement(ParameterElement element) => _throw(element);
+
+  @override
+  R visitPrefixElement(PrefixElement element) => _throw(element);
+
+  @override
+  R visitPropertyAccessorElement(PropertyAccessorElement element) =>
+      _throw(element);
+
+  @override
+  R visitTopLevelVariableElement(TopLevelVariableElement element) =>
+      _throw(element);
+
+  @override
+  R visitTypeParameterElement(TypeParameterElement element) => _throw(element);
+
+  R _throw(Element element) {
+    throw new Exception(
+        'Missing implementation of visit${element.runtimeType}');
+  }
+}
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index c2865a5..4f1234e 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -73,7 +73,7 @@
   /**
    * The version of data format, should be incremented on every format change.
    */
-  static const int DATA_VERSION = 9;
+  static const int DATA_VERSION = 10;
 
   /**
    * The name of the driver, e.g. the name of the folder.
@@ -297,6 +297,11 @@
   Set<String> get knownFiles => _fsState.knownFilePaths;
 
   /**
+   * Return the number of files scheduled for analysis.
+   */
+  int get numberOfFilesToAnalyze => _filesToAnalyze.length;
+
+  /**
    * Return the list of files that the driver should try to analyze sooner.
    */
   List<String> get priorityFiles => _priorityFiles.toList(growable: false);
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 3238aed..862b16c 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -504,15 +504,15 @@
   Token asOperator;
 
   /**
-   * The name of the type being cast to.
+   * The type being cast to.
    */
-  TypeName _type;
+  TypeAnnotation _type;
 
   /**
    * Initialize a newly created as expression.
    */
   AsExpressionImpl(
-      ExpressionImpl expression, this.asOperator, TypeNameImpl type) {
+      ExpressionImpl expression, this.asOperator, TypeAnnotationImpl type) {
     _expression = _becomeParentOf(expression);
     _type = _becomeParentOf(type);
   }
@@ -539,11 +539,11 @@
   int get precedence => 7;
 
   @override
-  TypeName get type => _type;
+  TypeAnnotation get type => _type;
 
   @override
-  void set type(TypeName name) {
-    _type = _becomeParentOf(name as AstNodeImpl);
+  void set type(TypeAnnotation type) {
+    _type = _becomeParentOf(type as AstNodeImpl);
   }
 
   @override
@@ -1575,7 +1575,7 @@
    * The type of exceptions caught by this catch clause, or `null` if this catch
    * clause catches every type of exception.
    */
-  TypeName _exceptionType;
+  TypeAnnotation _exceptionType;
 
   /**
    * The token representing the 'catch' keyword, or `null` if there is no
@@ -1628,7 +1628,7 @@
    */
   CatchClauseImpl(
       this.onKeyword,
-      TypeNameImpl exceptionType,
+      TypeAnnotationImpl exceptionType,
       this.catchKeyword,
       this.leftParenthesis,
       SimpleIdentifierImpl exceptionParameter,
@@ -1682,10 +1682,10 @@
   }
 
   @override
-  TypeName get exceptionType => _exceptionType;
+  TypeAnnotation get exceptionType => _exceptionType;
 
   @override
-  void set exceptionType(TypeName exceptionType) {
+  void set exceptionType(TypeAnnotation exceptionType) {
     _exceptionType = _becomeParentOf(exceptionType as AstNodeImpl);
   }
 
@@ -3294,7 +3294,7 @@
    * The name of the declared type of the parameter, or `null` if the parameter
    * does not have a declared type.
    */
-  TypeName _type;
+  TypeAnnotation _type;
 
   /**
    * The name of the variable being declared.
@@ -3308,7 +3308,7 @@
    * given. The [type] must be `null` if the keyword is 'var'.
    */
   DeclaredIdentifierImpl(CommentImpl comment, List<Annotation> metadata,
-      this.keyword, TypeNameImpl type, SimpleIdentifierImpl identifier)
+      this.keyword, TypeAnnotationImpl type, SimpleIdentifierImpl identifier)
       : super(comment, metadata) {
     _type = _becomeParentOf(type);
     _identifier = _becomeParentOf(identifier);
@@ -3354,11 +3354,11 @@
   bool get isFinal => keyword?.keyword == Keyword.FINAL;
 
   @override
-  TypeName get type => _type;
+  TypeAnnotation get type => _type;
 
   @override
-  void set type(TypeName typeName) {
-    _type = _becomeParentOf(typeName as AstNodeImpl);
+  void set type(TypeAnnotation type) {
+    _type = _becomeParentOf(type as AstNodeImpl);
   }
 
   @override
@@ -4408,7 +4408,7 @@
    * The name of the declared type of the parameter, or `null` if the parameter
    * does not have a declared type.
    */
-  TypeName _type;
+  TypeAnnotation _type;
 
   /**
    * The token representing the 'this' keyword.
@@ -4447,7 +4447,7 @@
       CommentImpl comment,
       List<Annotation> metadata,
       this.keyword,
-      TypeNameImpl type,
+      TypeAnnotationImpl type,
       this.thisKeyword,
       this.period,
       SimpleIdentifierImpl identifier,
@@ -4501,11 +4501,11 @@
   }
 
   @override
-  TypeName get type => _type;
+  TypeAnnotation get type => _type;
 
   @override
-  void set type(TypeName typeName) {
-    _type = _becomeParentOf(typeName as AstNodeImpl);
+  void set type(TypeAnnotation type) {
+    _type = _becomeParentOf(type as AstNodeImpl);
   }
 
   @override
@@ -5084,7 +5084,7 @@
   /**
    * The return type of the function, or `null` if no return type was declared.
    */
-  TypeName _returnType;
+  TypeAnnotation _returnType;
 
   /**
    * The token representing the 'get' or 'set' keyword, or `null` if this is a
@@ -5110,7 +5110,7 @@
       CommentImpl comment,
       List<Annotation> metadata,
       this.externalKeyword,
-      TypeNameImpl returnType,
+      TypeAnnotationImpl returnType,
       this.propertyKeyword,
       SimpleIdentifierImpl name,
       FunctionExpressionImpl functionExpression)
@@ -5162,11 +5162,11 @@
   bool get isSetter => propertyKeyword?.keyword == Keyword.SET;
 
   @override
-  TypeName get returnType => _returnType;
+  TypeAnnotation get returnType => _returnType;
 
   @override
-  void set returnType(TypeName returnType) {
-    _returnType = _becomeParentOf(returnType as AstNodeImpl);
+  void set returnType(TypeAnnotation type) {
+    _returnType = _becomeParentOf(type as AstNodeImpl);
   }
 
   @override
@@ -5195,8 +5195,9 @@
   /**
    * Initialize a newly created function declaration statement.
    */
-  FunctionDeclarationStatementImpl(FunctionDeclaration functionDeclaration) {
-    _functionDeclaration = _becomeParentOf(functionDeclaration as AstNodeImpl);
+  FunctionDeclarationStatementImpl(
+      FunctionDeclarationImpl functionDeclaration) {
+    _functionDeclaration = _becomeParentOf(functionDeclaration);
   }
 
   @override
@@ -5434,7 +5435,7 @@
    * The name of the return type of the function type being defined, or `null`
    * if no return type was given.
    */
-  TypeName _returnType;
+  TypeAnnotation _returnType;
 
   /**
    * The type parameters for the function type, or `null` if the function type
@@ -5458,7 +5459,7 @@
       CommentImpl comment,
       List<Annotation> metadata,
       Token keyword,
-      TypeNameImpl returnType,
+      TypeAnnotationImpl returnType,
       SimpleIdentifierImpl name,
       TypeParameterListImpl typeParameters,
       FormalParameterListImpl parameters,
@@ -5491,11 +5492,11 @@
   }
 
   @override
-  TypeName get returnType => _returnType;
+  TypeAnnotation get returnType => _returnType;
 
   @override
-  void set returnType(TypeName typeName) {
-    _returnType = _becomeParentOf(typeName as AstNodeImpl);
+  void set returnType(TypeAnnotation type) {
+    _returnType = _becomeParentOf(type as AstNodeImpl);
   }
 
   @override
@@ -5532,7 +5533,7 @@
    * The return type of the function, or `null` if the function does not have a
    * return type.
    */
-  TypeName _returnType;
+  TypeAnnotation _returnType;
 
   /**
    * The type parameters associated with the function, or `null` if the function
@@ -5557,7 +5558,7 @@
   FunctionTypedFormalParameterImpl(
       CommentImpl comment,
       List<Annotation> metadata,
-      TypeNameImpl returnType,
+      TypeAnnotationImpl returnType,
       SimpleIdentifierImpl identifier,
       TypeParameterListImpl typeParameters,
       FormalParameterListImpl parameters,
@@ -5598,10 +5599,10 @@
   }
 
   @override
-  TypeName get returnType => _returnType;
+  TypeAnnotation get returnType => _returnType;
 
   @override
-  void set returnType(TypeName type) {
+  void set returnType(TypeAnnotation type) {
     _returnType = _becomeParentOf(type as AstNodeImpl);
   }
 
@@ -5628,6 +5629,214 @@
 }
 
 /**
+ * An anonymous function type.
+ *
+ *    functionType ::=
+ *        [TypeAnnotation]? 'Function' [TypeParameterList]? [FormalParameterList]
+ *
+ * where the FormalParameterList is being used to represent the following
+ * grammar, despite the fact that FormalParameterList can represent a much
+ * larger grammar than the one below. This is done in order to simplify the
+ * implementation.
+ *
+ *    parameterTypeList ::=
+ *        () |
+ *        ( normalParameterTypes ,? ) |
+ *        ( normalParameterTypes , optionalParameterTypes ) |
+ *        ( optionalParameterTypes )
+ *    namedParameterTypes ::=
+ *        { namedParameterType (, namedParameterType)* ,? }
+ *    namedParameterType ::=
+ *        [TypeAnnotation]? [SimpleIdentifier]
+ *    normalParameterTypes ::=
+ *        normalParameterType (, normalParameterType)*
+ *    normalParameterType ::=
+ *        [TypeAnnotation] [SimpleIdentifier]?
+ *    optionalParameterTypes ::=
+ *        optionalPositionalParameterTypes | namedParameterTypes
+ *    optionalPositionalParameterTypes ::=
+ *        [ normalParameterTypes ,? ]
+ */
+class GenericFunctionTypeImpl extends TypeAnnotationImpl
+    implements GenericFunctionType {
+  /**
+   * The name of the return type of the function type being defined, or
+   * `null` if no return type was given.
+   */
+  TypeAnnotation _returnType;
+
+  @override
+  Token functionKeyword;
+
+  /**
+   * The type parameters for the function type, or `null` if the function type
+   * does not have any type parameters.
+   */
+  TypeParameterList _typeParameters;
+
+  /**
+   * The parameters associated with the function type.
+   */
+  FormalParameterList _parameters;
+
+  /**
+   * Initialize a newly created generic function type.
+   */
+  GenericFunctionTypeImpl(
+      TypeAnnotationImpl returnType,
+      this.functionKeyword,
+      TypeParameterListImpl typeParameters,
+      FormalParameterListImpl parameters) {
+    _returnType = _becomeParentOf(returnType);
+    _typeParameters = _becomeParentOf(typeParameters);
+    _parameters = _becomeParentOf(parameters);
+  }
+
+  @override
+  Token get beginToken =>
+      _returnType == null ? functionKeyword : _returnType.beginToken;
+
+  @override
+  Iterable<SyntacticEntity> get childEntities => new ChildEntities()
+    ..add(_returnType)
+    ..add(functionKeyword)
+    ..add(_typeParameters)
+    ..add(_parameters);
+
+  @override
+  Token get endToken => _parameters.endToken;
+
+  @override
+  FormalParameterList get parameters => _parameters;
+
+  @override
+  void set parameters(FormalParameterList parameters) {
+    _parameters = _becomeParentOf(parameters as AstNodeImpl);
+  }
+
+  @override
+  TypeAnnotation get returnType => _returnType;
+
+  @override
+  void set returnType(TypeAnnotation type) {
+    _returnType = _becomeParentOf(type as AstNodeImpl);
+  }
+
+  @override
+  DartType get type => null;
+
+  /**
+   * Return the type parameters for the function type, or `null` if the function
+   * type does not have any type parameters.
+   */
+  TypeParameterList get typeParameters => _typeParameters;
+
+  /**
+   * Set the type parameters for the function type to the given list of
+   * [typeParameters].
+   */
+  void set typeParameters(TypeParameterList typeParameters) {
+    _typeParameters = _becomeParentOf(typeParameters as AstNodeImpl);
+  }
+
+  // TODO: implement type
+  @override
+  dynamic/*=E*/ accept/*<E>*/(AstVisitor/*<E>*/ visitor) {
+    return visitor.visitGenericFunctionType(this);
+  }
+
+  @override
+  void visitChildren(AstVisitor visitor) {
+    _returnType?.accept(visitor);
+    _typeParameters?.accept(visitor);
+    _parameters?.accept(visitor);
+  }
+}
+
+/**
+ * A generic type alias.
+ *
+ *    functionTypeAlias ::=
+ *        metadata 'typedef' [SimpleIdentifier] [TypeParameterList]? = [FunctionType] ';'
+ */
+class GenericTypeAliasImpl extends TypeAliasImpl implements GenericTypeAlias {
+  /**
+   * The type parameters for the function type, or `null` if the function
+   * type does not have any type parameters.
+   */
+  TypeParameterList _typeParameters;
+
+  @override
+  Token equals;
+
+  /**
+   * The type of function being defined by the alias.
+   */
+  GenericFunctionType _functionType;
+
+  /**
+   * Returns a newly created generic type alias. Either or both of the
+   * [comment] and [metadata] can be `null` if the variable list does not have
+   * the corresponding attribute. The [typeParameters] can be `null` if there
+   * are no type parameters.
+   */
+  GenericTypeAliasImpl(
+      Comment comment,
+      List<Annotation> metadata,
+      Token typedefToken,
+      SimpleIdentifier name,
+      TypeParameterListImpl typeParameters,
+      this.equals,
+      GenericFunctionTypeImpl functionType,
+      Token semicolon)
+      : super(comment, metadata, typedefToken, name, semicolon) {
+    _typeParameters = _becomeParentOf(typeParameters);
+    _functionType = _becomeParentOf(functionType);
+  }
+
+  @override
+  Iterable<SyntacticEntity> get childEntities => new ChildEntities()
+    ..addAll(metadata)
+    ..add(typedefKeyword)
+    ..add(name)
+    ..add(_typeParameters)
+    ..add(equals)
+    ..add(_functionType);
+  @override
+  Element get element => null;
+
+  @override
+  GenericFunctionType get functionType => _functionType;
+
+  @override
+  void set functionType(GenericFunctionType functionType) {
+    _functionType = _becomeParentOf(functionType as AstNodeImpl);
+  }
+
+  @override
+  TypeParameterList get typeParameters => _typeParameters;
+
+  @override
+  void set typeParameters(TypeParameterList typeParameters) {
+    _typeParameters = _becomeParentOf(typeParameters as AstNodeImpl);
+  }
+
+  @override
+  dynamic/*=E*/ accept/*<E>*/(AstVisitor/*<E>*/ visitor) {
+    return visitor.visitGenericTypeAlias(this);
+  }
+
+  // TODO: implement element
+  @override
+  void visitChildren(AstVisitor visitor) {
+    super.visitChildren(visitor);
+    name?.accept(visitor);
+    _typeParameters?.accept(visitor);
+    _functionType?.accept(visitor);
+  }
+}
+
+/**
  * A combinator that restricts the names being imported to those that are not in
  * a given list.
  *
@@ -6527,14 +6736,14 @@
   /**
    * The name of the type being tested for.
    */
-  TypeName _type;
+  TypeAnnotation _type;
 
   /**
    * Initialize a newly created is expression. The [notOperator] can be `null`
    * if the sense of the test is not negated.
    */
   IsExpressionImpl(ExpressionImpl expression, this.isOperator, this.notOperator,
-      TypeNameImpl type) {
+      TypeAnnotationImpl type) {
     _expression = _becomeParentOf(expression);
     _type = _becomeParentOf(type);
   }
@@ -6564,11 +6773,11 @@
   int get precedence => 7;
 
   @override
-  TypeName get type => _type;
+  TypeAnnotation get type => _type;
 
   @override
-  void set type(TypeName name) {
-    _type = _becomeParentOf(name as AstNodeImpl);
+  void set type(TypeAnnotation type) {
+    _type = _becomeParentOf(type as AstNodeImpl);
   }
 
   @override
@@ -7124,7 +7333,7 @@
   /**
    * The return type of the method, or `null` if no return type was declared.
    */
-  TypeName _returnType;
+  TypeAnnotation _returnType;
 
   /**
    * The token representing the 'get' or 'set' keyword, or `null` if this is a
@@ -7178,7 +7387,7 @@
       List<Annotation> metadata,
       this.externalKeyword,
       this.modifierKeyword,
-      TypeNameImpl returnType,
+      TypeAnnotationImpl returnType,
       this.propertyKeyword,
       this.operatorKeyword,
       SimpleIdentifierImpl name,
@@ -7277,11 +7486,11 @@
   }
 
   @override
-  TypeName get returnType => _returnType;
+  TypeAnnotation get returnType => _returnType;
 
   @override
-  void set returnType(TypeName typeName) {
-    _returnType = _becomeParentOf(typeName as AstNodeImpl);
+  void set returnType(TypeAnnotation type) {
+    _returnType = _becomeParentOf(type as AstNodeImpl);
   }
 
   @override
@@ -8991,7 +9200,7 @@
    * The name of the declared type of the parameter, or `null` if the parameter
    * does not have a declared type.
    */
-  TypeName _type;
+  TypeAnnotation _type;
 
   /**
    * Initialize a newly created formal parameter. Either or both of the
@@ -9000,7 +9209,7 @@
    * specified. The [type] must be `null` if the keyword is 'var'.
    */
   SimpleFormalParameterImpl(CommentImpl comment, List<Annotation> metadata,
-      this.keyword, TypeNameImpl type, SimpleIdentifierImpl identifier)
+      this.keyword, TypeAnnotationImpl type, SimpleIdentifierImpl identifier)
       : super(comment, metadata, identifier) {
     _type = _becomeParentOf(type);
   }
@@ -9032,11 +9241,11 @@
   bool get isFinal => keyword?.keyword == Keyword.FINAL;
 
   @override
-  TypeName get type => _type;
+  TypeAnnotation get type => _type;
 
   @override
-  void set type(TypeName typeName) {
-    _type = _becomeParentOf(typeName as AstNodeImpl);
+  void set type(TypeAnnotation type) {
+    _type = _becomeParentOf(type as AstNodeImpl);
   }
 
   @override
@@ -10299,6 +10508,16 @@
 }
 
 /**
+ * A type annotation.
+ *
+ *    type ::=
+ *        [NamedType]
+ *      | [GenericFunctionType]
+ */
+abstract class TypeAnnotationImpl extends AstNodeImpl
+    implements TypeAnnotation {}
+
+/**
  * A list of type arguments.
  *
  *    typeArguments ::=
@@ -10313,7 +10532,7 @@
   /**
    * The type arguments associated with the type.
    */
-  NodeList<TypeName> _arguments;
+  NodeList<TypeAnnotation> _arguments;
 
   /**
    * The right bracket.
@@ -10324,12 +10543,12 @@
    * Initialize a newly created list of type arguments.
    */
   TypeArgumentListImpl(
-      this.leftBracket, List<TypeName> arguments, this.rightBracket) {
-    _arguments = new NodeListImpl<TypeName>(this, arguments);
+      this.leftBracket, List<TypeAnnotation> arguments, this.rightBracket) {
+    _arguments = new NodeListImpl<TypeAnnotation>(this, arguments);
   }
 
   @override
-  NodeList<TypeName> get arguments => _arguments;
+  NodeList<TypeAnnotation> get arguments => _arguments;
 
   @override
   Token get beginToken => leftBracket;
@@ -10406,7 +10625,7 @@
  *    typeName ::=
  *        [Identifier] typeArguments?
  */
-class TypeNameImpl extends AstNodeImpl implements TypeName {
+class TypeNameImpl extends TypeAnnotationImpl implements TypeName {
   /**
    * The name of the type.
    */
@@ -10512,7 +10731,7 @@
    * The name of the upper bound for legal arguments, or `null` if there is no
    * explicit upper bound.
    */
-  TypeName _bound;
+  TypeAnnotation _bound;
 
   /**
    * Initialize a newly created type parameter. Either or both of the [comment]
@@ -10521,18 +10740,18 @@
    * the parameter does not have an upper bound.
    */
   TypeParameterImpl(CommentImpl comment, List<Annotation> metadata,
-      SimpleIdentifierImpl name, this.extendsKeyword, TypeNameImpl bound)
+      SimpleIdentifierImpl name, this.extendsKeyword, TypeAnnotationImpl bound)
       : super(comment, metadata) {
     _name = _becomeParentOf(name);
     _bound = _becomeParentOf(bound);
   }
 
   @override
-  TypeName get bound => _bound;
+  TypeAnnotation get bound => _bound;
 
   @override
-  void set bound(TypeName typeName) {
-    _bound = _becomeParentOf(typeName as AstNodeImpl);
+  void set bound(TypeAnnotation type) {
+    _bound = _becomeParentOf(type as AstNodeImpl);
   }
 
   @override
@@ -10890,7 +11109,7 @@
   /**
    * The type of the variables being declared, or `null` if no type was provided.
    */
-  TypeName _type;
+  TypeAnnotation _type;
 
   /**
    * A list containing the individual variables being declared.
@@ -10903,8 +11122,12 @@
    * the corresponding attribute. The [keyword] can be `null` if a type was
    * specified. The [type] must be `null` if the keyword is 'var'.
    */
-  VariableDeclarationListImpl(CommentImpl comment, List<Annotation> metadata,
-      this.keyword, TypeNameImpl type, List<VariableDeclaration> variables)
+  VariableDeclarationListImpl(
+      CommentImpl comment,
+      List<Annotation> metadata,
+      this.keyword,
+      TypeAnnotationImpl type,
+      List<VariableDeclaration> variables)
       : super(comment, metadata) {
     _type = _becomeParentOf(type);
     _variables = new NodeListImpl<VariableDeclaration>(this, variables);
@@ -10937,11 +11160,11 @@
   bool get isFinal => keyword?.keyword == Keyword.FINAL;
 
   @override
-  TypeName get type => _type;
+  TypeAnnotation get type => _type;
 
   @override
-  void set type(TypeName typeName) {
-    _type = _becomeParentOf(typeName as AstNodeImpl);
+  void set type(TypeAnnotation type) {
+    _type = _becomeParentOf(type as AstNodeImpl);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
index 72079b6..482ae01 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
@@ -29,7 +29,7 @@
 
   @override
   AsExpression asExpression(
-          Expression expression, Token asOperator, TypeName type) =>
+          Expression expression, Token asOperator, TypeAnnotation type) =>
       new AsExpressionImpl(expression, asOperator, type);
 
   @override
@@ -98,7 +98,7 @@
   @override
   CatchClause catchClause(
           Token onKeyword,
-          TypeName exceptionType,
+          TypeAnnotation exceptionType,
           Token catchKeyword,
           Token leftParenthesis,
           SimpleIdentifier exceptionParameter,
@@ -262,7 +262,7 @@
           Comment comment,
           List<Annotation> metadata,
           Token keyword,
-          TypeName type,
+          TypeAnnotation type,
           SimpleIdentifier identifier) =>
       new DeclaredIdentifierImpl(comment, metadata, keyword, type, identifier);
 
@@ -367,7 +367,7 @@
           Comment comment,
           List<Annotation> metadata,
           Token keyword,
-          TypeName type,
+          TypeAnnotation type,
           Token thisKeyword,
           Token period,
           SimpleIdentifier identifier,
@@ -455,7 +455,7 @@
           Comment comment,
           List<Annotation> metadata,
           Token externalKeyword,
-          TypeName returnType,
+          TypeAnnotation returnType,
           Token propertyKeyword,
           SimpleIdentifier name,
           FunctionExpression functionExpression) =>
@@ -483,7 +483,7 @@
           Comment comment,
           List<Annotation> metadata,
           Token keyword,
-          TypeName returnType,
+          TypeAnnotation returnType,
           SimpleIdentifier name,
           TypeParameterList typeParameters,
           FormalParameterList parameters,
@@ -495,7 +495,7 @@
   FunctionTypedFormalParameter functionTypedFormalParameter(
           Comment comment,
           List<Annotation> metadata,
-          TypeName returnType,
+          TypeAnnotation returnType,
           SimpleIdentifier identifier,
           TypeParameterList typeParameters,
           FormalParameterList parameters,
@@ -504,6 +504,28 @@
           identifier, typeParameters, parameters, question);
 
   @override
+  GenericFunctionType genericFunctionType(
+          TypeAnnotation returnType,
+          Token functionKeyword,
+          TypeParameterList typeParameters,
+          FormalParameterList _parameters) =>
+      new GenericFunctionTypeImpl(
+          returnType, functionKeyword, typeParameters, _parameters);
+
+  @override
+  GenericTypeAlias genericTypeAlias(
+          Comment comment,
+          List<Annotation> metadata,
+          Token typedefKeyword,
+          SimpleIdentifier name,
+          TypeParameterList typeParameters,
+          Token equals,
+          GenericFunctionType functionType,
+          Token semicolon) =>
+      new GenericTypeAliasImpl(comment, metadata, typedefKeyword, name,
+          typeParameters, equals, functionType, semicolon);
+
+  @override
   HideCombinator hideCombinator(
           Token keyword, List<SimpleIdentifier> hiddenNames) =>
       new HideCombinatorImpl(keyword, hiddenNames);
@@ -582,7 +604,7 @@
 
   @override
   IsExpression isExpression(Expression expression, Token isOperator,
-          Token notOperator, TypeName type) =>
+          Token notOperator, TypeAnnotation type) =>
       new IsExpressionImpl(expression, isOperator, notOperator, type);
 
   @override
@@ -630,7 +652,7 @@
           List<Annotation> metadata,
           Token externalKeyword,
           Token modifierKeyword,
-          TypeName returnType,
+          TypeAnnotation returnType,
           Token propertyKeyword,
           Token operatorKeyword,
           SimpleIdentifier name,
@@ -753,7 +775,7 @@
           Comment comment,
           List<Annotation> metadata,
           Token keyword,
-          TypeName type,
+          TypeAnnotation type,
           SimpleIdentifier identifier) =>
       new SimpleFormalParameterImpl(
           comment, metadata, keyword, type, identifier);
@@ -787,7 +809,6 @@
   @override
   SuperExpression superExpression(Token superKeyword) =>
       new SuperExpressionImpl(superKeyword);
-
   @override
   SwitchCase switchCase(List<Label> labels, Token keyword,
           Expression expression, Token colon, List<Statement> statements) =>
@@ -797,6 +818,7 @@
   SwitchDefault switchDefault(List<Label> labels, Token keyword, Token colon,
           List<Statement> statements) =>
       new SwitchDefaultImpl(labels, keyword, colon, statements);
+
   @override
   SwitchStatement switchStatement(
           Token switchKeyword,
@@ -841,8 +863,8 @@
           tryKeyword, body, catchClauses, finallyKeyword, finallyBlock);
 
   @override
-  TypeArgumentList typeArgumentList(
-          Token leftBracket, List<TypeName> arguments, Token rightBracket) =>
+  TypeArgumentList typeArgumentList(Token leftBracket,
+          List<TypeAnnotation> arguments, Token rightBracket) =>
       new TypeArgumentListImpl(leftBracket, arguments, rightBracket);
 
   @override
@@ -852,7 +874,7 @@
 
   @override
   TypeParameter typeParameter(Comment comment, List<Annotation> metadata,
-          SimpleIdentifier name, Token extendsKeyword, TypeName bound) =>
+          SimpleIdentifier name, Token extendsKeyword, TypeAnnotation bound) =>
       new TypeParameterImpl(comment, metadata, name, extendsKeyword, bound);
 
   @override
@@ -870,7 +892,7 @@
           Comment comment,
           List<Annotation> metadata,
           Token keyword,
-          TypeName type,
+          TypeAnnotation type,
           List<VariableDeclaration> variables) =>
       new VariableDeclarationListImpl(
           comment, metadata, keyword, type, variables);
diff --git a/pkg/analyzer/lib/src/dart/ast/resolution_map.dart b/pkg/analyzer/lib/src/dart/ast/resolution_map.dart
index 975f97d..3fe5d0f 100644
--- a/pkg/analyzer/lib/src/dart/ast/resolution_map.dart
+++ b/pkg/analyzer/lib/src/dart/ast/resolution_map.dart
@@ -151,7 +151,7 @@
   DartType staticTypeForExpression(Expression node) => node.staticType;
 
   @override
-  DartType typeForTypeName(TypeName node) => node.type;
+  DartType typeForTypeName(TypeAnnotation node) => node.type;
 
   @override
   Element uriElementForDirective(UriBasedDirective node) => node.uriElement;
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index d23485a..f615ef3 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -551,6 +551,26 @@
           cloneNode(node.parameters));
 
   @override
+  AstNode visitGenericFunctionType(GenericFunctionType node) =>
+      astFactory.genericFunctionType(
+          cloneNode(node.returnType),
+          cloneToken(node.functionKeyword),
+          cloneNode(node.typeParameters),
+          cloneNode(node.parameters));
+
+  @override
+  AstNode visitGenericTypeAlias(GenericTypeAlias node) =>
+      astFactory.genericTypeAlias(
+          cloneNode(node.documentationComment),
+          cloneNodeList(node.metadata),
+          cloneToken(node.typedefKeyword),
+          cloneNode(node.name),
+          cloneNode(node.typeParameters),
+          cloneToken(node.equals),
+          cloneNode(node.functionType),
+          cloneToken(node.semicolon));
+
+  @override
   HideCombinator visitHideCombinator(HideCombinator node) =>
       astFactory.hideCombinator(
           cloneToken(node.keyword), cloneNodeList(node.hiddenNames));
@@ -1588,6 +1608,28 @@
   }
 
   @override
+  bool visitGenericFunctionType(GenericFunctionType node) {
+    GenericFunctionType other = _other as GenericFunctionType;
+    return isEqualNodes(node.returnType, other.returnType) &&
+        isEqualTokens(node.functionKeyword, other.functionKeyword) &&
+        isEqualNodes(node.typeParameters, other.typeParameters) &&
+        isEqualNodes(node.parameters, other.parameters);
+  }
+
+  @override
+  bool visitGenericTypeAlias(GenericTypeAlias node) {
+    GenericTypeAlias other = _other as GenericTypeAlias;
+    return isEqualNodes(
+            node.documentationComment, other.documentationComment) &&
+        _isEqualNodeLists(node.metadata, other.metadata) &&
+        isEqualTokens(node.typedefKeyword, other.typedefKeyword) &&
+        isEqualNodes(node.name, other.name) &&
+        isEqualNodes(node.typeParameters, other.typeParameters) &&
+        isEqualTokens(node.equals, other.equals) &&
+        isEqualNodes(node.functionType, other.functionType);
+  }
+
+  @override
   bool visitHideCombinator(HideCombinator node) {
     HideCombinator other = _other as HideCombinator;
     return isEqualTokens(node.keyword, other.keyword) &&
@@ -3260,6 +3302,26 @@
           _cloneNode(node.parameters));
 
   @override
+  AstNode visitGenericFunctionType(GenericFunctionType node) =>
+      astFactory.genericFunctionType(
+          _cloneNode(node.returnType),
+          _mapToken(node.functionKeyword),
+          _cloneNode(node.typeParameters),
+          _cloneNode(node.parameters));
+
+  @override
+  AstNode visitGenericTypeAlias(GenericTypeAlias node) =>
+      astFactory.genericTypeAlias(
+          _cloneNode(node.documentationComment),
+          _cloneNodeList(node.metadata),
+          _mapToken(node.typedefKeyword),
+          _cloneNode(node.name),
+          _cloneNode(node.typeParameters),
+          _mapToken(node.equals),
+          _cloneNode(node.functionType),
+          _mapToken(node.semicolon));
+
+  @override
   HideCombinator visitHideCombinator(HideCombinator node) =>
       astFactory.hideCombinator(
           _mapToken(node.keyword), _cloneNodeList(node.hiddenNames));
@@ -4107,7 +4169,7 @@
       node.expression = _newNode as Expression;
       return true;
     } else if (identical(node.type, _oldNode)) {
-      node.type = _newNode as TypeName;
+      node.type = _newNode as TypeAnnotation;
       return true;
     }
     return visitNode(node);
@@ -4215,7 +4277,7 @@
   @override
   bool visitCatchClause(CatchClause node) {
     if (identical(node.exceptionType, _oldNode)) {
-      node.exceptionType = _newNode as TypeName;
+      node.exceptionType = _newNode as TypeAnnotation;
       return true;
     } else if (identical(node.exceptionParameter, _oldNode)) {
       node.exceptionParameter = _newNode as SimpleIdentifier;
@@ -4393,7 +4455,7 @@
   @override
   bool visitDeclaredIdentifier(DeclaredIdentifier node) {
     if (identical(node.type, _oldNode)) {
-      node.type = _newNode as TypeName;
+      node.type = _newNode as TypeAnnotation;
       return true;
     } else if (identical(node.identifier, _oldNode)) {
       node.identifier = _newNode as SimpleIdentifier;
@@ -4506,7 +4568,7 @@
   @override
   bool visitFieldFormalParameter(FieldFormalParameter node) {
     if (identical(node.type, _oldNode)) {
-      node.type = _newNode as TypeName;
+      node.type = _newNode as TypeAnnotation;
       return true;
     } else if (identical(node.parameters, _oldNode)) {
       node.parameters = _newNode as FormalParameterList;
@@ -4564,7 +4626,7 @@
   @override
   bool visitFunctionDeclaration(FunctionDeclaration node) {
     if (identical(node.returnType, _oldNode)) {
-      node.returnType = _newNode as TypeName;
+      node.returnType = _newNode as TypeAnnotation;
       return true;
     } else if (identical(node.name, _oldNode)) {
       node.name = _newNode as SimpleIdentifier;
@@ -4612,7 +4674,7 @@
   @override
   bool visitFunctionTypeAlias(FunctionTypeAlias node) {
     if (identical(node.returnType, _oldNode)) {
-      node.returnType = _newNode as TypeName;
+      node.returnType = _newNode as TypeAnnotation;
       return true;
     } else if (identical(node.name, _oldNode)) {
       node.name = _newNode as SimpleIdentifier;
@@ -4630,7 +4692,7 @@
   @override
   bool visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
     if (identical(node.returnType, _oldNode)) {
-      node.returnType = _newNode as TypeName;
+      node.returnType = _newNode as TypeAnnotation;
       return true;
     } else if (identical(node.parameters, _oldNode)) {
       node.parameters = _newNode as FormalParameterList;
@@ -4640,6 +4702,38 @@
   }
 
   @override
+  bool visitGenericFunctionType(GenericFunctionType node) {
+    if (identical(node.returnType, _oldNode)) {
+      node.returnType = _newNode as TypeAnnotation;
+      return true;
+    } else if (identical(node.typeParameters, _oldNode)) {
+      node.typeParameters = _newNode as TypeParameterList;
+      return true;
+    } else if (identical(node.parameters, _oldNode)) {
+      node.parameters = _newNode as FormalParameterList;
+      return true;
+    }
+    return null;
+  }
+
+  @override
+  bool visitGenericTypeAlias(GenericTypeAlias node) {
+    if (identical(node.name, _oldNode)) {
+      node.name = _newNode as SimpleIdentifier;
+      return true;
+    } else if (identical(node.typeParameters, _oldNode)) {
+      node.typeParameters = _newNode as TypeParameterList;
+      return true;
+    } else if (identical(node.functionType, _oldNode)) {
+      node.functionType = _newNode as GenericFunctionType;
+      return true;
+    } else if (_replaceInList(node.metadata)) {
+      return true;
+    }
+    return visitNode(node);
+  }
+
+  @override
   bool visitHideCombinator(HideCombinator node) {
     if (_replaceInList(node.hiddenNames)) {
       return true;
@@ -4724,7 +4818,7 @@
       node.expression = _newNode as Expression;
       return true;
     } else if (identical(node.type, _oldNode)) {
-      node.type = _newNode as TypeName;
+      node.type = _newNode as TypeAnnotation;
       return true;
     }
     return visitNode(node);
@@ -4798,7 +4892,7 @@
   @override
   bool visitMethodDeclaration(MethodDeclaration node) {
     if (identical(node.returnType, _oldNode)) {
-      node.returnType = _newNode as TypeName;
+      node.returnType = _newNode as TypeAnnotation;
       return true;
     } else if (identical(node.name, _oldNode)) {
       node.name = _newNode as SimpleIdentifier;
@@ -4987,7 +5081,7 @@
   @override
   bool visitSimpleFormalParameter(SimpleFormalParameter node) {
     if (identical(node.type, _oldNode)) {
-      node.type = _newNode as TypeName;
+      node.type = _newNode as TypeAnnotation;
       return true;
     }
     return visitNormalFormalParameter(node);
@@ -5126,7 +5220,7 @@
       node.name = _newNode as SimpleIdentifier;
       return true;
     } else if (identical(node.bound, _oldNode)) {
-      node.bound = _newNode as TypeName;
+      node.bound = _newNode as TypeAnnotation;
       return true;
     }
     return visitNode(node);
@@ -5163,7 +5257,7 @@
   @override
   bool visitVariableDeclarationList(VariableDeclarationList node) {
     if (identical(node.type, _oldNode)) {
-      node.type = _newNode as TypeName;
+      node.type = _newNode as TypeAnnotation;
       return true;
     } else if (_replaceInList(node.variables)) {
       return true;
@@ -5865,6 +5959,38 @@
   }
 
   @override
+  bool visitGenericFunctionType(GenericFunctionType node) {
+    GenericFunctionType toNode = this._toNode as GenericFunctionType;
+    if (_and(
+        _isEqualNodes(node.returnType, toNode.returnType),
+        _isEqualTokens(node.functionKeyword, toNode.functionKeyword),
+        _isEqualNodes(node.typeParameters, toNode.typeParameters),
+        _isEqualNodes(node.parameters, toNode.parameters))) {
+      // TODO(brianwilkerson) Copy the type information.
+      return true;
+    }
+    return false;
+  }
+
+  @override
+  bool visitGenericTypeAlias(GenericTypeAlias node) {
+    GenericTypeAlias toNode = this._toNode as GenericTypeAlias;
+    if (_and(
+        _isEqualNodes(node.documentationComment, toNode.documentationComment),
+        _isEqualNodeLists(node.metadata, toNode.metadata),
+        _isEqualTokens(node.typedefKeyword, toNode.typedefKeyword),
+        _isEqualNodes(node.name, toNode.name),
+        _isEqualNodes(node.typeParameters, toNode.typeParameters),
+        _isEqualTokens(node.equals, toNode.equals),
+        _isEqualNodes(node.functionType, toNode.functionType),
+        _isEqualTokens(node.semicolon, toNode.semicolon))) {
+      // TODO(brianwilkerson) Copy the type and element information.
+      return true;
+    }
+    return false;
+  }
+
+  @override
   bool visitHideCombinator(HideCombinator node) {
     HideCombinator toNode = this._toNode as HideCombinator;
     return _and(_isEqualTokens(node.keyword, toNode.keyword),
@@ -7395,6 +7521,26 @@
   }
 
   @override
+  Object visitGenericFunctionType(GenericFunctionType node) {
+    _visitNode(node.returnType);
+    _writer.print(' Function ');
+    _visitNode(node.typeParameters);
+    _visitNode(node.parameters);
+    return null;
+  }
+
+  @override
+  Object visitGenericTypeAlias(GenericTypeAlias node) {
+    _visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
+    _writer.print("typedef ");
+    _visitNode(node.name);
+    _visitNode(node.typeParameters);
+    _writer.print(" = ");
+    _visitNode(node.functionType);
+    return null;
+  }
+
+  @override
   Object visitHideCombinator(HideCombinator node) {
     _writer.print("hide ");
     _visitNodeListWithSeparator(node.hiddenNames, ", ");
@@ -8682,6 +8828,26 @@
   }
 
   @override
+  Object visitGenericFunctionType(GenericFunctionType node) {
+    safelyVisitNode(node.returnType);
+    sink.write(' Function ');
+    safelyVisitNode(node.typeParameters);
+    safelyVisitNode(node.parameters);
+    return null;
+  }
+
+  @override
+  Object visitGenericTypeAlias(GenericTypeAlias node) {
+    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
+    sink.write("typedef ");
+    safelyVisitNode(node.name);
+    safelyVisitNode(node.typeParameters);
+    sink.write(" = ");
+    safelyVisitNode(node.functionType);
+    return null;
+  }
+
+  @override
   Object visitHideCombinator(HideCombinator node) {
     sink.write("hide ");
     safelyVisitNodeListWithSeparator(node.hiddenNames, ", ");
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index 23ad1a2..4718171 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -8,6 +8,7 @@
 
 import 'package:analyzer/context/declared_variables.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_ast_factory.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/constant/value.dart';
@@ -29,7 +30,6 @@
 import 'package:analyzer/src/generated/utilities_collection.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart' show ParameterKind;
 import 'package:analyzer/src/task/dart.dart';
-import 'package:analyzer/dart/ast/standard_ast_factory.dart';
 
 /**
  * Helper class encapsulating the methods for evaluating constants and
@@ -1292,8 +1292,8 @@
     }
     ParameterizedType thenType = thenResult.type;
     ParameterizedType elseType = elseResult.type;
-    return new DartObjectImpl.validWithUnknownValue(
-        _typeSystem.getLeastUpperBound(thenType, elseType) as InterfaceType);
+    return new DartObjectImpl.validWithUnknownValue(_typeSystem
+        .getLeastUpperBound(thenType, elseType) as ParameterizedType);
   }
 
   @override
@@ -1358,9 +1358,9 @@
       return null;
     }
     DartType elementType = _typeProvider.dynamicType;
-    NodeList<TypeName> typeArgs = node.typeArguments?.arguments;
+    NodeList<TypeAnnotation> typeArgs = node.typeArguments?.arguments;
     if (typeArgs?.length == 1) {
-      DartType type = visitTypeName(typeArgs[0])?.toTypeValue();
+      DartType type = visitTypeAnnotation(typeArgs[0])?.toTypeValue();
       if (type != null) {
         elementType = type;
       }
@@ -1393,13 +1393,15 @@
     }
     DartType keyType = _typeProvider.dynamicType;
     DartType valueType = _typeProvider.dynamicType;
-    NodeList<TypeName> typeArgs = node.typeArguments?.arguments;
+    NodeList<TypeAnnotation> typeArgs = node.typeArguments?.arguments;
     if (typeArgs?.length == 2) {
-      DartType keyTypeCandidate = visitTypeName(typeArgs[0])?.toTypeValue();
+      DartType keyTypeCandidate =
+          visitTypeAnnotation(typeArgs[0])?.toTypeValue();
       if (keyTypeCandidate != null) {
         keyType = keyTypeCandidate;
       }
-      DartType valueTypeCandidate = visitTypeName(typeArgs[1])?.toTypeValue();
+      DartType valueTypeCandidate =
+          visitTypeAnnotation(typeArgs[1])?.toTypeValue();
       if (valueTypeCandidate != null) {
         valueType = valueTypeCandidate;
       }
@@ -1549,8 +1551,7 @@
         _typeProvider.symbolType, new SymbolState(buffer.toString()));
   }
 
-  @override
-  DartObjectImpl visitTypeName(TypeName node) {
+  DartObjectImpl visitTypeAnnotation(TypeAnnotation node) {
     DartType type = evaluateType(node.type);
     if (type == null) {
       return super.visitTypeName(node);
@@ -1558,6 +1559,9 @@
     return typeConstant(type);
   }
 
+  @override
+  DartObjectImpl visitTypeName(TypeName node) => visitTypeAnnotation(node);
+
   /**
    * Create an error associated with the given [node]. The error will have the
    * given error [code].
diff --git a/pkg/analyzer/lib/src/dart/constant/value.dart b/pkg/analyzer/lib/src/dart/constant/value.dart
index db4de37..a927df6 100644
--- a/pkg/analyzer/lib/src/dart/constant/value.dart
+++ b/pkg/analyzer/lib/src/dart/constant/value.dart
@@ -144,9 +144,6 @@
    */
   static const List<DartObjectImpl> EMPTY_LIST = const <DartObjectImpl>[];
 
-  /**
-   * The run-time type of this object.
-   */
   @override
   final ParameterizedType type;
 
@@ -163,7 +160,7 @@
   /**
    * Create an object to represent an unknown value.
    */
-  factory DartObjectImpl.validWithUnknownValue(InterfaceType type) {
+  factory DartObjectImpl.validWithUnknownValue(ParameterizedType type) {
     if (type.element.library.isDartCore) {
       String typeName = type.name;
       if (typeName == "bool") {
diff --git a/pkg/analyzer/lib/src/dart/element/type.dart b/pkg/analyzer/lib/src/dart/element/type.dart
index 58932c6..968c18f 100644
--- a/pkg/analyzer/lib/src/dart/element/type.dart
+++ b/pkg/analyzer/lib/src/dart/element/type.dart
@@ -833,11 +833,12 @@
 
   @override
   bool isSubtypeOf(DartType type) {
+    var typeSystem = new TypeSystemImpl(null);
     return relate(
-        this,
-        type,
+        typeSystem.instantiateToBounds(this),
+        typeSystem.instantiateToBounds(type),
         (DartType t, DartType s, _, __) => t.isAssignableTo(s),
-        new TypeSystemImpl(null).instantiateToBounds);
+        typeSystem.instantiateToBounds);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index 5c44f86..962e6f6 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -1575,7 +1575,7 @@
     if (invokeType is FunctionType) {
       List<TypeParameterElement> parameters = invokeType.typeFormals;
 
-      NodeList<TypeName> arguments = typeArguments?.arguments;
+      NodeList<TypeAnnotation> arguments = typeArguments?.arguments;
       if (arguments != null && arguments.length != parameters.length) {
         if (_resolver.strongMode) {
           _resolver.errorReporter.reportErrorForNode(
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 52aec1a..1b99f57 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -768,7 +768,7 @@
         methodName = identifier.name;
       }
       _enclosingFunction = functionElement;
-      TypeName returnType = node.returnType;
+      TypeAnnotation returnType = node.returnType;
       if (node.isSetter || node.isGetter) {
         _checkForMismatchedAccessorTypes(node, methodName);
         if (node.isSetter) {
@@ -862,6 +862,20 @@
   }
 
   @override
+  Object visitGenericFunctionType(GenericFunctionType node) {
+    throw new StateError(
+        'Support for generic function types is not yet implemented');
+//    return super.visitGenericFunctionType(node);
+  }
+
+  @override
+  Object visitGenericTypeAlias(GenericTypeAlias node) {
+    throw new StateError(
+        'Support for generic type aliases is not yet implemented');
+//    return super.visitGenericTypeAlias(node);
+  }
+
+  @override
   Object visitIfStatement(IfStatement node) {
     _checkForNonBoolCondition(node.condition);
     return super.visitIfStatement(node);
@@ -931,7 +945,7 @@
     TypeArgumentList typeArguments = node.typeArguments;
     if (typeArguments != null) {
       if (!_options.strongMode && node.constKeyword != null) {
-        NodeList<TypeName> arguments = typeArguments.arguments;
+        NodeList<TypeAnnotation> arguments = typeArguments.arguments;
         if (arguments.isNotEmpty) {
           _checkForInvalidTypeArgumentInConstTypedLiteral(arguments,
               CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST);
@@ -948,7 +962,7 @@
   Object visitMapLiteral(MapLiteral node) {
     TypeArgumentList typeArguments = node.typeArguments;
     if (typeArguments != null) {
-      NodeList<TypeName> arguments = typeArguments.arguments;
+      NodeList<TypeAnnotation> arguments = typeArguments.arguments;
       if (!_options.strongMode && arguments.isNotEmpty) {
         if (node.constKeyword != null) {
           _checkForInvalidTypeArgumentInConstTypedLiteral(arguments,
@@ -974,7 +988,7 @@
       if (identifier != null) {
         methodName = identifier.name;
       }
-      TypeName returnTypeName = node.returnType;
+      TypeAnnotation returnType = node.returnType;
       if (node.isSetter || node.isGetter) {
         _checkForMismatchedAccessorTypes(node, methodName);
       }
@@ -985,7 +999,7 @@
         _checkForInvalidModifierOnBody(
             node.body, CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER);
         _checkForWrongNumberOfParametersForSetter(node.name, node.parameters);
-        _checkForNonVoidReturnTypeForSetter(returnTypeName);
+        _checkForNonVoidReturnTypeForSetter(returnType);
         _checkForConflictingStaticSetterAndInstanceMember(node);
       } else if (node.isOperator) {
         _checkForOptionalParameterInOperator(node);
@@ -994,9 +1008,9 @@
       }
       _checkForConcreteClassWithAbstractMember(node);
       _checkForAllInvalidOverrideErrorCodesForMethod(node);
-      _checkForTypeAnnotationDeferredClass(returnTypeName);
-      _checkForIllegalReturnType(returnTypeName);
-      _checkForImplicitDynamicReturn(node.name, node.element);
+      _checkForTypeAnnotationDeferredClass(returnType);
+      _checkForIllegalReturnType(returnType);
+      _checkForImplicitDynamicReturn(node, node.element);
       _checkForMustCallSuper(node);
       return super.visitMethodDeclaration(node);
     } finally {
@@ -1187,9 +1201,9 @@
 
   @override
   Object visitTypeArgumentList(TypeArgumentList node) {
-    NodeList<TypeName> list = node.arguments;
-    for (TypeName typeName in list) {
-      _checkForTypeAnnotationDeferredClass(typeName);
+    NodeList<TypeAnnotation> list = node.arguments;
+    for (TypeAnnotation type in list) {
+      _checkForTypeAnnotationDeferredClass(type);
     }
     return super.visitTypeArgumentList(node);
   }
@@ -3220,15 +3234,16 @@
   }
 
   /**
-   * Verify that the given [typeName] does not reference any type parameters.
+   * Verify that the given [type] does not reference any type parameters.
    *
    * See [CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS].
    */
-  void _checkForConstWithTypeParameters(TypeName typeName) {
+  void _checkForConstWithTypeParameters(TypeAnnotation type) {
     // something wrong with AST
-    if (typeName == null) {
+    if (type is! TypeName) {
       return;
     }
+    TypeName typeName = type;
     Identifier name = typeName.name;
     if (name == null) {
       return;
@@ -3241,7 +3256,7 @@
     // check type arguments
     TypeArgumentList typeArguments = typeName.typeArguments;
     if (typeArguments != null) {
-      for (TypeName argument in typeArguments.arguments) {
+      for (TypeAnnotation argument in typeArguments.arguments) {
         _checkForConstWithTypeParameters(argument);
       }
     }
@@ -3806,7 +3821,7 @@
    * declared return type is assignable to Future, Stream, or Iterable,
    * respectively.  If not, report the error using [returnType].
    */
-  void _checkForIllegalReturnType(TypeName returnType) {
+  void _checkForIllegalReturnType(TypeAnnotation returnType) {
     if (returnType == null) {
       // No declared return type, so the return type must be dynamic, which is
       // assignable to everything.
@@ -3839,7 +3854,7 @@
    * the declared [returnTypeName] is assignable to the required [expectedType]
    * and if not report [errorCode].
    */
-  void _checkForIllegalReturnTypeCode(TypeName returnTypeName,
+  void _checkForIllegalReturnTypeCode(TypeAnnotation returnTypeName,
       DartType expectedType, StaticTypeWarningCode errorCode) {
     DartType returnType = _enclosingFunction.returnType;
     if (_options.strongMode) {
@@ -3986,10 +4001,10 @@
     }
   }
 
-  void _checkForImplicitDynamicType(TypeName node) {
+  void _checkForImplicitDynamicType(TypeAnnotation node) {
     if (_options.implicitDynamic ||
         node == null ||
-        node.typeArguments != null) {
+        (node is TypeName && node.typeArguments != null)) {
       return;
     }
     DartType type = node.type;
@@ -4457,10 +4472,10 @@
    * [CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP].
    */
   void _checkForInvalidTypeArgumentInConstTypedLiteral(
-      NodeList<TypeName> arguments, ErrorCode errorCode) {
-    for (TypeName typeName in arguments) {
-      if (typeName.type is TypeParameterType) {
-        _errorReporter.reportErrorForNode(errorCode, typeName, [typeName.name]);
+      NodeList<TypeAnnotation> arguments, ErrorCode errorCode) {
+    for (TypeAnnotation type in arguments) {
+      if (type is TypeName && type.type is TypeParameterType) {
+        _errorReporter.reportErrorForNode(errorCode, type, [type.name]);
       }
     }
   }
@@ -5141,12 +5156,12 @@
       return;
     }
     // check return type
-    TypeName typeName = declaration.returnType;
-    if (typeName != null) {
-      DartType type = typeName.type;
+    TypeAnnotation annotation = declaration.returnType;
+    if (annotation != null) {
+      DartType type = annotation.type;
       if (type != null && !type.isVoid) {
         _errorReporter.reportErrorForNode(
-            StaticWarningCode.NON_VOID_RETURN_FOR_OPERATOR, typeName);
+            StaticWarningCode.NON_VOID_RETURN_FOR_OPERATOR, annotation);
       }
     }
   }
@@ -5157,7 +5172,7 @@
    *
    * See [StaticWarningCode.NON_VOID_RETURN_FOR_SETTER].
    */
-  void _checkForNonVoidReturnTypeForSetter(TypeName typeName) {
+  void _checkForNonVoidReturnTypeForSetter(TypeAnnotation typeName) {
     if (typeName != null) {
       DartType type = typeName.type;
       if (type != null && !type.isVoid) {
@@ -5579,10 +5594,10 @@
    *
    * See [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS].
    */
-  void _checkForTypeAnnotationDeferredClass(TypeName name) {
-    if (name != null && name.isDeferred) {
+  void _checkForTypeAnnotationDeferredClass(TypeAnnotation type) {
+    if (type is TypeName && type.isDeferred) {
       _errorReporter.reportErrorForNode(
-          StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, name, [name.name]);
+          StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, type, [type.name]);
     }
   }
 
@@ -5592,19 +5607,18 @@
    *
    * See [StaticWarningCode.TYPE_ANNOTATION_GENERIC_FUNCTION_PARAMETER].
    */
-  void _checkForTypeAnnotationGenericFunctionParameter(TypeName typeName) {
-    if (typeName == null) {
-      return;
-    }
-    Identifier name = typeName.name;
-    if (name is SimpleIdentifier) {
-      Element element = name.staticElement;
-      if (element is TypeParameterElement &&
-          element.enclosingElement is ExecutableElement) {
-        _errorReporter.reportErrorForNode(
-            StaticWarningCode.TYPE_ANNOTATION_GENERIC_FUNCTION_PARAMETER,
-            name,
-            [name.name]);
+  void _checkForTypeAnnotationGenericFunctionParameter(TypeAnnotation type) {
+    if (type is TypeName) {
+      Identifier name = type.name;
+      if (name is SimpleIdentifier) {
+        Element element = name.staticElement;
+        if (element is TypeParameterElement &&
+            element.enclosingElement is ExecutableElement) {
+          _errorReporter.reportErrorForNode(
+              StaticWarningCode.TYPE_ANNOTATION_GENERIC_FUNCTION_PARAMETER,
+              name,
+              [name.name]);
+        }
       }
     }
   }
@@ -5631,14 +5645,14 @@
       List<DartType> parameterTypes = element.type.typeArguments;
       List<DartType> arguments = (type as ParameterizedType).typeArguments;
       // iterate over each bounded type parameter and corresponding argument
-      NodeList<TypeName> typeNameArgList = typeName.typeArguments.arguments;
+      NodeList<TypeAnnotation> argumentNodes = typeName.typeArguments.arguments;
       int loopThroughIndex =
-          math.min(typeNameArgList.length, parameterElements.length);
+          math.min(argumentNodes.length, parameterElements.length);
       bool shouldSubstitute =
           arguments.length != 0 && arguments.length == parameterTypes.length;
       for (int i = 0; i < loopThroughIndex; i++) {
-        TypeName argTypeName = typeNameArgList[i];
-        DartType argType = argTypeName.type;
+        TypeAnnotation argumentNode = argumentNodes[i];
+        DartType argType = argumentNode.type;
         DartType boundType = parameterElements[i].bound;
         if (argType != null && boundType != null) {
           if (shouldSubstitute) {
@@ -5654,7 +5668,7 @@
                   StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS;
             }
             _errorReporter.reportTypeErrorForNode(
-                errorCode, argTypeName, [argType, boundType]);
+                errorCode, argumentNode, [argType, boundType]);
           }
         }
       }
@@ -5864,12 +5878,11 @@
    * See [StaticWarningCode.VOID_RETURN_FOR_GETTER].
    */
   void _checkForVoidReturnType(MethodDeclaration getter) {
-    TypeName returnType = getter.returnType;
-    if (returnType == null || returnType.name.name != "void") {
-      return;
+    TypeAnnotation returnType = getter.returnType;
+    if (returnType is TypeName && returnType.name.name == "void") {
+      _errorReporter.reportErrorForNode(
+          StaticWarningCode.VOID_RETURN_FOR_GETTER, returnType);
     }
-    _errorReporter.reportErrorForNode(
-        StaticWarningCode.VOID_RETURN_FOR_GETTER, returnType);
   }
 
   /**
@@ -6077,8 +6090,8 @@
     if (element == null || typeArguments == null) {
       return;
     }
-    void reportError(
-        TypeName argument, DartType argumentType, DartType parameterType) {
+    void reportError(TypeAnnotation argument, DartType argumentType,
+        DartType parameterType) {
       _errorReporter.reportTypeErrorForNode(
           StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS,
           argument,
@@ -6102,16 +6115,16 @@
       List<TypeParameterElement> typeParameters,
       TypeArgumentList typeArgumentList,
       DartType targetType,
-      void reportError(
-          TypeName argument, DartType argumentType, DartType parameterType)) {
-    NodeList<TypeName> typeArguments = typeArgumentList.arguments;
+      void reportError(TypeAnnotation argument, DartType argumentType,
+          DartType parameterType)) {
+    NodeList<TypeAnnotation> typeArguments = typeArgumentList.arguments;
     int argumentsLength = typeArguments.length;
     int maxIndex = math.min(typeParameters.length, argumentsLength);
 
     bool shouldSubstitute =
         argumentsLength != 0 && argumentsLength == typeParameters.length;
     List<DartType> argumentTypes = shouldSubstitute
-        ? typeArguments.map((TypeName typeName) => typeName.type).toList()
+        ? typeArguments.map((TypeAnnotation type) => type.type).toList()
         : null;
     List<DartType> parameterTypes = shouldSubstitute
         ? typeParameters
@@ -6120,8 +6133,8 @@
         : null;
     List<DartType> targetTypeParameterTypes = null;
     for (int i = 0; i < maxIndex; i++) {
-      TypeName argTypeName = typeArguments[i];
-      DartType argType = argTypeName.type;
+      TypeAnnotation argument = typeArguments[i];
+      DartType argType = argument.type;
       DartType boundType = typeParameters[i].bound;
       if (argType != null && boundType != null) {
         if (targetType is ParameterizedType) {
@@ -6137,7 +6150,7 @@
           boundType = boundType.substitute2(argumentTypes, parameterTypes);
         }
         if (!_typeSystem.isSubtypeOf(argType, boundType)) {
-          reportError(argTypeName, argType, boundType);
+          reportError(argument, argType, boundType);
         }
       }
     }
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 2e1b856..6e3ecfc 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -372,13 +372,13 @@
    */
   bool _checkAllTypeChecks(IsExpression node) {
     Expression expression = node.expression;
-    TypeName typeName = node.type;
+    TypeAnnotation typeName = node.type;
     DartType lhsType = expression.staticType;
     DartType rhsType = typeName.type;
     if (lhsType == null || rhsType == null) {
       return false;
     }
-    String rhsNameStr = typeName.name.name;
+    String rhsNameStr = typeName is TypeName ? typeName.name.name : null;
     // if x is dynamic
     if (rhsType.isDynamic && rhsNameStr == Keyword.DYNAMIC.syntax) {
       if (node.notOperator == null) {
@@ -884,7 +884,7 @@
    * @return `true` if and only if a hint code is generated on the passed node
    * See [HintCode.MISSING_RETURN].
    */
-  void _checkForMissingReturn(TypeName returnType, FunctionBody body) {
+  void _checkForMissingReturn(TypeAnnotation returnType, FunctionBody body) {
     // Check that the method or function has a return type, and a function body
     if (returnType == null || body == null) {
       return;
@@ -1847,8 +1847,7 @@
    * [HintCode.IS_NOT_INT].
    */
   bool _checkForIsDoubleHints(IsExpression node) {
-    TypeName typeName = node.type;
-    DartType type = typeName.type;
+    DartType type = node.type.type;
     Element element = type?.element;
     if (element != null) {
       String typeNameStr = element.name;
@@ -3020,6 +3019,9 @@
   }
 
   @override
+  bool visitGenericFunctionType(GenericFunctionType node) => false;
+
+  @override
   bool visitIdentifier(Identifier node) => false;
 
   @override
@@ -6092,6 +6094,9 @@
   }
 
   @override
+  Object visitGenericFunctionType(GenericFunctionType node) => null;
+
+  @override
   Object visitHideCombinator(HideCombinator node) => null;
 
   @override
@@ -8025,7 +8030,7 @@
 }
 
 /**
- * Helper for resolving [TypeName]s.
+ * Helper for resolving types.
  *
  * The client must set [nameScope] before calling [resolveTypeName].
  */
@@ -8304,15 +8309,14 @@
       return;
     }
     if (argumentList != null) {
-      NodeList<TypeName> arguments = argumentList.arguments;
+      NodeList<TypeAnnotation> arguments = argumentList.arguments;
       int argumentCount = arguments.length;
       List<DartType> parameters = typeSystem.typeFormalsAsTypes(type);
       int parameterCount = parameters.length;
       List<DartType> typeArguments = new List<DartType>(parameterCount);
       if (argumentCount == parameterCount) {
         for (int i = 0; i < parameterCount; i++) {
-          TypeName argumentTypeName = arguments[i];
-          DartType argumentType = _getType(argumentTypeName);
+          DartType argumentType = _getType(arguments[i]);
           if (argumentType == null) {
             argumentType = dynamicType;
           }
@@ -8334,16 +8338,12 @@
   }
 
   /**
-   * The number of type arguments in the given type name does not match the number of parameters in
-   * the corresponding class element. Return the error code that should be used to report this
-   * error.
-   *
-   * @param node the type name with the wrong number of type arguments
-   * @return the error code that should be used to report that the wrong number of type arguments
-   *         were provided
+   * The number of type arguments in the given [typeName] does not match the
+   * number of parameters in the corresponding class element. Return the error
+   * code that should be used to report this error.
    */
-  ErrorCode _getInvalidTypeParametersErrorCode(TypeName node) {
-    AstNode parent = node.parent;
+  ErrorCode _getInvalidTypeParametersErrorCode(TypeName typeName) {
+    AstNode parent = typeName.parent;
     if (parent is ConstructorName) {
       parent = parent.parent;
       if (parent is InstanceCreationExpression) {
@@ -8358,11 +8358,7 @@
   }
 
   /**
-   * Checks if the given type name is the target in a redirected constructor.
-   *
-   * @param typeName the type name to analyze
-   * @return some [RedirectingConstructorKind] if the given type name is used as the type in a
-   *         redirected constructor, or `null` otherwise
+   * Checks if the given [typeName] is the target in a redirected constructor.
    */
   RedirectingConstructorKind _getRedirectingConstructorKind(TypeName typeName) {
     AstNode parent = typeName.parent;
@@ -8381,13 +8377,10 @@
   }
 
   /**
-   * Return the type represented by the given type name.
-   *
-   * @param typeName the type name representing the type to be returned
-   * @return the type represented by the type name
+   * Return the type represented by the given type [annotation].
    */
-  DartType _getType(TypeName typeName) {
-    DartType type = typeName.type;
+  DartType _getType(TypeAnnotation annotation) {
+    DartType type = annotation.type;
     if (type == null) {
       return undefinedType;
     }
@@ -8431,10 +8424,7 @@
   }
 
   /**
-   * Checks if the given type name is used as the type in an as expression.
-   *
-   * @param typeName the type name to analyzer
-   * @return `true` if the given type name is used as the type in an as expression
+   * Checks if the given [typeName] is used as the type in an as expression.
    */
   bool _isTypeNameInAsExpression(TypeName typeName) {
     AstNode parent = typeName.parent;
@@ -8445,10 +8435,8 @@
   }
 
   /**
-   * Checks if the given type name is used as the exception type in a catch clause.
-   *
-   * @param typeName the type name to analyzer
-   * @return `true` if the given type name is used as the exception type in a catch clause
+   * Checks if the given [typeName] is used as the exception type in a catch
+   * clause.
    */
   bool _isTypeNameInCatchClause(TypeName typeName) {
     AstNode parent = typeName.parent;
@@ -8459,11 +8447,8 @@
   }
 
   /**
-   * Checks if the given type name is used as the type in an instance creation expression.
-   *
-   * @param typeName the type name to analyzer
-   * @return `true` if the given type name is used as the type in an instance creation
-   *         expression
+   * Checks if the given [typeName] is used as the type in an instance creation
+   * expression.
    */
   bool _isTypeNameInInstanceCreationExpression(TypeName typeName) {
     AstNode parent = typeName.parent;
@@ -8475,10 +8460,7 @@
   }
 
   /**
-   * Checks if the given type name is used as the type in an is expression.
-   *
-   * @param typeName the type name to analyzer
-   * @return `true` if the given type name is used as the type in an is expression
+   * Checks if the given [typeName] is used as the type in an is expression.
    */
   bool _isTypeNameInIsExpression(TypeName typeName) {
     AstNode parent = typeName.parent;
@@ -8489,10 +8471,7 @@
   }
 
   /**
-   * Checks if the given type name used in a type argument list.
-   *
-   * @param typeName the type name to analyzer
-   * @return `true` if the given type name is in a type argument list
+   * Checks if the given [typeName] used in a type argument list.
    */
   bool _isTypeNameInTypeArgumentList(TypeName typeName) =>
       typeName.parent is TypeArgumentList;
@@ -8515,24 +8494,24 @@
   }
 
   /**
-   * @return `true` if the name of the given [TypeName] is an built-in identifier.
+   * Return `true` if the name of the given [typeName] is an built-in identifier.
    */
-  static bool _isBuiltInIdentifier(TypeName node) {
-    Token token = node.name.beginToken;
+  static bool _isBuiltInIdentifier(TypeName typeName) {
+    Token token = typeName.name.beginToken;
     return token.type == TokenType.KEYWORD;
   }
 
   /**
-   * @return `true` if given [TypeName] is used as a type annotation.
+   * @return `true` if given [typeName] is used as a type annotation.
    */
-  static bool _isTypeAnnotation(TypeName node) {
-    AstNode parent = node.parent;
+  static bool _isTypeAnnotation(TypeName typeName) {
+    AstNode parent = typeName.parent;
     if (parent is VariableDeclarationList) {
-      return identical(parent.type, node);
+      return identical(parent.type, typeName);
     } else if (parent is FieldFormalParameter) {
-      return identical(parent.type, node);
+      return identical(parent.type, typeName);
     } else if (parent is SimpleFormalParameter) {
-      return identical(parent.type, node);
+      return identical(parent.type, typeName);
     }
     return false;
   }
@@ -8800,10 +8779,15 @@
     }
   }
 
-  void _resolveTypeName(TypeName typeName) {
-    typeName.typeArguments?.arguments?.forEach(_resolveTypeName);
-    typeNameResolver.resolveTypeName(typeName);
-    // TODO(scheglov) report error when don't apply type bounds for type bounds
+  void _resolveTypeName(TypeAnnotation type) {
+    if (type is TypeName) {
+      type.typeArguments?.arguments?.forEach(_resolveTypeName);
+      typeNameResolver.resolveTypeName(type);
+      // TODO(scheglov) report error when don't apply type bounds for type bounds
+    } else {
+      // TODO(brianwilkerson) Add resolution of GenericFunctionType
+      throw new ArgumentError('Cannot resolve a ${type.runtimeType}');
+    }
   }
 
   void _resolveTypeParameters(
@@ -8811,13 +8795,19 @@
     if (typeParameters != null) {
       Scope typeParametersScope = null;
       for (TypeParameter typeParameter in typeParameters.typeParameters) {
-        TypeName bound = typeParameter.bound;
+        TypeAnnotation bound = typeParameter.bound;
         if (bound != null) {
           Element typeParameterElement = typeParameter.name.staticElement;
           if (typeParameterElement is TypeParameterElementImpl) {
             if (LibraryElementImpl.hasResolutionCapability(
                 library, LibraryResolutionCapability.resolvedTypeNames)) {
-              bound.type = typeParameterElement.bound;
+              if (bound is TypeName) {
+                bound.type = typeParameterElement.bound;
+              } else {
+                // TODO(brianwilkerson) Add resolution of GenericFunctionType
+                throw new ArgumentError(
+                    'Cannot resolve a ${bound.runtimeType}');
+              }
             } else {
               libraryScope ??= new LibraryScope(library);
               typeParametersScope ??= createTypeParametersScope();
@@ -9495,7 +9485,7 @@
   TypeSystem _typeSystem;
 
   /**
-   * The helper to resolve [TypeName]s.
+   * The helper to resolve types.
    */
   TypeNameResolver _typeNameResolver;
 
@@ -9577,7 +9567,7 @@
       // If an 'on' clause is provided the type of the exception parameter is
       // the type in the 'on' clause. Otherwise, the type of the exception
       // parameter is 'Object'.
-      TypeName exceptionTypeName = node.exceptionType;
+      TypeAnnotation exceptionTypeName = node.exceptionType;
       DartType exceptionType;
       if (exceptionTypeName == null) {
         exceptionType = typeProvider.dynamicType;
@@ -9716,7 +9706,7 @@
   Object visitDeclaredIdentifier(DeclaredIdentifier node) {
     super.visitDeclaredIdentifier(node);
     DartType declaredType;
-    TypeName typeName = node.type;
+    TypeAnnotation typeName = node.type;
     if (typeName == null) {
       declaredType = _dynamicType;
     } else {
@@ -9735,7 +9725,7 @@
       FormalParameterList parameterList = node.parameters;
       if (parameterList == null) {
         DartType type;
-        TypeName typeName = node.type;
+        TypeAnnotation typeName = node.type;
         if (typeName == null) {
           element.hasImplicitType = true;
           if (element is FieldFormalParameterElement) {
@@ -9958,7 +9948,7 @@
   Object visitSimpleFormalParameter(SimpleFormalParameter node) {
     super.visitSimpleFormalParameter(node);
     DartType declaredType;
-    TypeName typeName = node.type;
+    TypeAnnotation typeName = node.type;
     if (typeName == null) {
       declaredType = _dynamicType;
     } else {
@@ -9997,7 +9987,7 @@
       // Bounds of parameters of classes and function type aliases are
       // already resolved.
     } else {
-      TypeName bound = node.bound;
+      TypeAnnotation bound = node.bound;
       if (bound != null) {
         TypeParameterElementImpl typeParameter =
             node.name.staticElement as TypeParameterElementImpl;
@@ -10022,7 +10012,7 @@
     }
     // Resolve the type.
     DartType declaredType;
-    TypeName typeName = variableList.type;
+    TypeAnnotation typeName = variableList.type;
     if (typeName == null) {
       declaredType = _dynamicType;
     } else {
@@ -10036,13 +10026,10 @@
   }
 
   /**
-   * Given a type name representing the return type of a function, compute the return type of the
+   * Given the [returnType] of a function, compute the return type of the
    * function.
-   *
-   * @param returnType the type name representing the return type of the function
-   * @return the return type that was computed
    */
-  DartType _computeReturnType(TypeName returnType) {
+  DartType _computeReturnType(TypeAnnotation returnType) {
     if (returnType == null) {
       return _dynamicType;
     } else {
@@ -10124,13 +10111,8 @@
   }
 
   /**
-   * Resolve the types in the given with and implements clauses and associate those types with the
-   * given class element.
-   *
-   * @param classElement the class element with which the mixin and interface types are to be
-   *          associated
-   * @param withClause the with clause to be resolved
-   * @param implementsClause the implements clause to be resolved
+   * Resolve the types in the given [withClause] and [implementsClause] and
+   * associate those types with the given [classElement].
    */
   void _resolve(ClassElementImpl classElement, WithClause withClause,
       ImplementsClause implementsClause) {
@@ -10239,15 +10221,12 @@
   }
 
   /**
-   * Given a parameter element, create a function type based on the given return type and parameter
-   * list and associate the created type with the element.
-   *
-   * @param element the parameter element whose type is to be set
-   * @param returnType the (possibly `null`) return type of the function
-   * @param parameterList the list of parameters to the function
+   * Given a parameter [element], create a function type based on the given
+   * [returnType] and [parameterList] and associate the created type with the
+   * element.
    */
   void _setFunctionTypedParameterType(ParameterElementImpl element,
-      TypeName returnType, FormalParameterList parameterList) {
+      TypeAnnotation returnType, FormalParameterList parameterList) {
     List<ParameterElement> parameters = _getElements(parameterList);
     FunctionElementImpl functionElement = new FunctionElementImpl.forNode(null);
     functionElement.isSynthetic = true;
diff --git a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
index 63b7b54..b3ec3eb 100644
--- a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
+++ b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
@@ -607,10 +607,9 @@
     // If we have explicit arguments, use them
     if (typeArguments != null) {
       DartType staticType = _dynamicType;
-      NodeList<TypeName> arguments = typeArguments.arguments;
+      NodeList<TypeAnnotation> arguments = typeArguments.arguments;
       if (arguments != null && arguments.length == 1) {
-        TypeName argumentTypeName = arguments[0];
-        DartType argumentType = _getType(argumentTypeName);
+        DartType argumentType = _getType(arguments[0]);
         if (argumentType != null) {
           staticType = argumentType;
         }
@@ -684,15 +683,13 @@
     if (typeArguments != null) {
       DartType staticKeyType = _dynamicType;
       DartType staticValueType = _dynamicType;
-      NodeList<TypeName> arguments = typeArguments.arguments;
+      NodeList<TypeAnnotation> arguments = typeArguments.arguments;
       if (arguments != null && arguments.length == 2) {
-        TypeName entryKeyTypeName = arguments[0];
-        DartType entryKeyType = _getType(entryKeyTypeName);
+        DartType entryKeyType = _getType(arguments[0]);
         if (entryKeyType != null) {
           staticKeyType = entryKeyType;
         }
-        TypeName entryValueTypeName = arguments[1];
-        DartType entryValueType = _getType(entryValueTypeName);
+        DartType entryValueType = _getType(arguments[1]);
         if (entryValueType != null) {
           staticValueType = entryValueType;
         }
@@ -1073,10 +1070,8 @@
     } else if (staticElement is VariableElement) {
       staticType = staticElement.type;
     }
-    if (_strongMode) {
-      staticType = _inferGenericInstantiationFromContext(
-          InferenceContext.getType(node), staticType);
-    }
+    staticType = _inferGenericInstantiationFromContext(node, staticType);
+
     if (!(_strongMode &&
         _inferObjectAccess(node, staticType, prefixedIdentifier))) {
       _recordStaticType(prefixedIdentifier, staticType);
@@ -1206,10 +1201,8 @@
     } else {
       // TODO(brianwilkerson) Report this internal error.
     }
-    if (_strongMode) {
-      staticType = _inferGenericInstantiationFromContext(
-          InferenceContext.getType(node), staticType);
-    }
+    staticType = _inferGenericInstantiationFromContext(node, staticType);
+
     if (!(_strongMode && _inferObjectAccess(node, staticType, propertyName))) {
       _recordStaticType(propertyName, staticType);
       _recordStaticType(node, staticType);
@@ -1310,10 +1303,8 @@
     } else {
       staticType = _dynamicType;
     }
-    if (_strongMode) {
-      staticType = _inferGenericInstantiationFromContext(
-          InferenceContext.getType(node), staticType);
-    }
+    staticType = _inferGenericInstantiationFromContext(node, staticType);
+
     _recordStaticType(node, staticType);
     // TODO(brianwilkerson) I think we want to repeat the logic above using the
     // propagated element to get another candidate for the propagated type.
@@ -1571,7 +1562,7 @@
    */
   DartType _computeStaticReturnTypeOfFunctionDeclaration(
       FunctionDeclaration node) {
-    TypeName returnType = node.returnType;
+    TypeAnnotation returnType = node.returnType;
     if (returnType == null) {
       return _dynamicType;
     }
@@ -1828,13 +1819,10 @@
   }
 
   /**
-   * Return the type represented by the given type name.
-   *
-   * @param typeName the type name representing the type to be returned
-   * @return the type represented by the type name
+   * Return the type represented by the given type [annotation].
    */
-  DartType _getType(TypeName typeName) {
-    DartType type = typeName.type;
+  DartType _getType(TypeAnnotation annotation) {
+    DartType type = annotation.type;
     if (type == null) {
       //TODO(brianwilkerson) Determine the conditions for which the type is
       // null.
@@ -1906,13 +1894,19 @@
    * Given an uninstantiated generic function type, try to infer the
    * instantiated generic function type from the surrounding context.
    */
-  DartType _inferGenericInstantiationFromContext(
-      DartType context, DartType type) {
-    TypeSystem ts = _typeSystem;
-    if (context is FunctionType &&
-        type is FunctionType &&
-        ts is StrongTypeSystemImpl) {
-      return ts.inferFunctionTypeInstantiation(context, type);
+  DartType _inferGenericInstantiationFromContext(AstNode node, DartType type) {
+    if (_strongMode) {
+      TypeSystem ts = _typeSystem;
+      DartType context = InferenceContext.getType(node);
+      if (context is FunctionType &&
+          type is FunctionType &&
+          ts is StrongTypeSystemImpl) {
+        return ts.inferFunctionTypeInstantiation(context, type);
+      }
+    } else if (type is FunctionType) {
+      // In Dart 1 mode we want to implicitly instantiate generic functions to
+      // their bounds always, so we don't get a universal function type.
+      return _typeSystem.instantiateToBounds(type);
     }
     return type;
   }
@@ -2253,10 +2247,7 @@
       library != null && "dart.dom.html" == library.name;
 
   /**
-   * Return `true` if the given node is not a type literal.
-   *
-   * @param node the node being tested
-   * @return `true` if the given node is not a type literal
+   * Return `true` if the given [node] is not a type literal.
    */
   bool _isNotTypeLiteral(Identifier node) {
     AstNode parent = node.parent;
diff --git a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
index 724a24b..826ee7d 100644
--- a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
@@ -45,7 +45,8 @@
       astFactory.argumentList(TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
           arguments, TokenFactory.tokenFromType(TokenType.CLOSE_PAREN));
 
-  static AsExpression asExpression(Expression expression, TypeName type) =>
+  static AsExpression asExpression(
+          Expression expression, TypeAnnotation type) =>
       astFactory.asExpression(
           expression, TokenFactory.tokenFromKeyword(Keyword.AS), type);
 
@@ -158,16 +159,16 @@
           [List<Statement> statements]) =>
       catchClause5(null, exceptionParameter, stackTraceParameter, statements);
 
-  static CatchClause catchClause3(TypeName exceptionType,
+  static CatchClause catchClause3(TypeAnnotation exceptionType,
           [List<Statement> statements]) =>
       catchClause5(exceptionType, null, null, statements);
 
   static CatchClause catchClause4(
-          TypeName exceptionType, String exceptionParameter,
+          TypeAnnotation exceptionType, String exceptionParameter,
           [List<Statement> statements]) =>
       catchClause5(exceptionType, exceptionParameter, null, statements);
 
-  static CatchClause catchClause5(TypeName exceptionType,
+  static CatchClause catchClause5(TypeAnnotation exceptionType,
           String exceptionParameter, String stackTraceParameter,
           [List<Statement> statements]) =>
       astFactory.catchClause(
@@ -367,7 +368,7 @@
       declaredIdentifier2(keyword, null, identifier);
 
   static DeclaredIdentifier declaredIdentifier2(
-          Keyword keyword, TypeName type, String identifier) =>
+          Keyword keyword, TypeAnnotation type, String identifier) =>
       astFactory.declaredIdentifier(
           null,
           null,
@@ -379,7 +380,7 @@
       declaredIdentifier2(Keyword.VAR, null, identifier);
 
   static DeclaredIdentifier declaredIdentifier4(
-          TypeName type, String identifier) =>
+          TypeAnnotation type, String identifier) =>
       declaredIdentifier2(null, type, identifier);
 
   static Comment documentationComment(
@@ -459,7 +460,7 @@
       TokenFactory.tokenFromKeyword(Keyword.EXTENDS), type);
 
   static FieldDeclaration fieldDeclaration(bool isStatic, Keyword keyword,
-          TypeName type, List<VariableDeclaration> variables) =>
+          TypeAnnotation type, List<VariableDeclaration> variables) =>
       astFactory.fieldDeclaration(
           null,
           null,
@@ -472,7 +473,7 @@
       fieldDeclaration(isStatic, keyword, null, variables);
 
   static FieldFormalParameter fieldFormalParameter(
-          Keyword keyword, TypeName type, String identifier,
+          Keyword keyword, TypeAnnotation type, String identifier,
           [FormalParameterList parameterList]) =>
       astFactory.fieldFormalParameter(
           null,
@@ -549,8 +550,11 @@
           TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
           body);
 
-  static FunctionDeclaration functionDeclaration(TypeName type, Keyword keyword,
-          String name, FunctionExpression functionExpression) =>
+  static FunctionDeclaration functionDeclaration(
+          TypeAnnotation type,
+          Keyword keyword,
+          String name,
+          FunctionExpression functionExpression) =>
       astFactory.functionDeclaration(
           null,
           null,
@@ -561,7 +565,7 @@
           functionExpression);
 
   static FunctionDeclarationStatement functionDeclarationStatement(
-          TypeName type,
+          TypeAnnotation type,
           Keyword keyword,
           String name,
           FunctionExpression functionExpression) =>
@@ -594,7 +598,7 @@
           function, typeArguments, argumentList(arguments));
 
   static FunctionTypedFormalParameter functionTypedFormalParameter(
-          TypeName returnType, String identifier,
+          TypeAnnotation returnType, String identifier,
           [List<FormalParameter> parameters]) =>
       astFactory.functionTypedFormalParameter(null, null, returnType,
           identifier3(identifier), null, formalParameterList(parameters));
@@ -737,7 +741,7 @@
           TokenFactory.tokenFromString(contents), value);
 
   static IsExpression isExpression(
-          Expression expression, bool negated, TypeName type) =>
+          Expression expression, bool negated, TypeAnnotation type) =>
       astFactory.isExpression(
           expression,
           TokenFactory.tokenFromKeyword(Keyword.IS),
@@ -813,7 +817,7 @@
 
   static MethodDeclaration methodDeclaration(
           Keyword modifier,
-          TypeName returnType,
+          TypeAnnotation returnType,
           Keyword property,
           Keyword operator,
           SimpleIdentifier name,
@@ -833,7 +837,7 @@
 
   static MethodDeclaration methodDeclaration2(
           Keyword modifier,
-          TypeName returnType,
+          TypeAnnotation returnType,
           Keyword property,
           Keyword operator,
           SimpleIdentifier name,
@@ -854,7 +858,7 @@
 
   static MethodDeclaration methodDeclaration3(
           Keyword modifier,
-          TypeName returnType,
+          TypeAnnotation returnType,
           Keyword property,
           Keyword operator,
           SimpleIdentifier name,
@@ -877,7 +881,7 @@
   static MethodDeclaration methodDeclaration4(
           {bool external: false,
           Keyword modifier,
-          TypeName returnType,
+          TypeAnnotation returnType,
           Keyword property,
           bool operator: false,
           String name,
@@ -1051,7 +1055,7 @@
       simpleFormalParameter2(keyword, null, parameterName);
 
   static SimpleFormalParameter simpleFormalParameter2(
-          Keyword keyword, TypeName type, String parameterName) =>
+          Keyword keyword, TypeAnnotation type, String parameterName) =>
       astFactory.simpleFormalParameter(
           null,
           null,
@@ -1063,7 +1067,7 @@
       simpleFormalParameter2(null, null, parameterName);
 
   static SimpleFormalParameter simpleFormalParameter4(
-          TypeName type, String parameterName) =>
+          TypeAnnotation type, String parameterName) =>
       simpleFormalParameter2(null, type, parameterName);
 
   static StringInterpolation string([List<InterpolationElement> elements]) =>
@@ -1153,7 +1157,7 @@
 
   static TopLevelVariableDeclaration topLevelVariableDeclaration(
           Keyword keyword,
-          TypeName type,
+          TypeAnnotation type,
           List<VariableDeclaration> variables) =>
       astFactory.topLevelVariableDeclaration(
           null,
@@ -1187,7 +1191,7 @@
               : TokenFactory.tokenFromKeyword(Keyword.FINALLY),
           finallyClause);
 
-  static FunctionTypeAlias typeAlias(TypeName returnType, String name,
+  static FunctionTypeAlias typeAlias(TypeAnnotation returnType, String name,
           TypeParameterList typeParameters, FormalParameterList parameters) =>
       astFactory.functionTypeAlias(
           null,
@@ -1199,12 +1203,12 @@
           parameters,
           TokenFactory.tokenFromType(TokenType.SEMICOLON));
 
-  static TypeArgumentList typeArgumentList(List<TypeName> typeNames) {
-    if (typeNames == null || typeNames.length == 0) {
+  static TypeArgumentList typeArgumentList(List<TypeAnnotation> types) {
+    if (types == null || types.length == 0) {
       return null;
     }
     return astFactory.typeArgumentList(TokenFactory.tokenFromType(TokenType.LT),
-        typeNames, TokenFactory.tokenFromType(TokenType.GT));
+        types, TokenFactory.tokenFromType(TokenType.GT));
   }
 
   /**
@@ -1214,7 +1218,8 @@
    * <b>Note:</b> This method does not correctly handle class elements that have
    * type parameters.
    */
-  static TypeName typeName(ClassElement element, [List<TypeName> arguments]) {
+  static TypeName typeName(ClassElement element,
+      [List<TypeAnnotation> arguments]) {
     SimpleIdentifier name = identifier3(element.name);
     name.staticElement = element;
     TypeName typeName = typeName3(name, arguments);
@@ -1222,16 +1227,17 @@
     return typeName;
   }
 
-  static TypeName typeName3(Identifier name, [List<TypeName> arguments]) =>
+  static TypeName typeName3(Identifier name,
+          [List<TypeAnnotation> arguments]) =>
       astFactory.typeName(name, typeArgumentList(arguments));
 
-  static TypeName typeName4(String name, [List<TypeName> arguments]) =>
+  static TypeName typeName4(String name, [List<TypeAnnotation> arguments]) =>
       astFactory.typeName(identifier3(name), typeArgumentList(arguments));
 
   static TypeParameter typeParameter(String name) =>
       astFactory.typeParameter(null, null, identifier3(name), null, null);
 
-  static TypeParameter typeParameter2(String name, TypeName bound) =>
+  static TypeParameter typeParameter2(String name, TypeAnnotation bound) =>
       astFactory.typeParameter(null, null, identifier3(name),
           TokenFactory.tokenFromKeyword(Keyword.EXTENDS), bound);
 
@@ -1258,7 +1264,7 @@
           TokenFactory.tokenFromType(TokenType.EQ), initializer);
 
   static VariableDeclarationList variableDeclarationList(Keyword keyword,
-          TypeName type, List<VariableDeclaration> variables) =>
+          TypeAnnotation type, List<VariableDeclaration> variables) =>
       astFactory.variableDeclarationList(
           null,
           null,
@@ -1272,7 +1278,7 @@
 
   static VariableDeclarationStatement variableDeclarationStatement(
           Keyword keyword,
-          TypeName type,
+          TypeAnnotation type,
           List<VariableDeclaration> variables) =>
       astFactory.variableDeclarationStatement(
           variableDeclarationList(keyword, type, variables),
diff --git a/pkg/analyzer/lib/src/summary/resynthesize.dart b/pkg/analyzer/lib/src/summary/resynthesize.dart
index 69298a5..73f6b8a 100644
--- a/pkg/analyzer/lib/src/summary/resynthesize.dart
+++ b/pkg/analyzer/lib/src/summary/resynthesize.dart
@@ -477,17 +477,18 @@
           _pushList(null);
           break;
         case UnlinkedExprOperation.makeTypedList:
-          TypeName itemType = _newTypeName();
-          _pushList(AstTestFactory.typeArgumentList(<TypeName>[itemType]));
+          TypeAnnotation itemType = _newTypeName();
+          _pushList(
+              AstTestFactory.typeArgumentList(<TypeAnnotation>[itemType]));
           break;
         case UnlinkedExprOperation.makeUntypedMap:
           _pushMap(null);
           break;
         case UnlinkedExprOperation.makeTypedMap:
-          TypeName keyType = _newTypeName();
-          TypeName valueType = _newTypeName();
-          _pushMap(
-              AstTestFactory.typeArgumentList(<TypeName>[keyType, valueType]));
+          TypeAnnotation keyType = _newTypeName();
+          TypeAnnotation valueType = _newTypeName();
+          _pushMap(AstTestFactory
+              .typeArgumentList(<TypeAnnotation>[keyType, valueType]));
           break;
         case UnlinkedExprOperation.pushReference:
           _pushReference();
@@ -579,8 +580,8 @@
     return AstTestFactory.propertyAccess(enclosing, property);
   }
 
-  TypeName _buildTypeAst(DartType type) {
-    List<TypeName> argumentNodes;
+  TypeAnnotation _buildTypeAst(DartType type) {
+    List<TypeAnnotation> argumentNodes;
     if (type is ParameterizedType) {
       if (!resynthesizer.libraryResynthesizer.typesWithImplicitTypeArguments
           .contains(type)) {
@@ -614,7 +615,7 @@
    * Convert the next reference to the [DartType] and return the AST
    * corresponding to this type.
    */
-  TypeName _newTypeName() {
+  TypeAnnotation _newTypeName() {
     EntityRef typeRef = uc.references[refPtr++];
     DartType type =
         resynthesizer.buildType(typeRef, context?.typeParameterContext);
@@ -724,7 +725,8 @@
     TypeArgumentList typeArguments;
     int numTypeArguments = uc.ints[intPtr++];
     if (numTypeArguments > 0) {
-      List<TypeName> typeNames = new List<TypeName>(numTypeArguments);
+      List<TypeAnnotation> typeNames =
+          new List<TypeAnnotation>(numTypeArguments);
       for (int i = 0; i < numTypeArguments; i++) {
         typeNames[i] = _newTypeName();
       }
@@ -1309,7 +1311,7 @@
       // If type arguments are specified, use them.
       // Otherwise, delay until they are requested.
       if (numTypeParameters == 0) {
-        typeArguments = const <DartType>[];
+        return element.type;
       } else if (numTypeArguments == numTypeParameters) {
         typeArguments = new List<DartType>(numTypeParameters);
         for (int i = 0; i < numTypeParameters; i++) {
diff --git a/pkg/analyzer/lib/src/summary/summarize_ast.dart b/pkg/analyzer/lib/src/summary/summarize_ast.dart
index 46b7b2d..7eb3ad5 100644
--- a/pkg/analyzer/lib/src/summary/summarize_ast.dart
+++ b/pkg/analyzer/lib/src/summary/summarize_ast.dart
@@ -567,7 +567,7 @@
       NodeList<Annotation> annotations,
       bool isFinal,
       bool isConst,
-      TypeName type,
+      TypeAnnotation type,
       bool assignPropagatedTypeSlot,
       SimpleIdentifier declaredIdentifier) {
     UnlinkedVariableBuilder b = new UnlinkedVariableBuilder();
@@ -615,7 +615,7 @@
       int nameOffset,
       bool isGetter,
       bool isSetter,
-      TypeName returnType,
+      TypeAnnotation returnType,
       FormalParameterList formalParameters,
       FunctionBody body,
       bool isTopLevel,
@@ -764,7 +764,7 @@
    * parameter and store them in [b].
    */
   void serializeFunctionTypedParameterDetails(UnlinkedParamBuilder b,
-      TypeName returnType, FormalParameterList parameters) {
+      TypeAnnotation returnType, FormalParameterList parameters) {
     EntityRefBuilder serializedReturnType = serializeTypeName(returnType);
     if (serializedReturnType != null) {
       b.type = serializedReturnType;
@@ -933,8 +933,13 @@
    * a [EntityRef].  Note that this method does the right thing if the
    * name doesn't refer to an entity other than a type (e.g. a class member).
    */
-  EntityRefBuilder serializeTypeName(TypeName node) {
-    return serializeType(node?.name, node?.typeArguments);
+  EntityRefBuilder serializeTypeName(TypeAnnotation node) {
+    if (node is TypeName) {
+      return serializeType(node?.name, node?.typeArguments);
+    } else if (node != null) {
+      throw new ArgumentError('Cannot serialize a ${node.runtimeType}');
+    }
+    return null;
   }
 
   /**
@@ -1397,14 +1402,6 @@
   }
 
   /**
-   * Helper method to determine if a given [typeName] refers to `dynamic`.
-   */
-  static bool isDynamic(TypeName typeName) {
-    Identifier name = typeName.name;
-    return name is SimpleIdentifier && name.name == 'dynamic';
-  }
-
-  /**
    * Compute the API signature of the unit and record it.
    */
   static void _computeApiSignature(UnlinkedUnitBuilder b) {
diff --git a/pkg/analyzer/lib/src/summary/summarize_const_expr.dart b/pkg/analyzer/lib/src/summary/summarize_const_expr.dart
index 5a8702a..e3a9017 100644
--- a/pkg/analyzer/lib/src/summary/summarize_const_expr.dart
+++ b/pkg/analyzer/lib/src/summary/summarize_const_expr.dart
@@ -178,8 +178,12 @@
   /**
    * Return [EntityRefBuilder] that corresponds to the given [type].
    */
-  EntityRefBuilder serializeTypeName(TypeName type) {
-    return serializeType(type?.type, type?.name, type?.typeArguments);
+  EntityRefBuilder serializeTypeName(TypeAnnotation type) {
+    if (type is TypeName) {
+      return serializeType(type?.type, type?.name, type?.typeArguments);
+    }
+    throw new ArgumentError(
+        'Cannot serialize an instance of ${type.runtimeType}');
   }
 
   /**
@@ -649,8 +653,8 @@
       ints.add(0);
     } else {
       ints.add(typeArguments.arguments.length);
-      for (TypeName typeName in typeArguments.arguments) {
-        references.add(serializeTypeName(typeName));
+      for (TypeAnnotation type in typeArguments.arguments) {
+        references.add(serializeTypeName(type));
       }
     }
   }
diff --git a/pkg/analyzer/lib/src/task/strong/checker.dart b/pkg/analyzer/lib/src/task/strong/checker.dart
index c528c65c..7ccdcc9 100644
--- a/pkg/analyzer/lib/src/task/strong/checker.dart
+++ b/pkg/analyzer/lib/src/task/strong/checker.dart
@@ -217,8 +217,8 @@
     }
   }
 
-  DartType getType(TypeName name) {
-    return (name == null) ? DynamicTypeImpl.instance : name.type;
+  DartType getType(TypeAnnotation type) {
+    return type?.type ?? DynamicTypeImpl.instance;
   }
 
   void reset() {
@@ -492,7 +492,7 @@
   void visitListLiteral(ListLiteral node) {
     DartType type = DynamicTypeImpl.instance;
     if (node.typeArguments != null) {
-      NodeList<TypeName> targs = node.typeArguments.arguments;
+      NodeList<TypeAnnotation> targs = node.typeArguments.arguments;
       if (targs.length > 0) {
         type = targs[0].type;
       }
@@ -517,7 +517,7 @@
     DartType ktype = DynamicTypeImpl.instance;
     DartType vtype = DynamicTypeImpl.instance;
     if (node.typeArguments != null) {
-      NodeList<TypeName> targs = node.typeArguments.arguments;
+      NodeList<TypeAnnotation> targs = node.typeArguments.arguments;
       if (targs.length > 0) {
         ktype = targs[0].type;
       }
@@ -657,7 +657,7 @@
 
   @override
   void visitVariableDeclarationList(VariableDeclarationList node) {
-    TypeName type = node.type;
+    TypeAnnotation type = node.type;
     if (type == null) {
       // No checks are needed when the type is var. Although internally the
       // typing rules may have inferred a more precise type for the variable
@@ -876,8 +876,8 @@
     if (expression != null) checkAssignment(expression, type);
   }
 
-  void _checkRuntimeTypeCheck(AstNode node, TypeName typeName) {
-    var type = getType(typeName);
+  void _checkRuntimeTypeCheck(AstNode node, TypeAnnotation annotation) {
+    var type = getType(annotation);
     if (!rules.isGroundType(type)) {
       _recordMessage(node, StrongModeCode.NON_GROUND_TYPE_CHECK_INFO, [type]);
     }
diff --git a/pkg/analyzer/test/generated/all_the_rest_test.dart b/pkg/analyzer/test/generated/all_the_rest_test.dart
index 6229305..5a0a1ba 100644
--- a/pkg/analyzer/test/generated/all_the_rest_test.dart
+++ b/pkg/analyzer/test/generated/all_the_rest_test.dart
@@ -4,6 +4,8 @@
 
 library analyzer.test.generated.all_the_rest_test;
 
+import 'dart:async';
+
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -93,7 +95,7 @@
 
 @reflectiveTest
 class ContentCacheTest {
-  void test_setContents() {
+  test_setContents() async {
     Source source = new TestSource();
     ContentCache cache = new ContentCache();
     expect(cache.getContents(source), isNull);
@@ -363,11 +365,11 @@
   void reset() {
     AnalysisOptionsImpl analysisOptions = new AnalysisOptionsImpl();
     analysisOptions.hint = false;
-    resetWithOptions(analysisOptions);
+    resetWith(options: analysisOptions);
   }
 
-  void test_locate_AssignmentExpression() {
-    AstNode id = _findNodeIn(
+  test_locate_AssignmentExpression() async {
+    AstNode id = await _findNodeIn(
         "+=",
         r'''
 int x = 0;
@@ -379,29 +381,29 @@
         (obj) => obj is MethodElement, MethodElement, element);
   }
 
-  void test_locate_BinaryExpression() {
-    AstNode id = _findNodeIn("+", "var x = 3 + 4;");
+  test_locate_BinaryExpression() async {
+    AstNode id = await _findNodeIn("+", "var x = 3 + 4;");
     Element element = ElementLocator.locate(id);
     EngineTestCase.assertInstanceOf(
         (obj) => obj is MethodElement, MethodElement, element);
   }
 
-  void test_locate_ClassDeclaration() {
-    AstNode id = _findNodeIn("class", "class A { }");
+  test_locate_ClassDeclaration() async {
+    AstNode id = await _findNodeIn("class", "class A { }");
     Element element = ElementLocator.locate(id);
     EngineTestCase.assertInstanceOf(
         (obj) => obj is ClassElement, ClassElement, element);
   }
 
-  void test_locate_CompilationUnit() {
-    CompilationUnit cu = _resolveContents("// only comment");
+  test_locate_CompilationUnit() async {
+    CompilationUnit cu = await _resolveContents("// only comment");
     expect(cu.element, isNotNull);
     Element element = ElementLocator.locate(cu);
     expect(element, same(cu.element));
   }
 
-  void test_locate_ConstructorDeclaration() {
-    AstNode id = _findNodeIndexedIn(
+  test_locate_ConstructorDeclaration() async {
+    AstNode id = await _findNodeIndexedIn(
         "bar",
         0,
         r'''
@@ -415,15 +417,15 @@
         (obj) => obj is ConstructorElement, ConstructorElement, element);
   }
 
-  void test_locate_ExportDirective() {
-    AstNode id = _findNodeIn("export", "export 'dart:core';");
+  test_locate_ExportDirective() async {
+    AstNode id = await _findNodeIn("export", "export 'dart:core';");
     Element element = ElementLocator.locate(id);
     EngineTestCase.assertInstanceOf(
         (obj) => obj is ExportElement, ExportElement, element);
   }
 
-  void test_locate_FunctionDeclaration() {
-    AstNode id = _findNodeIn("f", "int f() => 3;");
+  test_locate_FunctionDeclaration() async {
+    AstNode id = await _findNodeIn("f", "int f() => 3;");
     FunctionDeclaration declaration =
         id.getAncestor((node) => node is FunctionDeclaration);
     Element element = ElementLocator.locate(declaration);
@@ -431,9 +433,8 @@
         (obj) => obj is FunctionElement, FunctionElement, element);
   }
 
-  void
-      test_locate_Identifier_annotationClass_namedConstructor_forSimpleFormalParameter() {
-    AstNode id = _findNodeIndexedIn(
+  test_locate_Identifier_annotationClass_namedConstructor_forSimpleFormalParameter() async {
+    AstNode id = await _findNodeIndexedIn(
         "Class",
         2,
         r'''
@@ -447,9 +448,8 @@
         (obj) => obj is ClassElement, ClassElement, element);
   }
 
-  void
-      test_locate_Identifier_annotationClass_unnamedConstructor_forSimpleFormalParameter() {
-    AstNode id = _findNodeIndexedIn(
+  test_locate_Identifier_annotationClass_unnamedConstructor_forSimpleFormalParameter() async {
+    AstNode id = await _findNodeIndexedIn(
         "Class",
         2,
         r'''
@@ -463,15 +463,15 @@
         (obj) => obj is ConstructorElement, ConstructorElement, element);
   }
 
-  void test_locate_Identifier_className() {
-    AstNode id = _findNodeIn("A", "class A { }");
+  test_locate_Identifier_className() async {
+    AstNode id = await _findNodeIn("A", "class A { }");
     Element element = ElementLocator.locate(id);
     EngineTestCase.assertInstanceOf(
         (obj) => obj is ClassElement, ClassElement, element);
   }
 
-  void test_locate_Identifier_constructor_named() {
-    AstNode id = _findNodeIndexedIn(
+  test_locate_Identifier_constructor_named() async {
+    AstNode id = await _findNodeIndexedIn(
         "bar",
         0,
         r'''
@@ -483,8 +483,8 @@
         (obj) => obj is ConstructorElement, ConstructorElement, element);
   }
 
-  void test_locate_Identifier_constructor_unnamed() {
-    AstNode id = _findNodeIndexedIn(
+  test_locate_Identifier_constructor_unnamed() async {
+    AstNode id = await _findNodeIndexedIn(
         "A",
         1,
         r'''
@@ -496,22 +496,22 @@
         (obj) => obj is ConstructorElement, ConstructorElement, element);
   }
 
-  void test_locate_Identifier_fieldName() {
-    AstNode id = _findNodeIn("x", "class A { var x; }");
+  test_locate_Identifier_fieldName() async {
+    AstNode id = await _findNodeIn("x", "class A { var x; }");
     Element element = ElementLocator.locate(id);
     EngineTestCase.assertInstanceOf(
         (obj) => obj is FieldElement, FieldElement, element);
   }
 
-  void test_locate_Identifier_libraryDirective() {
-    AstNode id = _findNodeIn("foo", "library foo.bar;");
+  test_locate_Identifier_libraryDirective() async {
+    AstNode id = await _findNodeIn("foo", "library foo.bar;");
     Element element = ElementLocator.locate(id);
     EngineTestCase.assertInstanceOf(
         (obj) => obj is LibraryElement, LibraryElement, element);
   }
 
-  void test_locate_Identifier_propertyAccess() {
-    AstNode id = _findNodeIn(
+  test_locate_Identifier_propertyAccess() async {
+    AstNode id = await _findNodeIn(
         "length",
         r'''
 void main() {
@@ -522,15 +522,15 @@
         PropertyAccessorElement, element);
   }
 
-  void test_locate_ImportDirective() {
-    AstNode id = _findNodeIn("import", "import 'dart:core';");
+  test_locate_ImportDirective() async {
+    AstNode id = await _findNodeIn("import", "import 'dart:core';");
     Element element = ElementLocator.locate(id);
     EngineTestCase.assertInstanceOf(
         (obj) => obj is ImportElement, ImportElement, element);
   }
 
-  void test_locate_IndexExpression() {
-    AstNode id = _findNodeIndexedIn(
+  test_locate_IndexExpression() async {
+    AstNode id = await _findNodeIndexedIn(
         "\\[",
         1,
         r'''
@@ -543,8 +543,8 @@
         (obj) => obj is MethodElement, MethodElement, element);
   }
 
-  void test_locate_InstanceCreationExpression() {
-    AstNode node = _findNodeIndexedIn(
+  test_locate_InstanceCreationExpression() async {
+    AstNode node = await _findNodeIndexedIn(
         "A(",
         0,
         r'''
@@ -557,7 +557,7 @@
         (obj) => obj is ConstructorElement, ConstructorElement, element);
   }
 
-  void test_locate_InstanceCreationExpression_type_prefixedIdentifier() {
+  test_locate_InstanceCreationExpression_type_prefixedIdentifier() async {
     // prepare: new pref.A()
     SimpleIdentifier identifier = AstTestFactory.identifier3("A");
     PrefixedIdentifier prefixedIdentifier =
@@ -577,7 +577,7 @@
     expect(element, same(classElement));
   }
 
-  void test_locate_InstanceCreationExpression_type_simpleIdentifier() {
+  test_locate_InstanceCreationExpression_type_simpleIdentifier() async {
     // prepare: new A()
     SimpleIdentifier identifier = AstTestFactory.identifier3("A");
     InstanceCreationExpression creation =
@@ -595,15 +595,15 @@
     expect(element, same(classElement));
   }
 
-  void test_locate_LibraryDirective() {
-    AstNode id = _findNodeIn("library", "library foo;");
+  test_locate_LibraryDirective() async {
+    AstNode id = await _findNodeIn("library", "library foo;");
     Element element = ElementLocator.locate(id);
     EngineTestCase.assertInstanceOf(
         (obj) => obj is LibraryElement, LibraryElement, element);
   }
 
-  void test_locate_MethodDeclaration() {
-    AstNode id = _findNodeIn(
+  test_locate_MethodDeclaration() async {
+    AstNode id = await _findNodeIn(
         "m",
         r'''
 class A {
@@ -616,8 +616,8 @@
         (obj) => obj is MethodElement, MethodElement, element);
   }
 
-  void test_locate_MethodInvocation_method() {
-    AstNode id = _findNodeIndexedIn(
+  test_locate_MethodInvocation_method() async {
+    AstNode id = await _findNodeIndexedIn(
         "bar",
         1,
         r'''
@@ -632,13 +632,13 @@
         (obj) => obj is MethodElement, MethodElement, element);
   }
 
-  void test_locate_MethodInvocation_topLevel() {
+  test_locate_MethodInvocation_topLevel() async {
     String code = r'''
 foo(x) {}
 void main() {
  foo(0);
 }''';
-    CompilationUnit cu = _resolveContents(code);
+    CompilationUnit cu = await _resolveContents(code);
     int offset = code.indexOf('foo(0)');
     AstNode node = new NodeLocator(offset).searchWithin(cu);
     MethodInvocation invocation =
@@ -648,7 +648,7 @@
         (obj) => obj is FunctionElement, FunctionElement, element);
   }
 
-  void test_locate_PartOfDirective() {
+  test_locate_PartOfDirective() async {
     Source librarySource = addNamedSource(
         '/lib.dart',
         '''
@@ -668,15 +668,15 @@
         (obj) => obj is LibraryElement, LibraryElement, element);
   }
 
-  void test_locate_PostfixExpression() {
-    AstNode id = _findNodeIn("++", "int addOne(int x) => x++;");
+  test_locate_PostfixExpression() async {
+    AstNode id = await _findNodeIn("++", "int addOne(int x) => x++;");
     Element element = ElementLocator.locate(id);
     EngineTestCase.assertInstanceOf(
         (obj) => obj is MethodElement, MethodElement, element);
   }
 
-  void test_locate_PrefixedIdentifier() {
-    AstNode id = _findNodeIn(
+  test_locate_PrefixedIdentifier() async {
+    AstNode id = await _findNodeIn(
         "int",
         r'''
 import 'dart:core' as core;
@@ -688,46 +688,47 @@
         (obj) => obj is ClassElement, ClassElement, element);
   }
 
-  void test_locate_PrefixExpression() {
-    AstNode id = _findNodeIn("++", "int addOne(int x) => ++x;");
+  test_locate_PrefixExpression() async {
+    AstNode id = await _findNodeIn("++", "int addOne(int x) => ++x;");
     Element element = ElementLocator.locate(id);
     EngineTestCase.assertInstanceOf(
         (obj) => obj is MethodElement, MethodElement, element);
   }
 
-  void test_locate_StringLiteral_exportUri() {
+  test_locate_StringLiteral_exportUri() async {
     addNamedSource("/foo.dart", "library foo;");
-    AstNode id = _findNodeIn("'foo.dart'", "export 'foo.dart';");
+    AstNode id = await _findNodeIn("'foo.dart'", "export 'foo.dart';");
     Element element = ElementLocator.locate(id);
     EngineTestCase.assertInstanceOf(
         (obj) => obj is LibraryElement, LibraryElement, element);
   }
 
-  void test_locate_StringLiteral_expression() {
-    AstNode id = _findNodeIn("abc", "var x = 'abc';");
+  test_locate_StringLiteral_expression() async {
+    AstNode id = await _findNodeIn("abc", "var x = 'abc';");
     Element element = ElementLocator.locate(id);
     expect(element, isNull);
   }
 
-  void test_locate_StringLiteral_importUri() {
+  test_locate_StringLiteral_importUri() async {
     addNamedSource("/foo.dart", "library foo; class A {}");
-    AstNode id =
-        _findNodeIn("'foo.dart'", "import 'foo.dart'; class B extends A {}");
+    AstNode id = await _findNodeIn(
+        "'foo.dart'", "import 'foo.dart'; class B extends A {}");
     Element element = ElementLocator.locate(id);
     EngineTestCase.assertInstanceOf(
         (obj) => obj is LibraryElement, LibraryElement, element);
   }
 
-  void test_locate_StringLiteral_partUri() {
+  test_locate_StringLiteral_partUri() async {
     addNamedSource("/foo.dart", "part of app;");
-    AstNode id = _findNodeIn("'foo.dart'", "library app; part 'foo.dart';");
+    AstNode id =
+        await _findNodeIn("'foo.dart'", "library app; part 'foo.dart';");
     Element element = ElementLocator.locate(id);
     EngineTestCase.assertInstanceOf((obj) => obj is CompilationUnitElement,
         CompilationUnitElement, element);
   }
 
-  void test_locate_VariableDeclaration() {
-    AstNode id = _findNodeIn("x", "var x = 'abc';");
+  test_locate_VariableDeclaration() async {
+    AstNode id = await _findNodeIn("x", "var x = 'abc';");
     VariableDeclaration declaration =
         id.getAncestor((node) => node is VariableDeclaration);
     Element element = ElementLocator.locate(declaration);
@@ -742,8 +743,8 @@
    * [code] the code to resolve.
    * Returns the matched node in the resolved AST for the given source lines.
    */
-  AstNode _findNodeIn(String nodePattern, String code) {
-    return _findNodeIndexedIn(nodePattern, 0, code);
+  Future<AstNode> _findNodeIn(String nodePattern, String code) async {
+    return await _findNodeIndexedIn(nodePattern, 0, code);
   }
 
   /**
@@ -755,8 +756,9 @@
    * [code] the code to resolve.
    * Returns the matched node in the resolved AST for the given source lines
    */
-  AstNode _findNodeIndexedIn(String nodePattern, int index, String code) {
-    CompilationUnit cu = _resolveContents(code);
+  Future<AstNode> _findNodeIndexedIn(
+      String nodePattern, int index, String code) async {
+    CompilationUnit cu = await _resolveContents(code);
     int start = _getOffsetOfMatch(code, nodePattern, index);
     int end = start + nodePattern.length;
     return new NodeLocator(start, end).searchWithin(cu);
@@ -782,9 +784,10 @@
    *
    * Throws if source cannot be verified.
    */
-  CompilationUnit _resolveContents(String code) {
+  Future<CompilationUnit> _resolveContents(String code) async {
     Source source = addSource(code);
     LibraryElement library = resolve2(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
     return analysisContext.resolveCompilationUnit(source, library);
@@ -793,7 +796,7 @@
 
 @reflectiveTest
 class EnumMemberBuilderTest extends EngineTestCase {
-  void test_visitEnumDeclaration_multiple() {
+  test_visitEnumDeclaration_multiple() async {
     String firstName = "ONE";
     String secondName = "TWO";
     String thirdName = "THREE";
@@ -826,7 +829,7 @@
     _assertGetter(constant);
   }
 
-  void test_visitEnumDeclaration_single() {
+  test_visitEnumDeclaration_single() async {
     String firstName = "ONE";
     EnumDeclaration enumDeclaration =
         AstTestFactory.enumDeclaration2("E", [firstName]);
@@ -901,13 +904,13 @@
     return element.type;
   }
 
-  void test_creation() {
+  test_creation() async {
     GatheringErrorListener listener = new GatheringErrorListener();
     TestSource source = new TestSource();
     expect(new ErrorReporter(listener, source), isNotNull);
   }
 
-  void test_reportErrorForElement_named() {
+  test_reportErrorForElement_named() async {
     DartType type = createType("/test1.dart", "A");
     ClassElement element = type.element;
     GatheringErrorListener listener = new GatheringErrorListener();
@@ -920,7 +923,7 @@
     expect(error.offset, element.nameOffset);
   }
 
-  void test_reportErrorForElement_unnamed() {
+  test_reportErrorForElement_unnamed() async {
     ImportElementImpl element =
         ElementFactory.importFor(ElementFactory.library(null, ''), null);
     GatheringErrorListener listener = new GatheringErrorListener();
@@ -936,7 +939,7 @@
     expect(error.offset, element.nameOffset);
   }
 
-  void test_reportErrorForSpan() {
+  test_reportErrorForSpan() async {
     GatheringErrorListener listener = new GatheringErrorListener();
     ErrorReporter reporter = new ErrorReporter(listener, new TestSource());
 
@@ -959,7 +962,7 @@
     expect(listener.errors.first.length, length);
   }
 
-  void test_reportTypeErrorForNode_differentNames() {
+  test_reportTypeErrorForNode_differentNames() async {
     DartType firstType = createType("/test1.dart", "A");
     DartType secondType = createType("/test2.dart", "B");
     GatheringErrorListener listener = new GatheringErrorListener();
@@ -973,7 +976,7 @@
     expect(error.message.indexOf("(") < 0, isTrue);
   }
 
-  void test_reportTypeErrorForNode_sameName() {
+  test_reportTypeErrorForNode_sameName() async {
     String typeName = "A";
     DartType firstType = createType("/test1.dart", typeName);
     DartType secondType = createType("/test2.dart", typeName);
@@ -991,47 +994,47 @@
 
 @reflectiveTest
 class ErrorSeverityTest extends EngineTestCase {
-  void test_max_error_error() {
+  test_max_error_error() async {
     expect(ErrorSeverity.ERROR.max(ErrorSeverity.ERROR),
         same(ErrorSeverity.ERROR));
   }
 
-  void test_max_error_none() {
+  test_max_error_none() async {
     expect(
         ErrorSeverity.ERROR.max(ErrorSeverity.NONE), same(ErrorSeverity.ERROR));
   }
 
-  void test_max_error_warning() {
+  test_max_error_warning() async {
     expect(ErrorSeverity.ERROR.max(ErrorSeverity.WARNING),
         same(ErrorSeverity.ERROR));
   }
 
-  void test_max_none_error() {
+  test_max_none_error() async {
     expect(
         ErrorSeverity.NONE.max(ErrorSeverity.ERROR), same(ErrorSeverity.ERROR));
   }
 
-  void test_max_none_none() {
+  test_max_none_none() async {
     expect(
         ErrorSeverity.NONE.max(ErrorSeverity.NONE), same(ErrorSeverity.NONE));
   }
 
-  void test_max_none_warning() {
+  test_max_none_warning() async {
     expect(ErrorSeverity.NONE.max(ErrorSeverity.WARNING),
         same(ErrorSeverity.WARNING));
   }
 
-  void test_max_warning_error() {
+  test_max_warning_error() async {
     expect(ErrorSeverity.WARNING.max(ErrorSeverity.ERROR),
         same(ErrorSeverity.ERROR));
   }
 
-  void test_max_warning_none() {
+  test_max_warning_none() async {
     expect(ErrorSeverity.WARNING.max(ErrorSeverity.NONE),
         same(ErrorSeverity.WARNING));
   }
 
-  void test_max_warning_warning() {
+  test_max_warning_warning() async {
     expect(ErrorSeverity.WARNING.max(ErrorSeverity.WARNING),
         same(ErrorSeverity.WARNING));
   }
@@ -1044,220 +1047,220 @@
  */
 @reflectiveTest
 class ExitDetectorTest extends ParserTestCase {
-  void test_asExpression() {
+  test_asExpression() async {
     _assertFalse("a as Object;");
   }
 
-  void test_asExpression_throw() {
+  test_asExpression_throw() async {
     _assertTrue("throw '' as Object;");
   }
 
-  void test_assertStatement() {
+  test_assertStatement() async {
     _assertFalse("assert(a);");
   }
 
-  void test_assertStatement_throw() {
+  test_assertStatement_throw() async {
     _assertFalse("assert((throw 0));");
   }
 
-  void test_assignmentExpression() {
+  test_assignmentExpression() async {
     _assertFalse("v = 1;");
   }
 
-  void test_assignmentExpression_compound_lazy() {
+  test_assignmentExpression_compound_lazy() async {
     enableLazyAssignmentOperators = true;
     _assertFalse("v ||= false;");
   }
 
-  void test_assignmentExpression_lhs_throw() {
+  test_assignmentExpression_lhs_throw() async {
     _assertTrue("a[throw ''] = 0;");
   }
 
-  void test_assignmentExpression_rhs_throw() {
+  test_assignmentExpression_rhs_throw() async {
     _assertTrue("v = throw '';");
   }
 
-  void test_await_false() {
+  test_await_false() async {
     _assertFalse("await x;");
   }
 
-  void test_await_throw_true() {
+  test_await_throw_true() async {
     _assertTrue("bool b = await (throw '' || true);");
   }
 
-  void test_binaryExpression_and() {
+  test_binaryExpression_and() async {
     _assertFalse("a && b;");
   }
 
-  void test_binaryExpression_and_lhs() {
+  test_binaryExpression_and_lhs() async {
     _assertTrue("throw '' && b;");
   }
 
-  void test_binaryExpression_and_rhs() {
+  test_binaryExpression_and_rhs() async {
     _assertFalse("a && (throw '');");
   }
 
-  void test_binaryExpression_and_rhs2() {
+  test_binaryExpression_and_rhs2() async {
     _assertFalse("false && (throw '');");
   }
 
-  void test_binaryExpression_and_rhs3() {
+  test_binaryExpression_and_rhs3() async {
     _assertTrue("true && (throw '');");
   }
 
-  void test_binaryExpression_ifNull() {
+  test_binaryExpression_ifNull() async {
     _assertFalse("a ?? b;");
   }
 
-  void test_binaryExpression_ifNull_lhs() {
+  test_binaryExpression_ifNull_lhs() async {
     _assertTrue("throw '' ?? b;");
   }
 
-  void test_binaryExpression_ifNull_rhs() {
+  test_binaryExpression_ifNull_rhs() async {
     _assertFalse("a ?? (throw '');");
   }
 
-  void test_binaryExpression_ifNull_rhs2() {
+  test_binaryExpression_ifNull_rhs2() async {
     _assertFalse("null ?? (throw '');");
   }
 
-  void test_binaryExpression_or() {
+  test_binaryExpression_or() async {
     _assertFalse("a || b;");
   }
 
-  void test_binaryExpression_or_lhs() {
+  test_binaryExpression_or_lhs() async {
     _assertTrue("throw '' || b;");
   }
 
-  void test_binaryExpression_or_rhs() {
+  test_binaryExpression_or_rhs() async {
     _assertFalse("a || (throw '');");
   }
 
-  void test_binaryExpression_or_rhs2() {
+  test_binaryExpression_or_rhs2() async {
     _assertFalse("true || (throw '');");
   }
 
-  void test_binaryExpression_or_rhs3() {
+  test_binaryExpression_or_rhs3() async {
     _assertTrue("false || (throw '');");
   }
 
-  void test_block_empty() {
+  test_block_empty() async {
     _assertFalse("{}");
   }
 
-  void test_block_noReturn() {
+  test_block_noReturn() async {
     _assertFalse("{ int i = 0; }");
   }
 
-  void test_block_return() {
+  test_block_return() async {
     _assertTrue("{ return 0; }");
   }
 
-  void test_block_returnNotLast() {
+  test_block_returnNotLast() async {
     _assertTrue("{ return 0; throw 'a'; }");
   }
 
-  void test_block_throwNotLast() {
+  test_block_throwNotLast() async {
     _assertTrue("{ throw 0; x = null; }");
   }
 
-  void test_cascadeExpression_argument() {
+  test_cascadeExpression_argument() async {
     _assertTrue("a..b(throw '');");
   }
 
-  void test_cascadeExpression_index() {
+  test_cascadeExpression_index() async {
     _assertTrue("a..[throw ''];");
   }
 
-  void test_cascadeExpression_target() {
+  test_cascadeExpression_target() async {
     _assertTrue("throw ''..b();");
   }
 
-  void test_conditional_ifElse_bothThrows() {
+  test_conditional_ifElse_bothThrows() async {
     _assertTrue("c ? throw '' : throw '';");
   }
 
-  void test_conditional_ifElse_elseThrows() {
+  test_conditional_ifElse_elseThrows() async {
     _assertFalse("c ? i : throw '';");
   }
 
-  void test_conditional_ifElse_noThrow() {
+  test_conditional_ifElse_noThrow() async {
     _assertFalse("c ? i : j;");
   }
 
-  void test_conditional_ifElse_thenThrow() {
+  test_conditional_ifElse_thenThrow() async {
     _assertFalse("c ? throw '' : j;");
   }
 
-  void test_conditionalAccess() {
+  test_conditionalAccess() async {
     _assertFalse("a?.b;");
   }
 
-  void test_conditionalAccess_lhs() {
+  test_conditionalAccess_lhs() async {
     _assertTrue("(throw '')?.b;");
   }
 
-  void test_conditionalAccessAssign() {
+  test_conditionalAccessAssign() async {
     _assertFalse("a?.b = c;");
   }
 
-  void test_conditionalAccessAssign_lhs() {
+  test_conditionalAccessAssign_lhs() async {
     _assertTrue("(throw '')?.b = c;");
   }
 
-  void test_conditionalAccessAssign_rhs() {
+  test_conditionalAccessAssign_rhs() async {
     _assertFalse("a?.b = throw '';");
   }
 
-  void test_conditionalAccessAssign_rhs2() {
+  test_conditionalAccessAssign_rhs2() async {
     _assertFalse("null?.b = throw '';");
   }
 
-  void test_conditionalAccessIfNullAssign() {
+  test_conditionalAccessIfNullAssign() async {
     _assertFalse("a?.b ??= c;");
   }
 
-  void test_conditionalAccessIfNullAssign_lhs() {
+  test_conditionalAccessIfNullAssign_lhs() async {
     _assertTrue("(throw '')?.b ??= c;");
   }
 
-  void test_conditionalAccessIfNullAssign_rhs() {
+  test_conditionalAccessIfNullAssign_rhs() async {
     _assertFalse("a?.b ??= throw '';");
   }
 
-  void test_conditionalAccessIfNullAssign_rhs2() {
+  test_conditionalAccessIfNullAssign_rhs2() async {
     _assertFalse("null?.b ??= throw '';");
   }
 
-  void test_conditionalCall() {
+  test_conditionalCall() async {
     _assertFalse("a?.b(c);");
   }
 
-  void test_conditionalCall_lhs() {
+  test_conditionalCall_lhs() async {
     _assertTrue("(throw '')?.b(c);");
   }
 
-  void test_conditionalCall_rhs() {
+  test_conditionalCall_rhs() async {
     _assertFalse("a?.b(throw '');");
   }
 
-  void test_conditionalCall_rhs2() {
+  test_conditionalCall_rhs2() async {
     _assertFalse("null?.b(throw '');");
   }
 
-  void test_creation() {
+  test_creation() async {
     expect(new ExitDetector(), isNotNull);
   }
 
-  void test_doStatement_break_and_throw() {
+  test_doStatement_break_and_throw() async {
     _assertFalse("{ do { if (1==1) break; throw 'T'; } while (0==1); }");
   }
 
-  void test_doStatement_continue_and_throw() {
+  test_doStatement_continue_and_throw() async {
     _assertFalse("{ do { if (1==1) continue; throw 'T'; } while (0==1); }");
   }
 
-  void test_doStatement_continueDoInSwitch_and_throw() {
+  test_doStatement_continueDoInSwitch_and_throw() async {
     _assertFalse('''
 {
   D: do {
@@ -1270,7 +1273,7 @@
 }''');
   }
 
-  void test_doStatement_continueInSwitch_and_throw() {
+  test_doStatement_continueInSwitch_and_throw() async {
     _assertFalse('''
 {
   do {
@@ -1283,287 +1286,287 @@
 }''');
   }
 
-  void test_doStatement_return() {
+  test_doStatement_return() async {
     _assertTrue("{ do { return null; } while (1 == 2); }");
   }
 
-  void test_doStatement_throwCondition() {
+  test_doStatement_throwCondition() async {
     _assertTrue("{ do {} while (throw ''); }");
   }
 
-  void test_doStatement_true_break() {
+  test_doStatement_true_break() async {
     _assertFalse("{ do { break; } while (true); }");
   }
 
-  void test_doStatement_true_continue() {
+  test_doStatement_true_continue() async {
     _assertTrue("{ do { continue; } while (true); }");
   }
 
-  void test_doStatement_true_continueWithLabel() {
+  test_doStatement_true_continueWithLabel() async {
     _assertTrue("{ x: do { continue x; } while (true); }");
   }
 
-  void test_doStatement_true_if_return() {
+  test_doStatement_true_if_return() async {
     _assertTrue("{ do { if (true) {return null;} } while (true); }");
   }
 
-  void test_doStatement_true_noBreak() {
+  test_doStatement_true_noBreak() async {
     _assertTrue("{ do {} while (true); }");
   }
 
-  void test_doStatement_true_return() {
+  test_doStatement_true_return() async {
     _assertTrue("{ do { return null; } while (true);  }");
   }
 
-  void test_emptyStatement() {
+  test_emptyStatement() async {
     _assertFalse(";");
   }
 
-  void test_forEachStatement() {
+  test_forEachStatement() async {
     _assertFalse("for (element in list) {}");
   }
 
-  void test_forEachStatement_throw() {
+  test_forEachStatement_throw() async {
     _assertTrue("for (element in throw '') {}");
   }
 
-  void test_forStatement_condition() {
+  test_forStatement_condition() async {
     _assertTrue("for (; throw 0;) {}");
   }
 
-  void test_forStatement_implicitTrue() {
+  test_forStatement_implicitTrue() async {
     _assertTrue("for (;;) {}");
   }
 
-  void test_forStatement_implicitTrue_break() {
+  test_forStatement_implicitTrue_break() async {
     _assertFalse("for (;;) { break; }");
   }
 
-  void test_forStatement_implicitTrue_if_break() {
+  test_forStatement_implicitTrue_if_break() async {
     _assertFalse("{ for (;;) { if (1==2) { var a = 1; } else { break; } } }");
   }
 
-  void test_forStatement_initialization() {
+  test_forStatement_initialization() async {
     _assertTrue("for (i = throw 0;;) {}");
   }
 
-  void test_forStatement_true() {
+  test_forStatement_true() async {
     _assertTrue("for (; true; ) {}");
   }
 
-  void test_forStatement_true_break() {
+  test_forStatement_true_break() async {
     _assertFalse("{ for (; true; ) { break; } }");
   }
 
-  void test_forStatement_true_continue() {
+  test_forStatement_true_continue() async {
     _assertTrue("{ for (; true; ) { continue; } }");
   }
 
-  void test_forStatement_true_if_return() {
+  test_forStatement_true_if_return() async {
     _assertTrue("{ for (; true; ) { if (true) {return null;} } }");
   }
 
-  void test_forStatement_true_noBreak() {
+  test_forStatement_true_noBreak() async {
     _assertTrue("{ for (; true; ) {} }");
   }
 
-  void test_forStatement_updaters() {
+  test_forStatement_updaters() async {
     _assertTrue("for (;; i++, throw 0) {}");
   }
 
-  void test_forStatement_variableDeclaration() {
+  test_forStatement_variableDeclaration() async {
     _assertTrue("for (int i = throw 0;;) {}");
   }
 
-  void test_functionExpression() {
+  test_functionExpression() async {
     _assertFalse("(){};");
   }
 
-  void test_functionExpression_bodyThrows() {
+  test_functionExpression_bodyThrows() async {
     _assertFalse("(int i) => throw '';");
   }
 
-  void test_functionExpressionInvocation() {
+  test_functionExpressionInvocation() async {
     _assertFalse("f(g);");
   }
 
-  void test_functionExpressionInvocation_argumentThrows() {
+  test_functionExpressionInvocation_argumentThrows() async {
     _assertTrue("f(throw '');");
   }
 
-  void test_functionExpressionInvocation_targetThrows() {
+  test_functionExpressionInvocation_targetThrows() async {
     _assertTrue("throw ''(g);");
   }
 
-  void test_identifier_prefixedIdentifier() {
+  test_identifier_prefixedIdentifier() async {
     _assertFalse("a.b;");
   }
 
-  void test_identifier_simpleIdentifier() {
+  test_identifier_simpleIdentifier() async {
     _assertFalse("a;");
   }
 
-  void test_if_false_else_return() {
+  test_if_false_else_return() async {
     _assertTrue("if (false) {} else { return 0; }");
   }
 
-  void test_if_false_noReturn() {
+  test_if_false_noReturn() async {
     _assertFalse("if (false) {}");
   }
 
-  void test_if_false_return() {
+  test_if_false_return() async {
     _assertFalse("if (false) { return 0; }");
   }
 
-  void test_if_noReturn() {
+  test_if_noReturn() async {
     _assertFalse("if (c) i++;");
   }
 
-  void test_if_return() {
+  test_if_return() async {
     _assertFalse("if (c) return 0;");
   }
 
-  void test_if_true_noReturn() {
+  test_if_true_noReturn() async {
     _assertFalse("if (true) {}");
   }
 
-  void test_if_true_return() {
+  test_if_true_return() async {
     _assertTrue("if (true) { return 0; }");
   }
 
-  void test_ifElse_bothReturn() {
+  test_ifElse_bothReturn() async {
     _assertTrue("if (c) return 0; else return 1;");
   }
 
-  void test_ifElse_elseReturn() {
+  test_ifElse_elseReturn() async {
     _assertFalse("if (c) i++; else return 1;");
   }
 
-  void test_ifElse_noReturn() {
+  test_ifElse_noReturn() async {
     _assertFalse("if (c) i++; else j++;");
   }
 
-  void test_ifElse_thenReturn() {
+  test_ifElse_thenReturn() async {
     _assertFalse("if (c) return 0; else j++;");
   }
 
-  void test_ifNullAssign() {
+  test_ifNullAssign() async {
     _assertFalse("a ??= b;");
   }
 
-  void test_ifNullAssign_rhs() {
+  test_ifNullAssign_rhs() async {
     _assertFalse("a ??= throw '';");
   }
 
-  void test_indexExpression() {
+  test_indexExpression() async {
     _assertFalse("a[b];");
   }
 
-  void test_indexExpression_index() {
+  test_indexExpression_index() async {
     _assertTrue("a[throw ''];");
   }
 
-  void test_indexExpression_target() {
+  test_indexExpression_target() async {
     _assertTrue("throw ''[b];");
   }
 
-  void test_instanceCreationExpression() {
+  test_instanceCreationExpression() async {
     _assertFalse("new A(b);");
   }
 
-  void test_instanceCreationExpression_argumentThrows() {
+  test_instanceCreationExpression_argumentThrows() async {
     _assertTrue("new A(throw '');");
   }
 
-  void test_isExpression() {
+  test_isExpression() async {
     _assertFalse("A is B;");
   }
 
-  void test_isExpression_throws() {
+  test_isExpression_throws() async {
     _assertTrue("throw '' is B;");
   }
 
-  void test_labeledStatement() {
+  test_labeledStatement() async {
     _assertFalse("label: a;");
   }
 
-  void test_labeledStatement_throws() {
+  test_labeledStatement_throws() async {
     _assertTrue("label: throw '';");
   }
 
-  void test_literal_boolean() {
+  test_literal_boolean() async {
     _assertFalse("true;");
   }
 
-  void test_literal_double() {
+  test_literal_double() async {
     _assertFalse("1.1;");
   }
 
-  void test_literal_integer() {
+  test_literal_integer() async {
     _assertFalse("1;");
   }
 
-  void test_literal_null() {
+  test_literal_null() async {
     _assertFalse("null;");
   }
 
-  void test_literal_String() {
+  test_literal_String() async {
     _assertFalse("'str';");
   }
 
-  void test_methodInvocation() {
+  test_methodInvocation() async {
     _assertFalse("a.b(c);");
   }
 
-  void test_methodInvocation_argument() {
+  test_methodInvocation_argument() async {
     _assertTrue("a.b(throw '');");
   }
 
-  void test_methodInvocation_target() {
+  test_methodInvocation_target() async {
     _assertTrue("throw ''.b(c);");
   }
 
-  void test_parenthesizedExpression() {
+  test_parenthesizedExpression() async {
     _assertFalse("(a);");
   }
 
-  void test_parenthesizedExpression_throw() {
+  test_parenthesizedExpression_throw() async {
     _assertTrue("(throw '');");
   }
 
-  void test_propertyAccess() {
+  test_propertyAccess() async {
     _assertFalse("new Object().a;");
   }
 
-  void test_propertyAccess_throws() {
+  test_propertyAccess_throws() async {
     _assertTrue("(throw '').a;");
   }
 
-  void test_rethrow() {
+  test_rethrow() async {
     _assertTrue("rethrow;");
   }
 
-  void test_return() {
+  test_return() async {
     _assertTrue("return 0;");
   }
 
-  void test_superExpression() {
+  test_superExpression() async {
     _assertFalse("super.a;");
   }
 
-  void test_switch_allReturn() {
+  test_switch_allReturn() async {
     _assertTrue("switch (i) { case 0: return 0; default: return 1; }");
   }
 
-  void test_switch_defaultWithNoStatements() {
+  test_switch_defaultWithNoStatements() async {
     _assertFalse("switch (i) { case 0: return 0; default: }");
   }
 
-  void test_switch_fallThroughToNotReturn() {
+  test_switch_fallThroughToNotReturn() async {
     _assertFalse("switch (i) { case 0: case 1: break; default: return 1; }");
   }
 
-  void test_switch_fallThroughToReturn() {
+  test_switch_fallThroughToReturn() async {
     _assertTrue("switch (i) { case 0: case 1: return 0; default: return 1; }");
   }
 
@@ -1571,7 +1574,7 @@
   // determine that `case 0` exits, `case 1` continues to an exiting case, and
   // `default` exits, so the switch exits.
   @failingTest
-  void test_switch_includesContinue() {
+  test_switch_includesContinue() async {
     _assertTrue('''
 switch (i) {
   zero: case 0: return 0;
@@ -1580,63 +1583,63 @@
 }''');
   }
 
-  void test_switch_noDefault() {
+  test_switch_noDefault() async {
     _assertFalse("switch (i) { case 0: return 0; }");
   }
 
-  void test_switch_nonReturn() {
+  test_switch_nonReturn() async {
     _assertFalse("switch (i) { case 0: i++; default: return 1; }");
   }
 
-  void test_thisExpression() {
+  test_thisExpression() async {
     _assertFalse("this.a;");
   }
 
-  void test_throwExpression() {
+  test_throwExpression() async {
     _assertTrue("throw new Object();");
   }
 
-  void test_tryStatement_noReturn() {
+  test_tryStatement_noReturn() async {
     _assertFalse("try {} catch (e, s) {} finally {}");
   }
 
-  void test_tryStatement_noReturn_noFinally() {
+  test_tryStatement_noReturn_noFinally() async {
     _assertFalse("try {} catch (e, s) {}");
   }
 
-  void test_tryStatement_return_catch() {
+  test_tryStatement_return_catch() async {
     _assertFalse("try {} catch (e, s) { return 1; } finally {}");
   }
 
-  void test_tryStatement_return_catch_noFinally() {
+  test_tryStatement_return_catch_noFinally() async {
     _assertFalse("try {} catch (e, s) { return 1; }");
   }
 
-  void test_tryStatement_return_finally() {
+  test_tryStatement_return_finally() async {
     _assertTrue("try {} catch (e, s) {} finally { return 1; }");
   }
 
-  void test_tryStatement_return_try_noCatch() {
+  test_tryStatement_return_try_noCatch() async {
     _assertTrue("try { return 1; } finally {}");
   }
 
-  void test_tryStatement_return_try_oneCatchDoesNotExit() {
+  test_tryStatement_return_try_oneCatchDoesNotExit() async {
     _assertFalse("try { return 1; } catch (e, s) {} finally {}");
   }
 
-  void test_tryStatement_return_try_oneCatchDoesNotExit_noFinally() {
+  test_tryStatement_return_try_oneCatchDoesNotExit_noFinally() async {
     _assertFalse("try { return 1; } catch (e, s) {}");
   }
 
-  void test_tryStatement_return_try_oneCatchExits() {
+  test_tryStatement_return_try_oneCatchExits() async {
     _assertTrue("try { return 1; } catch (e, s) { return 1; } finally {}");
   }
 
-  void test_tryStatement_return_try_oneCatchExits_noFinally() {
+  test_tryStatement_return_try_oneCatchExits_noFinally() async {
     _assertTrue("try { return 1; } catch (e, s) { return 1; }");
   }
 
-  void test_tryStatement_return_try_twoCatchesDoExit() {
+  test_tryStatement_return_try_twoCatchesDoExit() async {
     _assertTrue('''
 try { return 1; }
 on int catch (e, s) { return 1; }
@@ -1644,14 +1647,14 @@
 finally {}''');
   }
 
-  void test_tryStatement_return_try_twoCatchesDoExit_noFinally() {
+  test_tryStatement_return_try_twoCatchesDoExit_noFinally() async {
     _assertTrue('''
 try { return 1; }
 on int catch (e, s) { return 1; }
 on String catch (e, s) { return 1; }''');
   }
 
-  void test_tryStatement_return_try_twoCatchesDoNotExit() {
+  test_tryStatement_return_try_twoCatchesDoNotExit() async {
     _assertFalse('''
 try { return 1; }
 on int catch (e, s) {}
@@ -1659,14 +1662,14 @@
 finally {}''');
   }
 
-  void test_tryStatement_return_try_twoCatchesDoNotExit_noFinally() {
+  test_tryStatement_return_try_twoCatchesDoNotExit_noFinally() async {
     _assertFalse('''
 try { return 1; }
 on int catch (e, s) {}
 on String catch (e, s) {}''');
   }
 
-  void test_tryStatement_return_try_twoCatchesMixed() {
+  test_tryStatement_return_try_twoCatchesMixed() async {
     _assertFalse('''
 try { return 1; }
 on int catch (e, s) {}
@@ -1674,66 +1677,66 @@
 finally {}''');
   }
 
-  void test_tryStatement_return_try_twoCatchesMixed_noFinally() {
+  test_tryStatement_return_try_twoCatchesMixed_noFinally() async {
     _assertFalse('''
 try { return 1; }
 on int catch (e, s) {}
 on String catch (e, s) { return 1; }''');
   }
 
-  void test_variableDeclarationStatement_noInitializer() {
+  test_variableDeclarationStatement_noInitializer() async {
     _assertFalse("int i;");
   }
 
-  void test_variableDeclarationStatement_noThrow() {
+  test_variableDeclarationStatement_noThrow() async {
     _assertFalse("int i = 0;");
   }
 
-  void test_variableDeclarationStatement_throw() {
+  test_variableDeclarationStatement_throw() async {
     _assertTrue("int i = throw new Object();");
   }
 
-  void test_whileStatement_false_nonReturn() {
+  test_whileStatement_false_nonReturn() async {
     _assertFalse("{ while (false) {} }");
   }
 
-  void test_whileStatement_throwCondition() {
+  test_whileStatement_throwCondition() async {
     _assertTrue("{ while (throw '') {} }");
   }
 
-  void test_whileStatement_true_break() {
+  test_whileStatement_true_break() async {
     _assertFalse("{ while (true) { break; } }");
   }
 
-  void test_whileStatement_true_break_and_throw() {
+  test_whileStatement_true_break_and_throw() async {
     _assertFalse("{ while (true) { if (1==1) break; throw 'T'; } }");
   }
 
-  void test_whileStatement_true_continue() {
+  test_whileStatement_true_continue() async {
     _assertTrue("{ while (true) { continue; } }");
   }
 
-  void test_whileStatement_true_continueWithLabel() {
+  test_whileStatement_true_continueWithLabel() async {
     _assertTrue("{ x: while (true) { continue x; } }");
   }
 
-  void test_whileStatement_true_doStatement_scopeRequired() {
+  test_whileStatement_true_doStatement_scopeRequired() async {
     _assertTrue("{ while (true) { x: do { continue x; } while (true); } }");
   }
 
-  void test_whileStatement_true_if_return() {
+  test_whileStatement_true_if_return() async {
     _assertTrue("{ while (true) { if (true) {return null;} } }");
   }
 
-  void test_whileStatement_true_noBreak() {
+  test_whileStatement_true_noBreak() async {
     _assertTrue("{ while (true) {} }");
   }
 
-  void test_whileStatement_true_return() {
+  test_whileStatement_true_return() async {
     _assertTrue("{ while (true) { return null; } }");
   }
 
-  void test_whileStatement_true_throw() {
+  test_whileStatement_true_throw() async {
     _assertTrue("{ while (true) { throw ''; } }");
   }
 
@@ -1759,7 +1762,7 @@
  */
 @reflectiveTest
 class ExitDetectorTest2 extends ResolverTestCase {
-  void test_forStatement_implicitTrue_breakWithLabel() {
+  test_forStatement_implicitTrue_breakWithLabel() async {
     Source source = addSource(r'''
 void f() {
   x: for (;;) {
@@ -1773,7 +1776,7 @@
     _assertNthStatementDoesNotExit(source, 0);
   }
 
-  void test_switch_withEnum_false_noDefault() {
+  test_switch_withEnum_false_noDefault() async {
     Source source = addSource(r'''
 enum E { A, B }
 String f(E e) {
@@ -1790,7 +1793,7 @@
     _assertNthStatementDoesNotExit(source, 1);
   }
 
-  void test_switch_withEnum_false_withDefault() {
+  test_switch_withEnum_false_withDefault() async {
     Source source = addSource(r'''
 enum E { A, B }
 String f(E e) {
@@ -1807,7 +1810,7 @@
     _assertNthStatementDoesNotExit(source, 1);
   }
 
-  void test_switch_withEnum_true_noDefault() {
+  test_switch_withEnum_true_noDefault() async {
     Source source = addSource(r'''
 enum E { A, B }
 String f(E e) {
@@ -1822,7 +1825,7 @@
     _assertNthStatementDoesNotExit(source, 0);
   }
 
-  void test_switch_withEnum_true_withExitingDefault() {
+  test_switch_withEnum_true_withExitingDefault() async {
     Source source = addSource(r'''
 enum E { A, B }
 String f(E e) {
@@ -1837,7 +1840,7 @@
     _assertNthStatementExits(source, 0);
   }
 
-  void test_switch_withEnum_true_withNonExitingDefault() {
+  test_switch_withEnum_true_withNonExitingDefault() async {
     Source source = addSource(r'''
 enum E { A, B }
 String f(E e) {
@@ -1853,7 +1856,7 @@
     _assertNthStatementDoesNotExit(source, 1);
   }
 
-  void test_whileStatement_breakWithLabel() {
+  test_whileStatement_breakWithLabel() async {
     Source source = addSource(r'''
 void f() {
   x: while (true) {
@@ -1867,7 +1870,7 @@
     _assertNthStatementDoesNotExit(source, 0);
   }
 
-  void test_whileStatement_breakWithLabel_afterExiting() {
+  test_whileStatement_breakWithLabel_afterExiting() async {
     Source source = addSource(r'''
 void f() {
   x: while (true) {
@@ -1881,7 +1884,7 @@
     _assertNthStatementExits(source, 0);
   }
 
-  void test_whileStatement_switchWithBreakWithLabel() {
+  test_whileStatement_switchWithBreakWithLabel() async {
     Source source = addSource(r'''
 void f() {
   x: while (true) {
@@ -1895,7 +1898,7 @@
     _assertNthStatementDoesNotExit(source, 0);
   }
 
-  void test_yieldStatement_plain() {
+  test_yieldStatement_plain() async {
     Source source = addSource(r'''
 void f() sync* {
   yield 1;
@@ -1904,7 +1907,7 @@
     _assertNthStatementDoesNotExit(source, 0);
   }
 
-  void test_yieldStatement_star_plain() {
+  test_yieldStatement_star_plain() async {
     Source source = addSource(r'''
 void f() sync* {
   yield* 1;
@@ -1913,7 +1916,7 @@
     _assertNthStatementDoesNotExit(source, 0);
   }
 
-  void test_yieldStatement_star_throw() {
+  test_yieldStatement_star_throw() async {
     Source source = addSource(r'''
 void f() sync* {
   yield* throw '';
@@ -1922,7 +1925,7 @@
     _assertNthStatementExits(source, 0);
   }
 
-  void test_yieldStatement_throw() {
+  test_yieldStatement_throw() async {
     Source source = addSource(r'''
 void f() sync* {
   yield throw '';
@@ -1955,7 +1958,7 @@
 
 @reflectiveTest
 class FileBasedSourceTest {
-  void test_equals_false_differentFiles() {
+  test_equals_false_differentFiles() async {
     JavaFile file1 = FileUtilities2.createFile("/does/not/exist1.dart");
     JavaFile file2 = FileUtilities2.createFile("/does/not/exist2.dart");
     FileBasedSource source1 = new FileBasedSource(file1);
@@ -1963,13 +1966,13 @@
     expect(source1 == source2, isFalse);
   }
 
-  void test_equals_false_null() {
+  test_equals_false_null() async {
     JavaFile file = FileUtilities2.createFile("/does/not/exist1.dart");
     FileBasedSource source1 = new FileBasedSource(file);
     expect(source1 == null, isFalse);
   }
 
-  void test_equals_true() {
+  test_equals_true() async {
     JavaFile file1 = FileUtilities2.createFile("/does/not/exist.dart");
     JavaFile file2 = FileUtilities2.createFile("/does/not/exist.dart");
     FileBasedSource source1 = new FileBasedSource(file1);
@@ -1977,7 +1980,7 @@
     expect(source1 == source2, isTrue);
   }
 
-  void test_fileReadMode() {
+  test_fileReadMode() async {
     expect(FileBasedSource.fileReadMode('a'), 'a');
     expect(FileBasedSource.fileReadMode('a\n'), 'a\n');
     expect(FileBasedSource.fileReadMode('ab'), 'ab');
@@ -1987,7 +1990,7 @@
     expect(FileBasedSource.fileReadMode('a\r\nb'), 'a\r\nb');
   }
 
-  void test_fileReadMode_changed() {
+  test_fileReadMode_changed() async {
     FileBasedSource.fileReadMode = (String s) => s + 'xyz';
     expect(FileBasedSource.fileReadMode('a'), 'axyz');
     expect(FileBasedSource.fileReadMode('a\n'), 'a\nxyz');
@@ -1996,7 +1999,7 @@
     FileBasedSource.fileReadMode = (String s) => s;
   }
 
-  void test_fileReadMode_normalize_eol_always() {
+  test_fileReadMode_normalize_eol_always() async {
     FileBasedSource.fileReadMode =
         PhysicalResourceProvider.NORMALIZE_EOL_ALWAYS;
     expect(FileBasedSource.fileReadMode('a'), 'a');
@@ -2019,7 +2022,7 @@
     FileBasedSource.fileReadMode = (String s) => s;
   }
 
-  void test_getEncoding() {
+  test_getEncoding() async {
     SourceFactory factory = new SourceFactory(
         [new ResourceUriResolver(PhysicalResourceProvider.INSTANCE)]);
     String fullPath = "/does/not/exist.dart";
@@ -2028,20 +2031,20 @@
     expect(factory.fromEncoding(source.encoding), source);
   }
 
-  void test_getFullName() {
+  test_getFullName() async {
     String fullPath = "/does/not/exist.dart";
     JavaFile file = FileUtilities2.createFile(fullPath);
     FileBasedSource source = new FileBasedSource(file);
     expect(source.fullName, file.getAbsolutePath());
   }
 
-  void test_getShortName() {
+  test_getShortName() async {
     JavaFile file = FileUtilities2.createFile("/does/not/exist.dart");
     FileBasedSource source = new FileBasedSource(file);
     expect(source.shortName, "exist.dart");
   }
 
-  void test_hashCode() {
+  test_hashCode() async {
     JavaFile file1 = FileUtilities2.createFile("/does/not/exist.dart");
     JavaFile file2 = FileUtilities2.createFile("/does/not/exist.dart");
     FileBasedSource source1 = new FileBasedSource(file1);
@@ -2049,7 +2052,7 @@
     expect(source2.hashCode, source1.hashCode);
   }
 
-  void test_isInSystemLibrary_contagious() {
+  test_isInSystemLibrary_contagious() async {
     DartSdk sdk = _createSdk();
     UriResolver resolver = new DartUriResolver(sdk);
     SourceFactory factory = new SourceFactory([resolver]);
@@ -2063,7 +2066,7 @@
     expect(partSource.isInSystemLibrary, isTrue);
   }
 
-  void test_isInSystemLibrary_false() {
+  test_isInSystemLibrary_false() async {
     JavaFile file = FileUtilities2.createFile("/does/not/exist.dart");
     FileBasedSource source = new FileBasedSource(file);
     expect(source, isNotNull);
@@ -2071,7 +2074,7 @@
     expect(source.isInSystemLibrary, isFalse);
   }
 
-  void test_issue14500() {
+  test_issue14500() async {
     // see https://code.google.com/p/dart/issues/detail?id=14500
     FileBasedSource source = new FileBasedSource(
         FileUtilities2.createFile("/some/packages/foo:bar.dart"));
@@ -2079,7 +2082,7 @@
     expect(source.exists(), isFalse);
   }
 
-  void test_resolveRelative_file_fileName() {
+  test_resolveRelative_file_fileName() async {
     if (OSUtilities.isWindows()) {
       // On Windows, the URI that is produced includes a drive letter,
       // which I believe is not consistent across all machines that might run
@@ -2094,7 +2097,7 @@
     expect(relative.toString(), "file:///a/b/lib.dart");
   }
 
-  void test_resolveRelative_file_filePath() {
+  test_resolveRelative_file_filePath() async {
     if (OSUtilities.isWindows()) {
       // On Windows, the URI that is produced includes a drive letter,
       // which I believe is not consistent across all machines that might run
@@ -2109,7 +2112,7 @@
     expect(relative.toString(), "file:///a/b/c/lib.dart");
   }
 
-  void test_resolveRelative_file_filePathWithParent() {
+  test_resolveRelative_file_filePathWithParent() async {
     if (OSUtilities.isWindows()) {
       // On Windows, the URI that is produced includes a drive letter, which I
       // believe is not consistent across all machines that might run this test.
@@ -2123,7 +2126,7 @@
     expect(relative.toString(), "file:///a/c/lib.dart");
   }
 
-  void test_system() {
+  test_system() async {
     JavaFile file = FileUtilities2.createFile("/does/not/exist.dart");
     FileBasedSource source = new FileBasedSource(file, Uri.parse("dart:core"));
     expect(source, isNotNull);
@@ -2134,44 +2137,44 @@
 
 @reflectiveTest
 class ResolveRelativeUriTest {
-  void test_resolveRelative_dart_dartUri() {
+  test_resolveRelative_dart_dartUri() async {
     _assertResolve('dart:foo', 'dart:bar', 'dart:bar');
   }
 
-  void test_resolveRelative_dart_fileName() {
+  test_resolveRelative_dart_fileName() async {
     _assertResolve('dart:test', 'lib.dart', 'dart:test/lib.dart');
   }
 
-  void test_resolveRelative_dart_filePath() {
+  test_resolveRelative_dart_filePath() async {
     _assertResolve('dart:test', 'c/lib.dart', 'dart:test/c/lib.dart');
   }
 
-  void test_resolveRelative_dart_filePathWithParent() {
+  test_resolveRelative_dart_filePathWithParent() async {
     _assertResolve(
         'dart:test/b/test.dart', '../c/lib.dart', 'dart:test/c/lib.dart');
   }
 
-  void test_resolveRelative_package_dartUri() {
+  test_resolveRelative_package_dartUri() async {
     _assertResolve('package:foo/bar.dart', 'dart:test', 'dart:test');
   }
 
-  void test_resolveRelative_package_emptyPath() {
+  test_resolveRelative_package_emptyPath() async {
     _assertResolve('package:foo/bar.dart', '', 'package:foo/bar.dart');
   }
 
-  void test_resolveRelative_package_fileName() {
+  test_resolveRelative_package_fileName() async {
     _assertResolve('package:b/test.dart', 'lib.dart', 'package:b/lib.dart');
   }
 
-  void test_resolveRelative_package_fileNameWithoutPackageName() {
+  test_resolveRelative_package_fileNameWithoutPackageName() async {
     _assertResolve('package:test.dart', 'lib.dart', 'package:lib.dart');
   }
 
-  void test_resolveRelative_package_filePath() {
+  test_resolveRelative_package_filePath() async {
     _assertResolve('package:b/test.dart', 'c/lib.dart', 'package:b/c/lib.dart');
   }
 
-  void test_resolveRelative_package_filePathWithParent() {
+  test_resolveRelative_package_filePathWithParent() async {
     _assertResolve(
         'package:a/b/test.dart', '../c/lib.dart', 'package:a/c/lib.dart');
   }
@@ -2188,7 +2191,7 @@
 @deprecated
 @reflectiveTest
 class SDKLibrariesReaderTest extends EngineTestCase {
-  void test_readFrom_dart2js() {
+  test_readFrom_dart2js() async {
     LibraryMap libraryMap = new SdkLibrariesReader(true).readFromFile(
         FileUtilities2.createFile("/libs.dart"),
         r'''
@@ -2213,14 +2216,14 @@
     expect(first.isVmLibrary, true);
   }
 
-  void test_readFrom_empty() {
+  test_readFrom_empty() async {
     LibraryMap libraryMap = new SdkLibrariesReader(false)
         .readFromFile(FileUtilities2.createFile("/libs.dart"), "");
     expect(libraryMap, isNotNull);
     expect(libraryMap.size(), 0);
   }
 
-  void test_readFrom_normal() {
+  test_readFrom_normal() async {
     LibraryMap libraryMap = new SdkLibrariesReader(false).readFromFile(
         FileUtilities2.createFile("/libs.dart"),
         r'''
@@ -2263,14 +2266,14 @@
 
 @reflectiveTest
 class UriKindTest {
-  void test_fromEncoding() {
+  test_fromEncoding() async {
     expect(UriKind.fromEncoding(0x64), same(UriKind.DART_URI));
     expect(UriKind.fromEncoding(0x66), same(UriKind.FILE_URI));
     expect(UriKind.fromEncoding(0x70), same(UriKind.PACKAGE_URI));
     expect(UriKind.fromEncoding(0x58), same(null));
   }
 
-  void test_getEncoding() {
+  test_getEncoding() async {
     expect(UriKind.DART_URI.encoding, 0x64);
     expect(UriKind.FILE_URI.encoding, 0x66);
     expect(UriKind.PACKAGE_URI.encoding, 0x70);
diff --git a/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_test.dart b/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_test.dart
index 7fa42f2..e948278 100644
--- a/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_test.dart
+++ b/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_test.dart
@@ -13,12 +13,13 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CheckedModeCompileTimeErrorCodeTest);
+    defineReflectiveTests(CheckedModeCompileTimeErrorCodeTest_Driver);
   });
 }
 
 @reflectiveTest
 class CheckedModeCompileTimeErrorCodeTest extends ResolverTestCase {
-  void test_fieldFormalParameterAssignableToField_extends() {
+  test_fieldFormalParameterAssignableToField_extends() async {
     // According to checked-mode type checking rules, a value of type B is
     // assignable to a field of type A, because B extends A (and hence is a
     // subtype of A).
@@ -34,12 +35,12 @@
   const C(this.a);
 }
 var v = const C(const B());''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldFormalParameterAssignableToField_fieldType_unresolved_null() {
+  test_fieldFormalParameterAssignableToField_fieldType_unresolved_null() async {
     // Null always passes runtime type checks, even when the type is
     // unresolved.
     Source source = addSource(r'''
@@ -48,12 +49,12 @@
   const A(String this.x);
 }
 var v = const A(null);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]);
     verify([source]);
   }
 
-  void test_fieldFormalParameterAssignableToField_implements() {
+  test_fieldFormalParameterAssignableToField_implements() async {
     // According to checked-mode type checking rules, a value of type B is
     // assignable to a field of type A, because B implements A (and hence is a
     // subtype of A).
@@ -67,36 +68,36 @@
   const C(this.a);
 }
 var v = const C(const B());''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldFormalParameterAssignableToField_list_dynamic() {
+  test_fieldFormalParameterAssignableToField_list_dynamic() async {
     // [1, 2, 3] has type List<dynamic>, which is a subtype of List<int>.
     Source source = addSource(r'''
 class A {
   const A(List<int> x);
 }
 var x = const A(const [1, 2, 3]);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldFormalParameterAssignableToField_list_nonDynamic() {
+  test_fieldFormalParameterAssignableToField_list_nonDynamic() async {
     // <int>[1, 2, 3] has type List<int>, which is a subtype of List<num>.
     Source source = addSource(r'''
 class A {
   const A(List<num> x);
 }
 var x = const A(const <int>[1, 2, 3]);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldFormalParameterAssignableToField_map_dynamic() {
+  test_fieldFormalParameterAssignableToField_map_dynamic() async {
     // {1: 2} has type Map<dynamic, dynamic>, which is a subtype of
     // Map<int, int>.
     Source source = addSource(r'''
@@ -104,12 +105,12 @@
   const A(Map<int, int> x);
 }
 var x = const A(const {1: 2});''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldFormalParameterAssignableToField_map_keyDifferent() {
+  test_fieldFormalParameterAssignableToField_map_keyDifferent() async {
     // <int, int>{1: 2} has type Map<int, int>, which is a subtype of
     // Map<num, int>.
     Source source = addSource(r'''
@@ -117,12 +118,12 @@
   const A(Map<num, int> x);
 }
 var x = const A(const <int, int>{1: 2});''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldFormalParameterAssignableToField_map_valueDifferent() {
+  test_fieldFormalParameterAssignableToField_map_valueDifferent() async {
     // <int, int>{1: 2} has type Map<int, int>, which is a subtype of
     // Map<int, num>.
     Source source = addSource(r'''
@@ -130,12 +131,12 @@
   const A(Map<int, num> x);
 }
 var x = const A(const <int, int>{1: 2});''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldFormalParameterAssignableToField_notype() {
+  test_fieldFormalParameterAssignableToField_notype() async {
     // If a field is declared without a type, then any value may be assigned to
     // it.
     Source source = addSource(r'''
@@ -144,12 +145,12 @@
   const A(this.x);
 }
 var v = const A(5);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldFormalParameterAssignableToField_null() {
+  test_fieldFormalParameterAssignableToField_null() async {
     // Null is assignable to anything.
     Source source = addSource(r'''
 class A {
@@ -157,12 +158,12 @@
   const A(this.x);
 }
 var v = const A(null);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldFormalParameterAssignableToField_typedef() {
+  test_fieldFormalParameterAssignableToField_typedef() async {
     // foo has the runtime type dynamic -> dynamic, so it should be assignable
     // to A.f.
     Source source = addSource(r'''
@@ -173,12 +174,12 @@
 }
 foo(x) => 1;
 var v = const A(foo);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldFormalParameterAssignableToField_typeSubstitution() {
+  test_fieldFormalParameterAssignableToField_typeSubstitution() async {
     // foo has the runtime type dynamic -> dynamic, so it should be assignable
     // to A.f.
     Source source = addSource(r'''
@@ -187,19 +188,19 @@
   const A(this.x);
 }
 var v = const A<int>(3);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldFormalParameterNotAssignableToField() {
+  test_fieldFormalParameterNotAssignableToField() async {
     Source source = addSource(r'''
 class A {
   final int x;
   const A(this.x);
 }
 var v = const A('foo');''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
       StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
@@ -207,7 +208,7 @@
     verify([source]);
   }
 
-  void test_fieldFormalParameterNotAssignableToField_extends() {
+  test_fieldFormalParameterNotAssignableToField_extends() async {
     // According to checked-mode type checking rules, a value of type A is not
     // assignable to a field of type B, because B extends A (the subtyping
     // relationship is in the wrong direction).
@@ -223,21 +224,21 @@
   const C(this.b);
 }
 var v = const C(const A());''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
     ]);
     verify([source]);
   }
 
-  void test_fieldFormalParameterNotAssignableToField_fieldType() {
+  test_fieldFormalParameterNotAssignableToField_fieldType() async {
     Source source = addSource(r'''
 class A {
   final int x;
   const A(String this.x);
 }
 var v = const A('foo');''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
       StaticWarningCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE
@@ -245,14 +246,14 @@
     verify([source]);
   }
 
-  void test_fieldFormalParameterNotAssignableToField_fieldType_unresolved() {
+  test_fieldFormalParameterNotAssignableToField_fieldType_unresolved() async {
     Source source = addSource(r'''
 class A {
   final Unresolved x;
   const A(String this.x);
 }
 var v = const A('foo');''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
       StaticWarningCode.UNDEFINED_CLASS
@@ -260,7 +261,7 @@
     verify([source]);
   }
 
-  void test_fieldFormalParameterNotAssignableToField_implements() {
+  test_fieldFormalParameterNotAssignableToField_implements() async {
     // According to checked-mode type checking rules, a value of type A is not
     // assignable to a field of type B, because B implements A (the subtyping
     // relationship is in the wrong direction).
@@ -274,28 +275,28 @@
   const C(this.b);
 }
 var v = const C(const A());''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
     ]);
     verify([source]);
   }
 
-  void test_fieldFormalParameterNotAssignableToField_list() {
+  test_fieldFormalParameterNotAssignableToField_list() async {
     // <num>[1, 2, 3] has type List<num>, which is not a subtype of List<int>.
     Source source = addSource(r'''
 class A {
   const A(List<int> x);
 }
 var x = const A(const <num>[1, 2, 3]);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
     ]);
     verify([source]);
   }
 
-  void test_fieldFormalParameterNotAssignableToField_map_keyMismatch() {
+  test_fieldFormalParameterNotAssignableToField_map_keyMismatch() async {
     // <num, int>{1: 2} has type Map<num, int>, which is not a subtype of
     // Map<int, int>.
     Source source = addSource(r'''
@@ -303,14 +304,14 @@
   const A(Map<int, int> x);
 }
 var x = const A(const <num, int>{1: 2});''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
     ]);
     verify([source]);
   }
 
-  void test_fieldFormalParameterNotAssignableToField_map_valueMismatch() {
+  test_fieldFormalParameterNotAssignableToField_map_valueMismatch() async {
     // <int, num>{1: 2} has type Map<int, num>, which is not a subtype of
     // Map<int, int>.
     Source source = addSource(r'''
@@ -318,21 +319,21 @@
   const A(Map<int, int> x);
 }
 var x = const A(const <int, num>{1: 2});''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
     ]);
     verify([source]);
   }
 
-  void test_fieldFormalParameterNotAssignableToField_optional() {
+  test_fieldFormalParameterNotAssignableToField_optional() async {
     Source source = addSource(r'''
 class A {
   final int x;
   const A([this.x = 'foo']);
 }
 var v = const A();''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
       StaticTypeWarningCode.INVALID_ASSIGNMENT
@@ -340,7 +341,7 @@
     verify([source]);
   }
 
-  void test_fieldFormalParameterNotAssignableToField_typedef() {
+  test_fieldFormalParameterNotAssignableToField_typedef() async {
     // foo has the runtime type String -> int, so it should not be assignable
     // to A.f (A.f requires it to be int -> String).
     Source source = addSource(r'''
@@ -351,7 +352,7 @@
 }
 int foo(String x) => 1;
 var v = const A(foo);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
       StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
@@ -359,13 +360,13 @@
     verify([source]);
   }
 
-  void test_fieldInitializerNotAssignable() {
+  test_fieldInitializerNotAssignable() async {
     Source source = addSource(r'''
 class A {
   final int x;
   const A() : x = '';
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE,
       StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE
@@ -373,21 +374,21 @@
     verify([source]);
   }
 
-  void test_fieldTypeMismatch() {
+  test_fieldTypeMismatch() async {
     Source source = addSource(r'''
 class A {
   const A(x) : y = x;
   final int y;
 }
 var v = const A('foo');''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH
     ]);
     verify([source]);
   }
 
-  void test_fieldTypeMismatch_generic() {
+  test_fieldTypeMismatch_generic() async {
     Source source = addSource(r'''
 class C<T> {
   final T x = y;
@@ -396,7 +397,7 @@
 const int y = 1;
 var v = const C<String>();
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH,
       StaticTypeWarningCode.INVALID_ASSIGNMENT
@@ -404,14 +405,14 @@
     verify([source]);
   }
 
-  void test_fieldTypeMismatch_unresolved() {
+  test_fieldTypeMismatch_unresolved() async {
     Source source = addSource(r'''
 class A {
   const A(x) : y = x;
   final Unresolved y;
 }
 var v = const A('foo');''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH,
       StaticWarningCode.UNDEFINED_CLASS
@@ -419,7 +420,7 @@
     verify([source]);
   }
 
-  void test_fieldTypeOk_generic() {
+  test_fieldTypeOk_generic() async {
     Source source = addSource(r'''
 class C<T> {
   final T x = y;
@@ -428,24 +429,24 @@
 const int y = 1;
 var v = const C<int>();
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
     verify([source]);
   }
 
-  void test_fieldTypeOk_null() {
+  test_fieldTypeOk_null() async {
     Source source = addSource(r'''
 class A {
   const A(x) : y = x;
   final int y;
 }
 var v = const A(null);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldTypeOk_unresolved_null() {
+  test_fieldTypeOk_unresolved_null() async {
     // Null always passes runtime type checks, even when the type is
     // unresolved.
     Source source = addSource(r'''
@@ -454,14 +455,14 @@
   final Unresolved y;
 }
 var v = const A(null);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]);
     verify([source]);
   }
 
-  void test_listElementTypeNotAssignable() {
+  test_listElementTypeNotAssignable() async {
     Source source = addSource("var v = const <String> [42];");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,
       StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
@@ -469,9 +470,9 @@
     verify([source]);
   }
 
-  void test_mapKeyTypeNotAssignable() {
+  test_mapKeyTypeNotAssignable() async {
     Source source = addSource("var v = const <String, int > {1 : 2};");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE,
       StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE
@@ -479,9 +480,9 @@
     verify([source]);
   }
 
-  void test_mapValueTypeNotAssignable() {
+  test_mapValueTypeNotAssignable() async {
     Source source = addSource("var v = const <String, String> {'a' : 2};");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE,
       StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE
@@ -489,30 +490,30 @@
     verify([source]);
   }
 
-  void test_parameterAssignable_null() {
+  test_parameterAssignable_null() async {
     // Null is assignable to anything.
     Source source = addSource(r'''
 class A {
   const A(int x);
 }
 var v = const A(null);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_parameterAssignable_typeSubstitution() {
+  test_parameterAssignable_typeSubstitution() async {
     Source source = addSource(r'''
 class A<T> {
   const A(T x);
 }
 var v = const A<int>(3);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_parameterAssignable_undefined_null() {
+  test_parameterAssignable_undefined_null() async {
     // Null always passes runtime type checks, even when the type is
     // unresolved.
     Source source = addSource(r'''
@@ -520,18 +521,18 @@
   const A(Unresolved x);
 }
 var v = const A(null);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]);
     verify([source]);
   }
 
-  void test_parameterNotAssignable() {
+  test_parameterNotAssignable() async {
     Source source = addSource(r'''
 class A {
   const A(int x);
 }
 var v = const A('foo');''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
       StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
@@ -539,13 +540,13 @@
     verify([source]);
   }
 
-  void test_parameterNotAssignable_typeSubstitution() {
+  test_parameterNotAssignable_typeSubstitution() async {
     Source source = addSource(r'''
 class A<T> {
   const A(T x);
 }
 var v = const A<int>('foo');''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
       StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
@@ -553,13 +554,13 @@
     verify([source]);
   }
 
-  void test_parameterNotAssignable_undefined() {
+  test_parameterNotAssignable_undefined() async {
     Source source = addSource(r'''
 class A {
   const A(Unresolved x);
 }
 var v = const A('foo');''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
       StaticWarningCode.UNDEFINED_CLASS
@@ -567,39 +568,39 @@
     verify([source]);
   }
 
-  void test_redirectingConstructor_paramTypeMismatch() {
+  test_redirectingConstructor_paramTypeMismatch() async {
     Source source = addSource(r'''
 class A {
   const A.a1(x) : this.a2(x);
   const A.a2(String x);
 }
 var v = const A.a1(0);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
     ]);
     verify([source]);
   }
 
-  void test_topLevelVarAssignable_null() {
+  test_topLevelVarAssignable_null() async {
     Source source = addSource("const int x = null;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_topLevelVarAssignable_undefined_null() {
+  test_topLevelVarAssignable_undefined_null() async {
     // Null always passes runtime type checks, even when the type is
     // unresolved.
     Source source = addSource("const Unresolved x = null;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]);
     verify([source]);
   }
 
-  void test_topLevelVarNotAssignable() {
+  test_topLevelVarNotAssignable() async {
     Source source = addSource("const int x = 'foo';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.VARIABLE_TYPE_MISMATCH,
       StaticTypeWarningCode.INVALID_ASSIGNMENT
@@ -607,9 +608,9 @@
     verify([source]);
   }
 
-  void test_topLevelVarNotAssignable_undefined() {
+  test_topLevelVarNotAssignable_undefined() async {
     Source source = addSource("const Unresolved x = 'foo';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CheckedModeCompileTimeErrorCode.VARIABLE_TYPE_MISMATCH,
       StaticWarningCode.UNDEFINED_CLASS
@@ -617,3 +618,10 @@
     verify([source]);
   }
 }
+
+@reflectiveTest
+class CheckedModeCompileTimeErrorCodeTest_Driver
+    extends CheckedModeCompileTimeErrorCodeTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_driver_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_driver_test.dart
new file mode 100644
index 0000000..96200ce
--- /dev/null
+++ b/pkg/analyzer/test/generated/compile_time_error_code_driver_test.dart
@@ -0,0 +1,104 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'compile_time_error_code_test.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(CompileTimeErrorCodeTest_Driver);
+  });
+}
+
+@reflectiveTest
+class CompileTimeErrorCodeTest_Driver extends CompileTimeErrorCodeTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+
+  @failingTest
+  @override
+  test_exportOfNonLibrary() {
+    return super.test_exportOfNonLibrary();
+  }
+
+  @failingTest
+  @override
+  test_fieldInitializerOutsideConstructor_inFunctionTypeParameter() {
+    return super
+        .test_fieldInitializerOutsideConstructor_inFunctionTypeParameter();
+  }
+
+  @failingTest
+  @override
+  test_fromEnvironment_bool_badDefault_whenDefined() {
+    return super.test_fromEnvironment_bool_badDefault_whenDefined();
+  }
+
+  @failingTest
+  @override
+  test_importOfNonLibrary() {
+    return super.test_importOfNonLibrary();
+  }
+
+  @failingTest
+  @override
+  test_nonConstValueInInitializer_assert_condition() {
+    return super.test_nonConstValueInInitializer_assert_condition();
+  }
+
+  @failingTest
+  @override
+  test_nonConstValueInInitializer_assert_message() {
+    return super.test_nonConstValueInInitializer_assert_message();
+  }
+
+  @failingTest
+  @override
+  test_prefixCollidesWithTopLevelMembers_functionTypeAlias() {
+    return super.test_prefixCollidesWithTopLevelMembers_functionTypeAlias();
+  }
+
+  @failingTest
+  @override
+  test_prefixCollidesWithTopLevelMembers_topLevelFunction() {
+    return super.test_prefixCollidesWithTopLevelMembers_topLevelFunction();
+  }
+
+  @failingTest
+  @override
+  test_prefixCollidesWithTopLevelMembers_topLevelVariable() {
+    return super.test_prefixCollidesWithTopLevelMembers_topLevelVariable();
+  }
+
+  @failingTest
+  @override
+  test_prefixCollidesWithTopLevelMembers_type() {
+    return super.test_prefixCollidesWithTopLevelMembers_type();
+  }
+
+  @failingTest
+  @override
+  test_typeAliasCannotReferenceItself_typeVariableBounds() {
+    return super.test_typeAliasCannotReferenceItself_typeVariableBounds();
+  }
+
+  @failingTest
+  @override
+  test_uriDoesNotExist_import_appears_after_deleting_target() {
+    return super.test_uriDoesNotExist_import_appears_after_deleting_target();
+  }
+
+  @failingTest
+  @override
+  test_uriDoesNotExist_import_disappears_when_fixed() {
+    return super.test_uriDoesNotExist_import_disappears_when_fixed();
+  }
+
+  @failingTest
+  @override
+  test_uriWithInterpolation_nonConstant() {
+    return super.test_uriWithInterpolation_nonConstant();
+  }
+}
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
index 098ff94..b3e4254 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
@@ -4,6 +4,8 @@
 
 library analyzer.test.generated.compile_time_error_code_test;
 
+import 'dart:async';
+
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/engine.dart';
@@ -22,7 +24,7 @@
 
 @reflectiveTest
 class CompileTimeErrorCodeTest extends ResolverTestCase {
-  void fail_awaitInWrongContext_sync() {
+  fail_awaitInWrongContext_sync() async {
     // This test requires better error recovery than we currently have. In
     // particular, we need to be able to distinguish between an await expression
     // in the wrong context, and the use of 'await' as an identifier.
@@ -30,12 +32,12 @@
 f(x) {
   return await x;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT]);
     verify([source]);
   }
 
-  void fail_awaitInWrongContext_syncStar() {
+  fail_awaitInWrongContext_syncStar() async {
     // This test requires better error recovery than we currently have. In
     // particular, we need to be able to distinguish between an await expression
     // in the wrong context, and the use of 'await' as an identifier.
@@ -43,24 +45,24 @@
 f(x) sync* {
   yield await x;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT]);
     verify([source]);
   }
 
-  void fail_constEvalThrowsException() {
+  fail_constEvalThrowsException() async {
     Source source = addSource(r'''
 class C {
   const C();
 }
 f() { return const C(); }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION]);
     verify([source]);
   }
 
-  void fail_invalidIdentifierInAsync_async() {
+  fail_invalidIdentifierInAsync_async() async {
     // TODO(brianwilkerson) Report this error.
     Source source = addSource(r'''
 class A {
@@ -68,12 +70,12 @@
     int async;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_IDENTIFIER_IN_ASYNC]);
     verify([source]);
   }
 
-  void fail_invalidIdentifierInAsync_await() {
+  fail_invalidIdentifierInAsync_await() async {
     // TODO(brianwilkerson) Report this error.
     Source source = addSource(r'''
 class A {
@@ -81,12 +83,12 @@
     int await;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_IDENTIFIER_IN_ASYNC]);
     verify([source]);
   }
 
-  void fail_invalidIdentifierInAsync_yield() {
+  fail_invalidIdentifierInAsync_yield() async {
     // TODO(brianwilkerson) Report this error.
     Source source = addSource(r'''
 class A {
@@ -94,109 +96,109 @@
     int yield;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_IDENTIFIER_IN_ASYNC]);
     verify([source]);
   }
 
-  void fail_mixinDeclaresConstructor() {
+  fail_mixinDeclaresConstructor() async {
     Source source = addSource(r'''
 class A {
   A() {}
 }
 class B extends Object mixin A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void fail_mixinOfNonClass() {
+  fail_mixinOfNonClass() async {
     // TODO(brianwilkerson) Compare with MIXIN_WITH_NON_CLASS_SUPERCLASS.
     Source source = addSource(r'''
 var A;
 class B extends Object mixin A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_NON_CLASS]);
     verify([source]);
   }
 
-  void fail_objectCannotExtendAnotherClass() {
+  fail_objectCannotExtendAnotherClass() async {
     Source source = addSource(r'''
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.OBJECT_CANNOT_EXTEND_ANOTHER_CLASS]);
     verify([source]);
   }
 
-  void fail_superInitializerInObject() {
+  fail_superInitializerInObject() async {
     Source source = addSource(r'''
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.SUPER_INITIALIZER_IN_OBJECT]);
     verify([source]);
   }
 
-  void fail_yieldEachInNonGenerator_async() {
+  fail_yieldEachInNonGenerator_async() async {
     // TODO(brianwilkerson) We are currently parsing the yield statement as a
     // binary expression.
     Source source = addSource(r'''
 f() async {
   yield* 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.YIELD_EACH_IN_NON_GENERATOR]);
     verify([source]);
   }
 
-  void fail_yieldEachInNonGenerator_sync() {
+  fail_yieldEachInNonGenerator_sync() async {
     // TODO(brianwilkerson) We are currently parsing the yield statement as a
     // binary expression.
     Source source = addSource(r'''
 f() {
   yield* 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.YIELD_IN_NON_GENERATOR]);
     verify([source]);
   }
 
-  void fail_yieldInNonGenerator_async() {
+  fail_yieldInNonGenerator_async() async {
     // TODO(brianwilkerson) We are currently trying to parse the yield statement
     // as a binary expression.
     Source source = addSource(r'''
 f() async {
   yield 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.YIELD_IN_NON_GENERATOR]);
     verify([source]);
   }
 
-  void fail_yieldInNonGenerator_sync() {
+  fail_yieldInNonGenerator_sync() async {
     // TODO(brianwilkerson) We are currently trying to parse the yield statement
     // as a binary expression.
     Source source = addSource(r'''
 f() {
   yield 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.YIELD_EACH_IN_NON_GENERATOR]);
     verify([source]);
   }
 
-  void test_accessPrivateEnumField() {
+  test_accessPrivateEnumField() async {
     Source source = addSource(r'''
 enum E { ONE }
 String name(E e) {
   return e._name;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.ACCESS_PRIVATE_ENUM_FIELD]);
     // Cannot verify because "_name" cannot be resolved.
   }
 
-  void test_ambiguousExport() {
+  test_ambiguousExport() async {
     Source source = addSource(r'''
 library L;
 export 'lib1.dart';
@@ -211,12 +213,12 @@
         r'''
 library lib2;
 class N {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.AMBIGUOUS_EXPORT]);
     verify([source]);
   }
 
-  void test_annotationWithNotClass() {
+  test_annotationWithNotClass() async {
     Source source = addSource('''
 class Property {
   final int value;
@@ -229,12 +231,12 @@
 main() {
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.ANNOTATION_WITH_NON_CLASS]);
     verify([source]);
   }
 
-  void test_annotationWithNotClass_prefixed() {
+  test_annotationWithNotClass_prefixed() async {
     addNamedSource(
         "/annotations.dart",
         r'''
@@ -251,12 +253,12 @@
 main() {
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.ANNOTATION_WITH_NON_CLASS]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_annotation() {
+  test_async_used_as_identifier_in_annotation() async {
     Source source = addSource('''
 const int async = 0;
 f() async {
@@ -264,12 +266,12 @@
   g(0);
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_argument_label() {
+  test_async_used_as_identifier_in_argument_label() async {
     Source source = addSource('''
 @proxy
 class C {}
@@ -277,35 +279,35 @@
   new C().g(async: 0);
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     // Note: we don't call verify([source]) because verify() doesn't understand
     // about @proxy.
   }
 
-  void test_async_used_as_identifier_in_async_method() {
+  test_async_used_as_identifier_in_async_method() async {
     Source source = addSource('''
 f() async {
   var async = 1;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_async_star_method() {
+  test_async_used_as_identifier_in_async_star_method() async {
     Source source = addSource('''
 f() async* {
   var async = 1;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_break_statement() {
+  test_async_used_as_identifier_in_break_statement() async {
     Source source = addSource('''
 f() async {
   while (true) {
@@ -313,7 +315,7 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER,
       CompileTimeErrorCode.LABEL_UNDEFINED
@@ -322,7 +324,7 @@
     // "async" label is unresolved.
   }
 
-  void test_async_used_as_identifier_in_cascaded_invocation() {
+  test_async_used_as_identifier_in_cascaded_invocation() async {
     Source source = addSource('''
 class C {
   int async() => 1;
@@ -331,12 +333,12 @@
   return new C()..async();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_cascaded_setter_invocation() {
+  test_async_used_as_identifier_in_cascaded_setter_invocation() async {
     Source source = addSource('''
 class C {
   void set async(int i) {}
@@ -345,12 +347,12 @@
   return new C()..async = 1;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_catch_exception_argument() {
+  test_async_used_as_identifier_in_catch_exception_argument() async {
     Source source = addSource('''
 g() {}
 f() async {
@@ -359,12 +361,12 @@
   } catch (async) { }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_catch_stacktrace_argument() {
+  test_async_used_as_identifier_in_catch_stacktrace_argument() async {
     Source source = addSource('''
 g() {}
 f() async {
@@ -373,12 +375,12 @@
   } catch (e, async) { }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_continue_statement() {
+  test_async_used_as_identifier_in_continue_statement() async {
     Source source = addSource('''
 f() async {
   while (true) {
@@ -386,7 +388,7 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER,
       CompileTimeErrorCode.LABEL_UNDEFINED
@@ -395,31 +397,31 @@
     // "async" label is unresolved.
   }
 
-  void test_async_used_as_identifier_in_for_statement() {
+  test_async_used_as_identifier_in_for_statement() async {
     Source source = addSource('''
 var async;
 f() async {
   for (async in []) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_formal_parameter_name() {
+  test_async_used_as_identifier_in_formal_parameter_name() async {
     Source source = addSource('''
 f() async {
   g(int async) {}
   g(0);
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_getter_name() {
+  test_async_used_as_identifier_in_getter_name() async {
     Source source = addSource('''
 class C {
   int get async => 1;
@@ -428,12 +430,12 @@
   return new C().async;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_invocation() {
+  test_async_used_as_identifier_in_invocation() async {
     Source source = addSource('''
 class C {
   int async() => 1;
@@ -442,35 +444,35 @@
   return new C().async();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_local_function_name() {
+  test_async_used_as_identifier_in_local_function_name() async {
     Source source = addSource('''
 f() async {
   int async() => null;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_prefix() {
+  test_async_used_as_identifier_in_prefix() async {
     Source source = addSource('''
 import 'dart:async' as async;
 f() async {
   return new async.Future.value(0);
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_setter_name() {
+  test_async_used_as_identifier_in_setter_name() async {
     Source source = addSource('''
 class C {
   void set async(int i) {}
@@ -479,36 +481,36 @@
   new C().async = 1;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_statement_label() {
+  test_async_used_as_identifier_in_statement_label() async {
     Source source = addSource('''
 f() async {
   async: g();
 }
 g() {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_string_interpolation() {
+  test_async_used_as_identifier_in_string_interpolation() async {
     Source source = addSource(r'''
 int async = 1;
 f() async {
   return "$async";
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_suffix() {
+  test_async_used_as_identifier_in_suffix() async {
     addNamedSource(
         "/lib1.dart",
         r'''
@@ -521,12 +523,12 @@
   return l.async;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_switch_label() {
+  test_async_used_as_identifier_in_switch_label() async {
     Source source = addSource('''
 f() async {
   switch (0) {
@@ -534,67 +536,67 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_async_used_as_identifier_in_sync_star_method() {
+  test_async_used_as_identifier_in_sync_star_method() async {
     Source source = addSource('''
 f() sync* {
   var async = 1;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_asyncForInWrongContext() {
+  test_asyncForInWrongContext() async {
     Source source = addSource(r'''
 f(list) {
   await for (var e in list) {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.ASYNC_FOR_IN_WRONG_CONTEXT]);
     verify([source]);
   }
 
-  void test_await_used_as_identifier_in_async_method() {
+  test_await_used_as_identifier_in_async_method() async {
     Source source = addSource('''
 f() async {
   var await = 1;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_await_used_as_identifier_in_async_star_method() {
+  test_await_used_as_identifier_in_async_star_method() async {
     Source source = addSource('''
 f() async* {
   var await = 1;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_await_used_as_identifier_in_sync_star_method() {
+  test_await_used_as_identifier_in_sync_star_method() async {
     Source source = addSource('''
 f() sync* {
   var await = 1;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_bug_23176() {
+  test_bug_23176() async {
     Source source = addSource('''
 class A {
   const A([x]);
@@ -603,7 +605,7 @@
   dynamic @A(const A()) x;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       ParserErrorCode.EXPECTED_CLASS_MEMBER,
       ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE
@@ -611,72 +613,72 @@
     verify([source]);
   }
 
-  void test_builtInIdentifierAsMixinName_classTypeAlias() {
+  test_builtInIdentifierAsMixinName_classTypeAlias() async {
     Source source = addSource(r'''
 class A {}
 class B {}
 class as = A with B;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME]);
     verify([source]);
   }
 
-  void test_builtInIdentifierAsType_formalParameter_field() {
+  test_builtInIdentifierAsType_formalParameter_field() async {
     Source source = addSource(r'''
 class A {
   var x;
   A(static this.x);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE]);
     verify([source]);
   }
 
-  void test_builtInIdentifierAsType_formalParameter_simple() {
+  test_builtInIdentifierAsType_formalParameter_simple() async {
     Source source = addSource(r'''
 f(static x) {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE]);
     verify([source]);
   }
 
-  void test_builtInIdentifierAsType_variableDeclaration() {
+  test_builtInIdentifierAsType_variableDeclaration() async {
     Source source = addSource(r'''
 f() {
   typedef x;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE]);
     verify([source]);
   }
 
-  void test_builtInIdentifierAsTypedefName_functionTypeAlias() {
+  test_builtInIdentifierAsTypedefName_functionTypeAlias() async {
     Source source = addSource("typedef bool as();");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME]);
     verify([source]);
   }
 
-  void test_builtInIdentifierAsTypeName() {
+  test_builtInIdentifierAsTypeName() async {
     Source source = addSource("class as {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME]);
     verify([source]);
   }
 
-  void test_builtInIdentifierAsTypeParameterName() {
+  test_builtInIdentifierAsTypeParameterName() async {
     Source source = addSource("class A<as> {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME]);
     verify([source]);
   }
 
-  void test_caseExpressionTypeImplementsEquals() {
+  test_caseExpressionTypeImplementsEquals() async {
     Source source = addSource(r'''
 class IntWrapper {
   final int value;
@@ -693,37 +695,37 @@
     default: return 0;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS]);
     verify([source]);
   }
 
-  void test_conflictingConstructorNameAndMember_field() {
+  test_conflictingConstructorNameAndMember_field() async {
     Source source = addSource(r'''
 class A {
   int x;
   A.x() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_FIELD]);
     verify([source]);
   }
 
-  void test_conflictingConstructorNameAndMember_method() {
+  test_conflictingConstructorNameAndMember_method() async {
     Source source = addSource(r'''
 class A {
   const A.x();
   void x() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD]);
     verify([source]);
   }
 
-  void test_conflictingGetterAndMethod_field_method() {
+  test_conflictingGetterAndMethod_field_method() async {
     Source source = addSource(r'''
 class A {
   final int m = 0;
@@ -731,12 +733,12 @@
 class B extends A {
   m() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD]);
     verify([source]);
   }
 
-  void test_conflictingGetterAndMethod_getter_method() {
+  test_conflictingGetterAndMethod_getter_method() async {
     Source source = addSource(r'''
 class A {
   get m => 0;
@@ -744,12 +746,12 @@
 class B extends A {
   m() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD]);
     verify([source]);
   }
 
-  void test_conflictingGetterAndMethod_method_field() {
+  test_conflictingGetterAndMethod_method_field() async {
     Source source = addSource(r'''
 class A {
   m() {}
@@ -757,12 +759,12 @@
 class B extends A {
   int m;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONFLICTING_METHOD_AND_GETTER]);
     verify([source]);
   }
 
-  void test_conflictingGetterAndMethod_method_getter() {
+  test_conflictingGetterAndMethod_method_getter() async {
     Source source = addSource(r'''
 class A {
   m() {}
@@ -770,77 +772,77 @@
 class B extends A {
   get m => 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONFLICTING_METHOD_AND_GETTER]);
     verify([source]);
   }
 
-  void test_conflictingTypeVariableAndClass() {
+  test_conflictingTypeVariableAndClass() async {
     Source source = addSource(r'''
 class T<T> {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_CLASS]);
     verify([source]);
   }
 
-  void test_conflictingTypeVariableAndMember_field() {
+  test_conflictingTypeVariableAndMember_field() async {
     Source source = addSource(r'''
 class A<T> {
   var T;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER]);
     verify([source]);
   }
 
-  void test_conflictingTypeVariableAndMember_getter() {
+  test_conflictingTypeVariableAndMember_getter() async {
     Source source = addSource(r'''
 class A<T> {
   get T => null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER]);
     verify([source]);
   }
 
-  void test_conflictingTypeVariableAndMember_method() {
+  test_conflictingTypeVariableAndMember_method() async {
     Source source = addSource(r'''
 class A<T> {
   T() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER]);
     verify([source]);
   }
 
-  void test_conflictingTypeVariableAndMember_method_static() {
+  test_conflictingTypeVariableAndMember_method_static() async {
     Source source = addSource(r'''
 class A<T> {
   static T() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER]);
     verify([source]);
   }
 
-  void test_conflictingTypeVariableAndMember_setter() {
+  test_conflictingTypeVariableAndMember_setter() async {
     Source source = addSource(r'''
 class A<T> {
   set T(x) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER]);
     verify([source]);
   }
 
-  void test_consistentCaseExpressionTypes_dynamic() {
+  test_consistentCaseExpressionTypes_dynamic() async {
     // Even though A.S and S have a static type of "dynamic", we should see
     // that they match 'abc', because they are constant strings.
     Source source = addSource(r'''
@@ -860,12 +862,12 @@
       break;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constConstructorWithFieldInitializedByNonConst() {
+  test_constConstructorWithFieldInitializedByNonConst() async {
     Source source = addSource(r'''
 class A {
   final int i = f();
@@ -874,9 +876,9 @@
 int f() {
   return 3;
 }''');
-    computeLibrarySourceErrors(source);
     // TODO(paulberry): the error CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE is
     // redundant and ought to be suppressed.
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode
           .CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST,
@@ -885,7 +887,7 @@
     verify([source]);
   }
 
-  void test_constConstructorWithFieldInitializedByNonConst_static() {
+  test_constConstructorWithFieldInitializedByNonConst_static() async {
     Source source = addSource(r'''
 class A {
   static final int i = f();
@@ -894,24 +896,24 @@
 int f() {
   return 3;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constConstructorWithMixin() {
+  test_constConstructorWithMixin() async {
     Source source = addSource(r'''
 class M {
 }
 class A extends Object with M {
   const A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN]);
     verify([source]);
   }
 
-  void test_constConstructorWithNonConstSuper_explicit() {
+  test_constConstructorWithNonConstSuper_explicit() async {
     Source source = addSource(r'''
 class A {
   A();
@@ -919,13 +921,13 @@
 class B extends A {
   const B(): super();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER]);
     verify([source]);
   }
 
-  void test_constConstructorWithNonConstSuper_implicit() {
+  test_constConstructorWithNonConstSuper_implicit() async {
     Source source = addSource(r'''
 class A {
   A();
@@ -933,13 +935,13 @@
 class B extends A {
   const B();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER]);
     verify([source]);
   }
 
-  void test_constConstructorWithNonFinalField_mixin() {
+  test_constConstructorWithNonFinalField_mixin() async {
     Source source = addSource(r'''
 class A {
   var a;
@@ -947,7 +949,7 @@
 class B extends Object with A {
   const B();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN,
       CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD
@@ -955,7 +957,7 @@
     verify([source]);
   }
 
-  void test_constConstructorWithNonFinalField_super() {
+  test_constConstructorWithNonFinalField_super() async {
     Source source = addSource(r'''
 class A {
   var a;
@@ -963,7 +965,7 @@
 class B extends A {
   const B();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD,
       CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER
@@ -971,20 +973,20 @@
     verify([source]);
   }
 
-  void test_constConstructorWithNonFinalField_this() {
+  test_constConstructorWithNonFinalField_this() async {
     Source source = addSource(r'''
 class A {
   int x;
   const A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD]);
     verify([source]);
   }
 
-  void test_constDeferredClass() {
-    resolveWithErrors(<String>[
+  test_constDeferredClass() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {
@@ -1001,8 +1003,8 @@
     ]);
   }
 
-  void test_constDeferredClass_namedConstructor() {
-    resolveWithErrors(<String>[
+  test_constDeferredClass_namedConstructor() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {
@@ -1019,19 +1021,19 @@
     ]);
   }
 
-  void test_constEval_newInstance_constConstructor() {
+  test_constEval_newInstance_constConstructor() async {
     Source source = addSource(r'''
 class A {
   const A();
 }
 const a = new A();''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
     verify([source]);
   }
 
-  void test_constEval_newInstance_externalFactoryConstConstructor() {
+  test_constEval_newInstance_externalFactoryConstConstructor() async {
     // We can't evaluate "const A()" because its constructor is external.  But
     // the code is correct--we shouldn't report an error.
     Source source = addSource(r'''
@@ -1039,12 +1041,12 @@
   external factory const A();
 }
 const x = const A();''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constEval_nonStaticField_inGenericClass() {
+  test_constEval_nonStaticField_inGenericClass() async {
     Source source = addSource('''
 class C<T> {
   const C();
@@ -1052,13 +1054,13 @@
 }
 
 const x = const C().t;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
     verify([source]);
   }
 
-  void test_constEval_propertyExtraction_targetNotConst() {
+  test_constEval_propertyExtraction_targetNotConst() async {
     Source source = addSource(r'''
 class A {
   const A();
@@ -1066,30 +1068,30 @@
 }
 final a = const A();
 const C = a.m;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
     verify([source]);
   }
 
-  void test_constEvalThrowsException_binaryMinus_null() {
-    _check_constEvalThrowsException_binary_null("null - 5", false);
-    _check_constEvalThrowsException_binary_null("5 - null", true);
+  test_constEvalThrowsException_binaryMinus_null() async {
+    await _check_constEvalThrowsException_binary_null("null - 5", false);
+    await _check_constEvalThrowsException_binary_null("5 - null", true);
   }
 
-  void test_constEvalThrowsException_binaryPlus_null() {
-    _check_constEvalThrowsException_binary_null("null + 5", false);
-    _check_constEvalThrowsException_binary_null("5 + null", true);
+  test_constEvalThrowsException_binaryPlus_null() async {
+    await _check_constEvalThrowsException_binary_null("null + 5", false);
+    await _check_constEvalThrowsException_binary_null("5 + null", true);
   }
 
-  void test_constEvalThrowsException_divisionByZero() {
+  test_constEvalThrowsException_divisionByZero() async {
     Source source = addSource("const C = 1 ~/ 0;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONST_EVAL_THROWS_IDBZE]);
     verify([source]);
   }
 
-  void test_constEvalThrowsException_finalAlreadySet_initializer() {
+  test_constEvalThrowsException_finalAlreadySet_initializer() async {
     // If a final variable has an initializer at the site of its declaration,
     // and at the site of the constructor, then invoking that constructor would
     // produce a runtime error; hence invoking that constructor via the "const"
@@ -1101,7 +1103,7 @@
 }
 var x = const C();
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
       StaticWarningCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
@@ -1109,7 +1111,7 @@
     verify([source]);
   }
 
-  void test_constEvalThrowsException_finalAlreadySet_initializing_formal() {
+  test_constEvalThrowsException_finalAlreadySet_initializing_formal() async {
     // If a final variable has an initializer at the site of its declaration,
     // and it is initialized using an initializing formal at the site of the
     // constructor, then invoking that constructor would produce a runtime
@@ -1122,7 +1124,7 @@
 }
 var x = const C(2);
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
       StaticWarningCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR
@@ -1130,35 +1132,35 @@
     verify([source]);
   }
 
-  void test_constEvalThrowsException_unaryBitNot_null() {
+  test_constEvalThrowsException_unaryBitNot_null() async {
     Source source = addSource("const C = ~null;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION]);
     // no verify(), '~null' is not resolved
   }
 
-  void test_constEvalThrowsException_unaryNegated_null() {
+  test_constEvalThrowsException_unaryNegated_null() async {
     Source source = addSource("const C = -null;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION]);
     // no verify(), '-null' is not resolved
   }
 
-  void test_constEvalThrowsException_unaryNot_null() {
+  test_constEvalThrowsException_unaryNot_null() async {
     Source source = addSource("const C = !null;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION]);
     verify([source]);
   }
 
-  void test_constEvalTypeBool_binary() {
-    _check_constEvalTypeBool_withParameter_binary("p && ''");
-    _check_constEvalTypeBool_withParameter_binary("p || ''");
+  test_constEvalTypeBool_binary() async {
+    await _check_constEvalTypeBool_withParameter_binary("p && ''");
+    await _check_constEvalTypeBool_withParameter_binary("p || ''");
   }
 
-  void test_constEvalTypeBool_binary_leftTrue() {
+  test_constEvalTypeBool_binary_leftTrue() async {
     Source source = addSource("const C = (true || 0);");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
       StaticTypeWarningCode.NON_BOOL_OPERAND,
@@ -1167,7 +1169,7 @@
     verify([source]);
   }
 
-  void test_constEvalTypeBoolNumString_equal() {
+  test_constEvalTypeBoolNumString_equal() async {
     Source source = addSource(r'''
 class A {
   const A();
@@ -1176,13 +1178,13 @@
   final a;
   const B(num p) : a = p == const A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_NUM_STRING]);
     verify([source]);
   }
 
-  void test_constEvalTypeBoolNumString_notEqual() {
+  test_constEvalTypeBoolNumString_notEqual() async {
     Source source = addSource(r'''
 class A {
   const A();
@@ -1191,63 +1193,63 @@
   final a;
   const B(String p) : a = p != const A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_NUM_STRING]);
     verify([source]);
   }
 
-  void test_constEvalTypeInt_binary() {
-    _check_constEvalTypeInt_withParameter_binary("p ^ ''");
-    _check_constEvalTypeInt_withParameter_binary("p & ''");
-    _check_constEvalTypeInt_withParameter_binary("p | ''");
-    _check_constEvalTypeInt_withParameter_binary("p >> ''");
-    _check_constEvalTypeInt_withParameter_binary("p << ''");
+  test_constEvalTypeInt_binary() async {
+    await _check_constEvalTypeInt_withParameter_binary("p ^ ''");
+    await _check_constEvalTypeInt_withParameter_binary("p & ''");
+    await _check_constEvalTypeInt_withParameter_binary("p | ''");
+    await _check_constEvalTypeInt_withParameter_binary("p >> ''");
+    await _check_constEvalTypeInt_withParameter_binary("p << ''");
   }
 
-  void test_constEvalTypeNum_binary() {
-    _check_constEvalTypeNum_withParameter_binary("p + ''");
-    _check_constEvalTypeNum_withParameter_binary("p - ''");
-    _check_constEvalTypeNum_withParameter_binary("p * ''");
-    _check_constEvalTypeNum_withParameter_binary("p / ''");
-    _check_constEvalTypeNum_withParameter_binary("p ~/ ''");
-    _check_constEvalTypeNum_withParameter_binary("p > ''");
-    _check_constEvalTypeNum_withParameter_binary("p < ''");
-    _check_constEvalTypeNum_withParameter_binary("p >= ''");
-    _check_constEvalTypeNum_withParameter_binary("p <= ''");
-    _check_constEvalTypeNum_withParameter_binary("p % ''");
+  test_constEvalTypeNum_binary() async {
+    await _check_constEvalTypeNum_withParameter_binary("p + ''");
+    await _check_constEvalTypeNum_withParameter_binary("p - ''");
+    await _check_constEvalTypeNum_withParameter_binary("p * ''");
+    await _check_constEvalTypeNum_withParameter_binary("p / ''");
+    await _check_constEvalTypeNum_withParameter_binary("p ~/ ''");
+    await _check_constEvalTypeNum_withParameter_binary("p > ''");
+    await _check_constEvalTypeNum_withParameter_binary("p < ''");
+    await _check_constEvalTypeNum_withParameter_binary("p >= ''");
+    await _check_constEvalTypeNum_withParameter_binary("p <= ''");
+    await _check_constEvalTypeNum_withParameter_binary("p % ''");
   }
 
-  void test_constFormalParameter_fieldFormalParameter() {
+  test_constFormalParameter_fieldFormalParameter() async {
     Source source = addSource(r'''
 class A {
   var x;
   A(const this.x) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONST_FORMAL_PARAMETER]);
     verify([source]);
   }
 
-  void test_constFormalParameter_simpleFormalParameter() {
+  test_constFormalParameter_simpleFormalParameter() async {
     Source source = addSource("f(const x) {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONST_FORMAL_PARAMETER]);
     verify([source]);
   }
 
-  void test_constInitializedWithNonConstValue() {
+  test_constInitializedWithNonConstValue() async {
     Source source = addSource(r'''
 f(p) {
   const C = p;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
     verify([source]);
   }
 
-  void test_constInitializedWithNonConstValue_finalField() {
+  test_constInitializedWithNonConstValue_finalField() async {
     // Regression test for bug #25526 which previously
     // caused two errors to be reported.
     Source source = addSource(r'''
@@ -1256,29 +1258,29 @@
   foo([int x = field]) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE]);
     verify([source]);
   }
 
-  void test_constInitializedWithNonConstValue_missingConstInListLiteral() {
+  test_constInitializedWithNonConstValue_missingConstInListLiteral() async {
     Source source = addSource("const List L = [0];");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
     verify([source]);
   }
 
-  void test_constInitializedWithNonConstValue_missingConstInMapLiteral() {
+  test_constInitializedWithNonConstValue_missingConstInMapLiteral() async {
     Source source = addSource("const Map M = {'a' : 0};");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
     verify([source]);
   }
 
-  void test_constInitializedWithNonConstValueFromDeferredClass() {
-    resolveWithErrors(<String>[
+  test_constInitializedWithNonConstValueFromDeferredClass() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 const V = 1;''',
@@ -1292,8 +1294,8 @@
     ]);
   }
 
-  void test_constInitializedWithNonConstValueFromDeferredClass_nested() {
-    resolveWithErrors(<String>[
+  test_constInitializedWithNonConstValueFromDeferredClass_nested() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 const V = 1;''',
@@ -1307,17 +1309,17 @@
     ]);
   }
 
-  void test_constInstanceField() {
+  test_constInstanceField() async {
     Source source = addSource(r'''
 class C {
   const int f = 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONST_INSTANCE_FIELD]);
     verify([source]);
   }
 
-  void test_constMapKeyTypeImplementsEquals_direct() {
+  test_constMapKeyTypeImplementsEquals_direct() async {
     Source source = addSource(r'''
 class A {
   const A();
@@ -1326,13 +1328,13 @@
 main() {
   const {const A() : 0};
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS]);
     verify([source]);
   }
 
-  void test_constMapKeyTypeImplementsEquals_dynamic() {
+  test_constMapKeyTypeImplementsEquals_dynamic() async {
     // Note: static type of B.a is "dynamic", but actual type of the const
     // object is A.  We need to make sure we examine the actual type when
     // deciding whether there is a problem with operator==.
@@ -1347,13 +1349,13 @@
 main() {
   const {B.a : 0};
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS]);
     verify([source]);
   }
 
-  void test_constMapKeyTypeImplementsEquals_factory() {
+  test_constMapKeyTypeImplementsEquals_factory() async {
     Source source = addSource(r'''
 class A { const factory A() = B; }
 
@@ -1366,13 +1368,13 @@
 main() {
   var m = const { const A(): 42 };
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS]);
     verify([source]);
   }
 
-  void test_constMapKeyTypeImplementsEquals_super() {
+  test_constMapKeyTypeImplementsEquals_super() async {
     Source source = addSource(r'''
 class A {
   const A();
@@ -1384,25 +1386,25 @@
 main() {
   const {const B() : 0};
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS]);
     verify([source]);
   }
 
-  void test_constWithInvalidTypeParameters() {
+  test_constWithInvalidTypeParameters() async {
     Source source = addSource(r'''
 class A {
   const A();
 }
 f() { return const A<A>(); }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONST_WITH_INVALID_TYPE_PARAMETERS]);
     verify([source]);
   }
 
-  void test_constWithInvalidTypeParameters_tooFew() {
+  test_constWithInvalidTypeParameters_tooFew() async {
     Source source = addSource(r'''
 class A {}
 class C<K, V> {
@@ -1411,13 +1413,13 @@
 f(p) {
   return const C<A>();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONST_WITH_INVALID_TYPE_PARAMETERS]);
     verify([source]);
   }
 
-  void test_constWithInvalidTypeParameters_tooMany() {
+  test_constWithInvalidTypeParameters_tooMany() async {
     Source source = addSource(r'''
 class A {}
 class C<E> {
@@ -1426,24 +1428,24 @@
 f(p) {
   return const C<A, A>();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONST_WITH_INVALID_TYPE_PARAMETERS]);
     verify([source]);
   }
 
-  void test_constWithNonConst() {
+  test_constWithNonConst() async {
     Source source = addSource(r'''
 class T {
   T(a, b, {c, d}) {}
 }
 f() { return const T(0, 1, c: 2, d: 3); }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONST_WITH_NON_CONST]);
     verify([source]);
   }
 
-  void test_constWithNonConst_with() {
+  test_constWithNonConst_with() async {
     Source source = addSource(r'''
 class B {
   const B();
@@ -1455,12 +1457,12 @@
   print(x);
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONST_WITH_NON_CONST]);
     verify([source]);
   }
 
-  void test_constWithNonConstantArgument_annotation() {
+  test_constWithNonConstantArgument_annotation() async {
     Source source = addSource(r'''
 class A {
   const A(int p);
@@ -1469,21 +1471,21 @@
 @A(v)
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT]);
     verify([source]);
   }
 
-  void test_constWithNonConstantArgument_instanceCreation() {
+  test_constWithNonConstantArgument_instanceCreation() async {
     Source source = addSource(r'''
 class A {
   const A(a);
 }
 f(p) { return const A(p); }''');
-    computeLibrarySourceErrors(source);
     // TODO(paulberry): the error INVALID_CONSTAT is redundant and ought to be
     // suppressed.
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT,
       CompileTimeErrorCode.INVALID_CONSTANT
@@ -1491,18 +1493,18 @@
     verify([source]);
   }
 
-  void test_constWithNonType() {
+  test_constWithNonType() async {
     Source source = addSource(r'''
 int A;
 f() {
   return const A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONST_WITH_NON_TYPE]);
     verify([source]);
   }
 
-  void test_constWithNonType_fromLibrary() {
+  test_constWithNonType_fromLibrary() async {
     Source source1 = addNamedSource("/lib.dart", "");
     Source source2 = addNamedSource(
         "/lib2.dart",
@@ -1511,19 +1513,19 @@
 void f() {
   const lib.A();
 }''');
-    computeLibrarySourceErrors(source1);
-    computeLibrarySourceErrors(source2);
+    await computeAnalysisResult(source1);
+    await computeAnalysisResult(source2);
     assertErrors(source2, [CompileTimeErrorCode.CONST_WITH_NON_TYPE]);
     verify([source1]);
   }
 
-  void test_constWithTypeParameters_direct() {
+  test_constWithTypeParameters_direct() async {
     Source source = addSource(r'''
 class A<T> {
   static const V = const A<T>();
   const A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS,
       StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC
@@ -1531,13 +1533,13 @@
     verify([source]);
   }
 
-  void test_constWithTypeParameters_indirect() {
+  test_constWithTypeParameters_indirect() async {
     Source source = addSource(r'''
 class A<T> {
   static const V = const A<List<T>>();
   const A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS,
       StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC
@@ -1545,7 +1547,7 @@
     verify([source]);
   }
 
-  void test_constWithUndefinedConstructor() {
+  test_constWithUndefinedConstructor() async {
     Source source = addSource(r'''
 class A {
   const A();
@@ -1553,13 +1555,13 @@
 f() {
   return const A.noSuchConstructor();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR]);
     // no verify(), 'noSuchConstructor' is not resolved
   }
 
-  void test_constWithUndefinedConstructorDefault() {
+  test_constWithUndefinedConstructorDefault() async {
     Source source = addSource(r'''
 class A {
   const A.name();
@@ -1567,37 +1569,37 @@
 f() {
   return const A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT]);
     verify([source]);
   }
 
-  void test_defaultValueInFunctionTypeAlias() {
+  test_defaultValueInFunctionTypeAlias() async {
     Source source = addSource("typedef F([x = 0]);");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE_ALIAS]);
     verify([source]);
   }
 
-  void test_defaultValueInFunctionTypedParameter_named() {
+  test_defaultValueInFunctionTypedParameter_named() async {
     Source source = addSource("f(g({p: null})) {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER]);
     verify([source]);
   }
 
-  void test_defaultValueInFunctionTypedParameter_optional() {
+  test_defaultValueInFunctionTypedParameter_optional() async {
     Source source = addSource("f(g([p = null])) {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER]);
     verify([source]);
   }
 
-  void test_defaultValueInRedirectingFactoryConstructor() {
+  test_defaultValueInRedirectingFactoryConstructor() async {
     Source source = addSource(r'''
 class A {
   factory A([int x = 0]) = B;
@@ -1606,20 +1608,20 @@
 class B implements A {
   B([int x = 1]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR
     ]);
     verify([source]);
   }
 
-  void test_duplicateConstructorName_named() {
+  test_duplicateConstructorName_named() async {
     Source source = addSource(r'''
 class A {
   A.a() {}
   A.a() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME,
       CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME
@@ -1627,13 +1629,13 @@
     verify([source]);
   }
 
-  void test_duplicateConstructorName_unnamed() {
+  test_duplicateConstructorName_unnamed() async {
     Source source = addSource(r'''
 class A {
   A() {}
   A() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT,
       CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT
@@ -1641,7 +1643,7 @@
     verify([source]);
   }
 
-  void test_duplicateDefinition_acrossLibraries() {
+  test_duplicateDefinition_acrossLibraries() async {
     Source librarySource = addNamedSource(
         "/lib.dart",
         r'''
@@ -1661,56 +1663,58 @@
 part of lib;
 
 class A {}''');
-    computeLibrarySourceErrors(librarySource);
-    assertErrors(sourceB, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
+    await computeAnalysisResult(librarySource);
+    await computeAnalysisResult(sourceA);
+    await computeAnalysisResult(sourceB);
     assertNoErrors(librarySource);
+    assertErrors(sourceB, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
     verify([librarySource, sourceA, sourceB]);
   }
 
-  void test_duplicateDefinition_catch() {
+  test_duplicateDefinition_catch() async {
     Source source = addSource(r'''
 main() {
   try {} catch (e, e) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
     verify([source]);
   }
 
-  void test_duplicateDefinition_classMembers_fields() {
+  test_duplicateDefinition_classMembers_fields() async {
     Source source = addSource(r'''
 class A {
   int a;
   int a;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
     verify([source]);
   }
 
-  void test_duplicateDefinition_classMembers_fields_oneStatic() {
+  test_duplicateDefinition_classMembers_fields_oneStatic() async {
     Source source = addSource(r'''
 class A {
   int x;
   static int x;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
     verify([source]);
   }
 
-  void test_duplicateDefinition_classMembers_methods() {
+  test_duplicateDefinition_classMembers_methods() async {
     Source source = addSource(r'''
 class A {
   m() {}
   m() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
     verify([source]);
   }
 
-  void test_duplicateDefinition_inPart() {
+  test_duplicateDefinition_inPart() async {
     Source librarySource = addNamedSource(
         "/lib.dart",
         r'''
@@ -1722,13 +1726,14 @@
         r'''
 part of test;
 class A {}''');
-    computeLibrarySourceErrors(librarySource);
-    assertErrors(sourceA, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
+    await computeAnalysisResult(librarySource);
+    await computeAnalysisResult(sourceA);
     assertNoErrors(librarySource);
+    assertErrors(sourceA, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
     verify([librarySource, sourceA]);
   }
 
-  void test_duplicateDefinition_locals_inCase() {
+  test_duplicateDefinition_locals_inCase() async {
     Source source = addSource(r'''
 main() {
   switch(1) {
@@ -1737,23 +1742,23 @@
       var a;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
     verify([source]);
   }
 
-  void test_duplicateDefinition_locals_inFunctionBlock() {
+  test_duplicateDefinition_locals_inFunctionBlock() async {
     Source source = addSource(r'''
 main() {
   int m = 0;
   m(a) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
     verify([source]);
   }
 
-  void test_duplicateDefinition_locals_inIf() {
+  test_duplicateDefinition_locals_inIf() async {
     Source source = addSource(r'''
 main(int p) {
   if (p != 0) {
@@ -1761,12 +1766,12 @@
     var a;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
     verify([source]);
   }
 
-  void test_duplicateDefinition_locals_inMethodBlock() {
+  test_duplicateDefinition_locals_inMethodBlock() async {
     Source source = addSource(r'''
 class A {
   m() {
@@ -1774,72 +1779,72 @@
     int a;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
     verify([source]);
   }
 
-  void test_duplicateDefinition_parameters_inConstructor() {
+  test_duplicateDefinition_parameters_inConstructor() async {
     Source source = addSource(r'''
 class A {
   int a;
   A(int a, this.a);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
     verify([source]);
   }
 
-  void test_duplicateDefinition_parameters_inFunctionTypeAlias() {
+  test_duplicateDefinition_parameters_inFunctionTypeAlias() async {
     Source source = addSource(r'''
 typedef F(int a, double a);
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
     verify([source]);
   }
 
-  void test_duplicateDefinition_parameters_inLocalFunction() {
+  test_duplicateDefinition_parameters_inLocalFunction() async {
     Source source = addSource(r'''
 main() {
   f(int a, double a) {
   };
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
     verify([source]);
   }
 
-  void test_duplicateDefinition_parameters_inMethod() {
+  test_duplicateDefinition_parameters_inMethod() async {
     Source source = addSource(r'''
 class A {
   m(int a, double a) {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
     verify([source]);
   }
 
-  void test_duplicateDefinition_parameters_inTopLevelFunction() {
+  test_duplicateDefinition_parameters_inTopLevelFunction() async {
     Source source = addSource(r'''
 f(int a, double a) {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
     verify([source]);
   }
 
-  void test_duplicateDefinition_typeParameters() {
+  test_duplicateDefinition_typeParameters() async {
     Source source = addSource(r'''
 class A<T, T> {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
     verify([source]);
   }
 
-  void test_duplicateDefinitionInheritance_instanceGetter_staticGetter() {
+  test_duplicateDefinitionInheritance_instanceGetter_staticGetter() async {
     Source source = addSource(r'''
 class A {
   int get x => 0;
@@ -1847,14 +1852,13 @@
 class B extends A {
   static int get x => 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
     verify([source]);
   }
 
-  void
-      test_duplicateDefinitionInheritance_instanceGetterAbstract_staticGetter() {
+  test_duplicateDefinitionInheritance_instanceGetterAbstract_staticGetter() async {
     Source source = addSource(r'''
 abstract class A {
   int get x;
@@ -1862,13 +1866,13 @@
 class B extends A {
   static int get x => 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
     verify([source]);
   }
 
-  void test_duplicateDefinitionInheritance_instanceMethod_staticMethod() {
+  test_duplicateDefinitionInheritance_instanceMethod_staticMethod() async {
     Source source = addSource(r'''
 class A {
   x() {}
@@ -1876,14 +1880,13 @@
 class B extends A {
   static x() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
     verify([source]);
   }
 
-  void
-      test_duplicateDefinitionInheritance_instanceMethodAbstract_staticMethod() {
+  test_duplicateDefinitionInheritance_instanceMethodAbstract_staticMethod() async {
     Source source = addSource(r'''
 abstract class A {
   x();
@@ -1891,13 +1894,13 @@
 abstract class B extends A {
   static x() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
     verify([source]);
   }
 
-  void test_duplicateDefinitionInheritance_instanceSetter_staticSetter() {
+  test_duplicateDefinitionInheritance_instanceSetter_staticSetter() async {
     Source source = addSource(r'''
 class A {
   set x(value) {}
@@ -1905,14 +1908,13 @@
 class B extends A {
   static set x(value) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
     verify([source]);
   }
 
-  void
-      test_duplicateDefinitionInheritance_instanceSetterAbstract_staticSetter() {
+  test_duplicateDefinitionInheritance_instanceSetterAbstract_staticSetter() async {
     Source source = addSource(r'''
 abstract class A {
   set x(value);
@@ -1920,66 +1922,66 @@
 class B extends A {
   static set x(value) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
     verify([source]);
   }
 
-  void test_duplicateNamedArgument() {
+  test_duplicateNamedArgument() async {
     Source source = addSource(r'''
 f({a, b}) {}
 main() {
   f(a: 1, a: 2);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.DUPLICATE_NAMED_ARGUMENT]);
     verify([source]);
   }
 
-  void test_duplicatePart_sameSource() {
+  test_duplicatePart_sameSource() async {
     addNamedSource('/part.dart', 'part of lib;');
     Source source = addSource(r'''
 library lib;
 part 'part.dart';
 part 'foo/../part.dart';
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.DUPLICATE_PART]);
     verify([source]);
   }
 
-  void test_duplicatePart_sameUri() {
+  test_duplicatePart_sameUri() async {
     addNamedSource('/part.dart', 'part of lib;');
     Source source = addSource(r'''
 library lib;
 part 'part.dart';
 part 'part.dart';
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.DUPLICATE_PART]);
     verify([source]);
   }
 
-  void test_exportInternalLibrary() {
+  test_exportInternalLibrary() async {
     Source source = addSource("export 'dart:_interceptors';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.EXPORT_INTERNAL_LIBRARY]);
     verify([source]);
   }
 
-  void test_exportOfNonLibrary() {
+  test_exportOfNonLibrary() async {
     Source source = addSource(r'''
 library L;
 export 'lib1.dart';''');
     addNamedSource("/lib1.dart", "part of lib;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY]);
     verify([source]);
   }
 
-  void test_extendsDeferredClass() {
-    resolveWithErrors(<String>[
+  test_extendsDeferredClass() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -1992,8 +1994,8 @@
     ]);
   }
 
-  void test_extendsDeferredClass_classTypeAlias() {
-    resolveWithErrors(<String>[
+  test_extendsDeferredClass_classTypeAlias() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -2007,9 +2009,9 @@
     ]);
   }
 
-  void test_extendsDisallowedClass_class_bool() {
+  test_extendsDisallowedClass_class_bool() async {
     Source source = addSource("class A extends bool {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
       CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
@@ -2017,16 +2019,16 @@
     verify([source]);
   }
 
-  void test_extendsDisallowedClass_class_double() {
+  test_extendsDisallowedClass_class_double() async {
     Source source = addSource("class A extends double {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_extendsDisallowedClass_class_int() {
+  test_extendsDisallowedClass_class_int() async {
     Source source = addSource("class A extends int {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
       CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
@@ -2034,9 +2036,9 @@
     verify([source]);
   }
 
-  void test_extendsDisallowedClass_class_Null() {
+  test_extendsDisallowedClass_class_Null() async {
     Source source = addSource("class A extends Null {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
       CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
@@ -2044,16 +2046,16 @@
     verify([source]);
   }
 
-  void test_extendsDisallowedClass_class_num() {
+  test_extendsDisallowedClass_class_num() async {
     Source source = addSource("class A extends num {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_extendsDisallowedClass_class_String() {
+  test_extendsDisallowedClass_class_String() async {
     Source source = addSource("class A extends String {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
       CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
@@ -2061,86 +2063,86 @@
     verify([source]);
   }
 
-  void test_extendsDisallowedClass_classTypeAlias_bool() {
+  test_extendsDisallowedClass_classTypeAlias_bool() async {
     Source source = addSource(r'''
 class M {}
 class C = bool with M;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_extendsDisallowedClass_classTypeAlias_double() {
+  test_extendsDisallowedClass_classTypeAlias_double() async {
     Source source = addSource(r'''
 class M {}
 class C = double with M;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_extendsDisallowedClass_classTypeAlias_int() {
+  test_extendsDisallowedClass_classTypeAlias_int() async {
     Source source = addSource(r'''
 class M {}
 class C = int with M;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_extendsDisallowedClass_classTypeAlias_Null() {
+  test_extendsDisallowedClass_classTypeAlias_Null() async {
     Source source = addSource(r'''
 class M {}
 class C = Null with M;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_extendsDisallowedClass_classTypeAlias_num() {
+  test_extendsDisallowedClass_classTypeAlias_num() async {
     Source source = addSource(r'''
 class M {}
 class C = num with M;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_extendsDisallowedClass_classTypeAlias_String() {
+  test_extendsDisallowedClass_classTypeAlias_String() async {
     Source source = addSource(r'''
 class M {}
 class C = String with M;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_extendsEnum() {
+  test_extendsEnum() async {
     Source source = addSource(r'''
 enum E { ONE }
 class A extends E {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.EXTENDS_ENUM]);
     verify([source]);
   }
 
-  void test_extendsNonClass_class() {
+  test_extendsNonClass_class() async {
     Source source = addSource(r'''
 int A;
 class B extends A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.EXTENDS_NON_CLASS]);
     verify([source]);
   }
 
-  void test_extendsNonClass_dynamic() {
+  test_extendsNonClass_dynamic() async {
     Source source = addSource("class B extends dynamic {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.EXTENDS_NON_CLASS]);
     verify([source]);
   }
 
-  void test_extraPositionalArguments_const() {
+  test_extraPositionalArguments_const() async {
     Source source = addSource(r'''
 class A {
   const A();
@@ -2148,12 +2150,12 @@
 main() {
   const A(0);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS]);
     verify([source]);
   }
 
-  void test_extraPositionalArguments_const_super() {
+  test_extraPositionalArguments_const_super() async {
     Source source = addSource(r'''
 class A {
   const A();
@@ -2161,42 +2163,42 @@
 class B extends A {
   const B() : super(0);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS]);
     verify([source]);
   }
 
-  void test_fieldFormalParameter_assignedInInitializer() {
+  test_fieldFormalParameter_assignedInInitializer() async {
     Source source = addSource(r'''
 class A {
   int x;
   A(this.x) : x = 3 {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER]);
     verify([source]);
   }
 
-  void test_fieldInitializedByMultipleInitializers() {
+  test_fieldInitializedByMultipleInitializers() async {
     Source source = addSource(r'''
 class A {
   int x;
   A() : x = 0, x = 1 {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS]);
     verify([source]);
   }
 
-  void test_fieldInitializedByMultipleInitializers_multipleInits() {
+  test_fieldInitializedByMultipleInitializers_multipleInits() async {
     Source source = addSource(r'''
 class A {
   int x;
   A() : x = 0, x = 1, x = 2 {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS,
       CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS
@@ -2204,14 +2206,14 @@
     verify([source]);
   }
 
-  void test_fieldInitializedByMultipleInitializers_multipleNames() {
+  test_fieldInitializedByMultipleInitializers_multipleNames() async {
     Source source = addSource(r'''
 class A {
   int x;
   int y;
   A() : x = 0, x = 1, y = 0, y = 1 {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS,
       CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS
@@ -2219,38 +2221,38 @@
     verify([source]);
   }
 
-  void test_fieldInitializedInParameterAndInitializer() {
+  test_fieldInitializedInParameterAndInitializer() async {
     Source source = addSource(r'''
 class A {
   int x;
   A(this.x) : x = 1 {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER]);
     verify([source]);
   }
 
-  void test_fieldInitializerFactoryConstructor() {
+  test_fieldInitializerFactoryConstructor() async {
     Source source = addSource(r'''
 class A {
   int x;
   factory A(this.x) => null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.FIELD_INITIALIZER_FACTORY_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_fieldInitializerOutsideConstructor() {
+  test_fieldInitializerOutsideConstructor() async {
     // TODO(brianwilkerson) Fix the duplicate error messages.
     Source source = addSource(r'''
 class A {
   int x;
   m(this.x) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR,
       CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR
@@ -2258,76 +2260,76 @@
     verify([source]);
   }
 
-  void test_fieldInitializerOutsideConstructor_defaultParameter() {
+  test_fieldInitializerOutsideConstructor_defaultParameter() async {
     Source source = addSource(r'''
 class A {
   int x;
   m([this.x]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_fieldInitializerOutsideConstructor_inFunctionTypeParameter() {
+  test_fieldInitializerOutsideConstructor_inFunctionTypeParameter() async {
     Source source = addSource(r'''
 class A {
   int x;
   A(int p(this.x));
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_fieldInitializerRedirectingConstructor_afterRedirection() {
+  test_fieldInitializerRedirectingConstructor_afterRedirection() async {
     Source source = addSource(r'''
 class A {
   int x;
   A.named() {}
   A() : this.named(), x = 42;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_fieldInitializerRedirectingConstructor_beforeRedirection() {
+  test_fieldInitializerRedirectingConstructor_beforeRedirection() async {
     Source source = addSource(r'''
 class A {
   int x;
   A.named() {}
   A() : x = 42, this.named();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_fieldInitializingFormalRedirectingConstructor() {
+  test_fieldInitializingFormalRedirectingConstructor() async {
     Source source = addSource(r'''
 class A {
   int x;
   A.named() {}
   A(this.x) : this.named();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_finalInitializedMultipleTimes_initializers() {
+  test_finalInitializedMultipleTimes_initializers() async {
     Source source = addSource(r'''
 class A {
   final x;
   A() : x = 0, x = 0 {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS]);
     verify([source]);
@@ -2341,26 +2343,26 @@
    * Note: FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER covers a subset of
    * FINAL_INITIALIZED_MULTIPLE_TIMES, since it more specific, we use it instead of the broader code
    */
-  void test_finalInitializedMultipleTimes_initializingFormal_initializer() {
+  test_finalInitializedMultipleTimes_initializingFormal_initializer() async {
     Source source = addSource(r'''
 class A {
   final x;
   A(this.x) : x = 0 {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER]);
     verify([source]);
   }
 
-  void test_finalInitializedMultipleTimes_initializingFormals() {
+  test_finalInitializedMultipleTimes_initializingFormals() async {
     Source source = addSource(r'''
 class A {
   final x;
   A(this.x, this.x) {}
 }''');
-    computeLibrarySourceErrors(source);
     // TODO(brianwilkerson) There should only be one error here.
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.DUPLICATE_DEFINITION,
       CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES
@@ -2368,38 +2370,38 @@
     verify([source]);
   }
 
-  void test_finalNotInitialized_instanceField_const_static() {
+  test_finalNotInitialized_instanceField_const_static() async {
     Source source = addSource(r'''
 class A {
   static const F;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONST_NOT_INITIALIZED]);
     verify([source]);
   }
 
-  void test_finalNotInitialized_library_const() {
+  test_finalNotInitialized_library_const() async {
     Source source = addSource("const F;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONST_NOT_INITIALIZED]);
     verify([source]);
   }
 
-  void test_finalNotInitialized_local_const() {
+  test_finalNotInitialized_local_const() async {
     Source source = addSource(r'''
 f() {
   const int x;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONST_NOT_INITIALIZED]);
     verify([source]);
   }
 
-  void test_fromEnvironment_bool_badArgs() {
+  test_fromEnvironment_bool_badArgs() async {
     Source source = addSource(r'''
 var b1 = const bool.fromEnvironment(1);
 var b2 = const bool.fromEnvironment('x', defaultValue: 1);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
       StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
@@ -2409,13 +2411,13 @@
     verify([source]);
   }
 
-  void test_fromEnvironment_bool_badDefault_whenDefined() {
+  test_fromEnvironment_bool_badDefault_whenDefined() async {
     // The type of the defaultValue needs to be correct even when the default
     // value isn't used (because the variable is defined in the environment).
     analysisContext2.declaredVariables.define("x", "true");
     Source source =
         addSource("var b = const bool.fromEnvironment('x', defaultValue: 1);");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
       StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
@@ -2423,20 +2425,20 @@
     verify([source]);
   }
 
-  void test_getterAndMethodWithSameName() {
+  test_getterAndMethodWithSameName() async {
     Source source = addSource(r'''
 class A {
   x(y) {}
   get x => 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.GETTER_AND_METHOD_WITH_SAME_NAME]);
     verify([source]);
   }
 
-  void test_implementsDeferredClass() {
-    resolveWithErrors(<String>[
+  test_implementsDeferredClass() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -2449,8 +2451,8 @@
     ]);
   }
 
-  void test_implementsDeferredClass_classTypeAlias() {
-    resolveWithErrors(<String>[
+  test_implementsDeferredClass_classTypeAlias() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -2465,51 +2467,51 @@
     ]);
   }
 
-  void test_implementsDisallowedClass_class_bool() {
+  test_implementsDisallowedClass_class_bool() async {
     Source source = addSource("class A implements bool {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_implementsDisallowedClass_class_double() {
+  test_implementsDisallowedClass_class_double() async {
     Source source = addSource("class A implements double {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_implementsDisallowedClass_class_int() {
+  test_implementsDisallowedClass_class_int() async {
     Source source = addSource("class A implements int {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_implementsDisallowedClass_class_Null() {
+  test_implementsDisallowedClass_class_Null() async {
     Source source = addSource("class A implements Null {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_implementsDisallowedClass_class_num() {
+  test_implementsDisallowedClass_class_num() async {
     Source source = addSource("class A implements num {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_implementsDisallowedClass_class_String() {
+  test_implementsDisallowedClass_class_String() async {
     Source source = addSource("class A implements String {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_implementsDisallowedClass_class_String_num() {
+  test_implementsDisallowedClass_class_String_num() async {
     Source source = addSource("class A implements String, num {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
       CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
@@ -2517,72 +2519,72 @@
     verify([source]);
   }
 
-  void test_implementsDisallowedClass_classTypeAlias_bool() {
+  test_implementsDisallowedClass_classTypeAlias_bool() async {
     Source source = addSource(r'''
 class A {}
 class M {}
 class C = A with M implements bool;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_implementsDisallowedClass_classTypeAlias_double() {
+  test_implementsDisallowedClass_classTypeAlias_double() async {
     Source source = addSource(r'''
 class A {}
 class M {}
 class C = A with M implements double;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_implementsDisallowedClass_classTypeAlias_int() {
+  test_implementsDisallowedClass_classTypeAlias_int() async {
     Source source = addSource(r'''
 class A {}
 class M {}
 class C = A with M implements int;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_implementsDisallowedClass_classTypeAlias_Null() {
+  test_implementsDisallowedClass_classTypeAlias_Null() async {
     Source source = addSource(r'''
 class A {}
 class M {}
 class C = A with M implements Null;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_implementsDisallowedClass_classTypeAlias_num() {
+  test_implementsDisallowedClass_classTypeAlias_num() async {
     Source source = addSource(r'''
 class A {}
 class M {}
 class C = A with M implements num;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_implementsDisallowedClass_classTypeAlias_String() {
+  test_implementsDisallowedClass_classTypeAlias_String() async {
     Source source = addSource(r'''
 class A {}
 class M {}
 class C = A with M implements String;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_implementsDisallowedClass_classTypeAlias_String_num() {
+  test_implementsDisallowedClass_classTypeAlias_String_num() async {
     Source source = addSource(r'''
 class A {}
 class M {}
 class C = A with M implements String, num;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
       CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
@@ -2590,56 +2592,56 @@
     verify([source]);
   }
 
-  void test_implementsDynamic() {
+  test_implementsDynamic() async {
     Source source = addSource("class A implements dynamic {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DYNAMIC]);
     verify([source]);
   }
 
-  void test_implementsEnum() {
+  test_implementsEnum() async {
     Source source = addSource(r'''
 enum E { ONE }
 class A implements E {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_ENUM]);
     verify([source]);
   }
 
-  void test_implementsNonClass_class() {
+  test_implementsNonClass_class() async {
     Source source = addSource(r'''
 int A;
 class B implements A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_NON_CLASS]);
     verify([source]);
   }
 
-  void test_implementsNonClass_typeAlias() {
+  test_implementsNonClass_typeAlias() async {
     Source source = addSource(r'''
 class A {}
 class M {}
 int B;
 class C = A with M implements B;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_NON_CLASS]);
     verify([source]);
   }
 
-  void test_implementsRepeated() {
+  test_implementsRepeated() async {
     Source source = addSource(r'''
 class A {}
 class B implements A, A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_REPEATED]);
     verify([source]);
   }
 
-  void test_implementsRepeated_3times() {
+  test_implementsRepeated_3times() async {
     Source source = addSource(r'''
 class A {} class C{}
 class B implements A, A, A, A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.IMPLEMENTS_REPEATED,
       CompileTimeErrorCode.IMPLEMENTS_REPEATED,
@@ -2648,87 +2650,86 @@
     verify([source]);
   }
 
-  void test_implementsSuperClass() {
+  test_implementsSuperClass() async {
     Source source = addSource(r'''
 class A {}
 class B extends A implements A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_SUPER_CLASS]);
     verify([source]);
   }
 
-  void test_implementsSuperClass_Object() {
+  test_implementsSuperClass_Object() async {
     Source source = addSource("class A implements Object {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_SUPER_CLASS]);
     verify([source]);
   }
 
-  void test_implicitThisReferenceInInitializer_field() {
+  test_implicitThisReferenceInInitializer_field() async {
     Source source = addSource(r'''
 class A {
   var v;
   A() : v = f;
   var f;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
     verify([source]);
   }
 
-  void test_implicitThisReferenceInInitializer_field2() {
+  test_implicitThisReferenceInInitializer_field2() async {
     Source source = addSource(r'''
 class A {
   final x = 0;
   final y = x;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
     verify([source]);
   }
 
-  void test_implicitThisReferenceInInitializer_invocation() {
+  test_implicitThisReferenceInInitializer_invocation() async {
     Source source = addSource(r'''
 class A {
   var v;
   A() : v = f();
   f() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
     verify([source]);
   }
 
-  void test_implicitThisReferenceInInitializer_invocationInStatic() {
+  test_implicitThisReferenceInInitializer_invocationInStatic() async {
     Source source = addSource(r'''
 class A {
   static var F = m();
   m() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
     verify([source]);
   }
 
-  void
-      test_implicitThisReferenceInInitializer_redirectingConstructorInvocation() {
+  test_implicitThisReferenceInInitializer_redirectingConstructorInvocation() async {
     Source source = addSource(r'''
 class A {
   A(p) {}
   A.named() : this(f);
   var f;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
     verify([source]);
   }
 
-  void test_implicitThisReferenceInInitializer_superConstructorInvocation() {
+  test_implicitThisReferenceInInitializer_superConstructorInvocation() async {
     Source source = addSource(r'''
 class A {
   A(p) {}
@@ -2737,39 +2738,39 @@
   B() : super(f);
   var f;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
     verify([source]);
   }
 
-  void test_importInternalLibrary() {
+  test_importInternalLibrary() async {
     Source source = addSource("import 'dart:_interceptors';");
-    computeLibrarySourceErrors(source);
     // Note, in these error cases we may generate an UNUSED_IMPORT hint, while
     // we could prevent the hint from being generated by testing the import
     // directive for the error, this is such a minor corner case that we don't
     // think we should add the additional computation time to figure out such
     // cases.
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY, HintCode.UNUSED_IMPORT]);
     verify([source]);
   }
 
-  void test_importInternalLibrary_js_helper() {
+  test_importInternalLibrary_js_helper() async {
     Source source = addSource("import 'dart:_js_helper';");
-    computeLibrarySourceErrors(source);
     // Note, in these error cases we may generate an UNUSED_IMPORT hint, while
     // we could prevent the hint from being generated by testing the import
     // directive for the error, this is such a minor corner case that we don't
     // think we should add the additional computation time to figure out such
     // cases.
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY, HintCode.UNUSED_IMPORT]);
     verify([source]);
   }
 
-  void test_importOfNonLibrary() {
+  test_importOfNonLibrary() async {
     Source source = addSource(r'''
 library lib;
 import 'part.dart';
@@ -2779,12 +2780,12 @@
         r'''
 part of lib;
 class A{}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY]);
     verify([source]);
   }
 
-  void test_inconsistentCaseExpressionTypes() {
+  test_inconsistentCaseExpressionTypes() async {
     Source source = addSource(r'''
 f(var p) {
   switch (p) {
@@ -2794,13 +2795,13 @@
       break;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES]);
     verify([source]);
   }
 
-  void test_inconsistentCaseExpressionTypes_dynamic() {
+  test_inconsistentCaseExpressionTypes_dynamic() async {
     // Even though A.S and S have a static type of "dynamic", we should see
     // that they fail to match 3, because they are constant strings.
     Source source = addSource(r'''
@@ -2820,7 +2821,7 @@
       break;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES,
       CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES
@@ -2828,7 +2829,7 @@
     verify([source]);
   }
 
-  void test_inconsistentCaseExpressionTypes_repeated() {
+  test_inconsistentCaseExpressionTypes_repeated() async {
     Source source = addSource(r'''
 f(var p) {
   switch (p) {
@@ -2840,7 +2841,7 @@
       break;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES,
       CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES
@@ -2848,7 +2849,7 @@
     verify([source]);
   }
 
-  void test_initializerForNonExistent_const() {
+  test_initializerForNonExistent_const() async {
     // Check that the absence of a matching field doesn't cause a
     // crash during constant evaluation.
     Source source = addSource(r'''
@@ -2856,44 +2857,44 @@
   const A() : x = 'foo';
 }
 A a = const A();''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD]);
   }
 
-  void test_initializerForNonExistent_initializer() {
+  test_initializerForNonExistent_initializer() async {
     Source source = addSource(r'''
 class A {
   A() : x = 0 {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD]);
   }
 
-  void test_initializerForStaticField() {
+  test_initializerForStaticField() async {
     Source source = addSource(r'''
 class A {
   static int x;
   A() : x = 0 {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD]);
     verify([source]);
   }
 
-  void test_initializingFormalForNonExistentField() {
+  test_initializingFormalForNonExistentField() async {
     Source source = addSource(r'''
 class A {
   A(this.x) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD]);
     verify([source]);
   }
 
-  void test_initializingFormalForNonExistentField_notInEnclosingClass() {
+  test_initializingFormalForNonExistentField_notInEnclosingClass() async {
     Source source = addSource(r'''
 class A {
 int x;
@@ -2901,48 +2902,48 @@
 class B extends A {
   B(this.x) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD]);
     verify([source]);
   }
 
-  void test_initializingFormalForNonExistentField_optional() {
+  test_initializingFormalForNonExistentField_optional() async {
     Source source = addSource(r'''
 class A {
   A([this.x]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD]);
     verify([source]);
   }
 
-  void test_initializingFormalForNonExistentField_synthetic() {
+  test_initializingFormalForNonExistentField_synthetic() async {
     Source source = addSource(r'''
 class A {
   int get x => 1;
   A(this.x) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD]);
     verify([source]);
   }
 
-  void test_initializingFormalForStaticField() {
+  test_initializingFormalForStaticField() async {
     Source source = addSource(r'''
 class A {
   static int x;
   A([this.x]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_STATIC_FIELD]);
     verify([source]);
   }
 
-  void test_instanceMemberAccessFromFactory_named() {
+  test_instanceMemberAccessFromFactory_named() async {
     Source source = addSource(r'''
 class A {
   m() {}
@@ -2952,13 +2953,13 @@
     return new A();
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY]);
     verify([source]);
   }
 
-  void test_instanceMemberAccessFromFactory_unnamed() {
+  test_instanceMemberAccessFromFactory_unnamed() async {
     Source source = addSource(r'''
 class A {
   m() {}
@@ -2968,13 +2969,13 @@
     return new A._();
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY]);
     verify([source]);
   }
 
-  void test_instanceMemberAccessFromStatic_field() {
+  test_instanceMemberAccessFromStatic_field() async {
     Source source = addSource(r'''
 class A {
   int f;
@@ -2982,13 +2983,13 @@
     f;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
     verify([source]);
   }
 
-  void test_instanceMemberAccessFromStatic_getter() {
+  test_instanceMemberAccessFromStatic_getter() async {
     Source source = addSource(r'''
 class A {
   get g => null;
@@ -2996,13 +2997,13 @@
     g;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
     verify([source]);
   }
 
-  void test_instanceMemberAccessFromStatic_method() {
+  test_instanceMemberAccessFromStatic_method() async {
     Source source = addSource(r'''
 class A {
   m() {}
@@ -3010,46 +3011,46 @@
     m();
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
     verify([source]);
   }
 
-  void test_instantiateEnum_const() {
+  test_instantiateEnum_const() async {
     Source source = addSource(r'''
 enum E { ONE }
 E e(String name) {
   return const E();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INSTANTIATE_ENUM]);
     verify([source]);
   }
 
-  void test_instantiateEnum_new() {
+  test_instantiateEnum_new() async {
     Source source = addSource(r'''
 enum E { ONE }
 E e(String name) {
   return new E();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INSTANTIATE_ENUM]);
     verify([source]);
   }
 
-  void test_invalidAnnotation_getter() {
+  test_invalidAnnotation_getter() async {
     Source source = addSource(r'''
 get V => 0;
 @V
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_ANNOTATION]);
     verify([source]);
   }
 
-  void test_invalidAnnotation_importWithPrefix_getter() {
+  test_invalidAnnotation_importWithPrefix_getter() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -3060,12 +3061,12 @@
 @p.V
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_ANNOTATION]);
     verify([source]);
   }
 
-  void test_invalidAnnotation_importWithPrefix_notConstantVariable() {
+  test_invalidAnnotation_importWithPrefix_notConstantVariable() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -3076,13 +3077,12 @@
 @p.V
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_ANNOTATION]);
     verify([source]);
   }
 
-  void
-      test_invalidAnnotation_importWithPrefix_notVariableOrConstructorInvocation() {
+  test_invalidAnnotation_importWithPrefix_notVariableOrConstructorInvocation() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -3093,34 +3093,34 @@
 @p.V
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_ANNOTATION]);
     verify([source]);
   }
 
-  void test_invalidAnnotation_notConstantVariable() {
+  test_invalidAnnotation_notConstantVariable() async {
     Source source = addSource(r'''
 final V = 0;
 @V
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_ANNOTATION]);
     verify([source]);
   }
 
-  void test_invalidAnnotation_notVariableOrConstructorInvocation() {
+  test_invalidAnnotation_notVariableOrConstructorInvocation() async {
     Source source = addSource(r'''
 typedef V();
 @V
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_ANNOTATION]);
     verify([source]);
   }
 
-  void test_invalidAnnotation_staticMethodReference() {
+  test_invalidAnnotation_staticMethodReference() async {
     Source source = addSource(r'''
 class A {
   static f() {}
@@ -3128,52 +3128,52 @@
 @A.f
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_ANNOTATION]);
     verify([source]);
   }
 
-  void test_invalidAnnotation_unresolved_identifier() {
+  test_invalidAnnotation_unresolved_identifier() async {
     Source source = addSource(r'''
 @unresolved
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_ANNOTATION]);
   }
 
-  void test_invalidAnnotation_unresolved_invocation() {
+  test_invalidAnnotation_unresolved_invocation() async {
     Source source = addSource(r'''
 @Unresolved()
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_ANNOTATION]);
   }
 
-  void test_invalidAnnotation_unresolved_prefixedIdentifier() {
+  test_invalidAnnotation_unresolved_prefixedIdentifier() async {
     Source source = addSource(r'''
 import 'dart:math' as p;
 @p.unresolved
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_ANNOTATION]);
   }
 
-  void test_invalidAnnotation_useLibraryScope() {
+  test_invalidAnnotation_useLibraryScope() async {
     Source source = addSource(r'''
 @foo
 class A {
   static const foo = null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_ANNOTATION]);
   }
 
-  void test_invalidAnnotationFromDeferredLibrary() {
+  test_invalidAnnotationFromDeferredLibrary() async {
     // See test_invalidAnnotation_notConstantVariable
-    resolveWithErrors(<String>[
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class V { const V(); }
@@ -3187,9 +3187,9 @@
     ]);
   }
 
-  void test_invalidAnnotationFromDeferredLibrary_constructor() {
+  test_invalidAnnotationFromDeferredLibrary_constructor() async {
     // See test_invalidAnnotation_notConstantVariable
-    resolveWithErrors(<String>[
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class C { const C(); }''',
@@ -3202,9 +3202,9 @@
     ]);
   }
 
-  void test_invalidAnnotationFromDeferredLibrary_namedConstructor() {
+  test_invalidAnnotationFromDeferredLibrary_namedConstructor() async {
     // See test_invalidAnnotation_notConstantVariable
-    resolveWithErrors(<String>[
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class C { const C.name(); }''',
@@ -3217,186 +3217,186 @@
     ]);
   }
 
-  void test_invalidConstructorName_notEnclosingClassName_defined() {
+  test_invalidConstructorName_notEnclosingClassName_defined() async {
     Source source = addSource(r'''
 class A {
   B() : super();
 }
 class B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_CONSTRUCTOR_NAME]);
     // no verify() call, "B" is not resolved
   }
 
-  void test_invalidConstructorName_notEnclosingClassName_undefined() {
+  test_invalidConstructorName_notEnclosingClassName_undefined() async {
     Source source = addSource(r'''
 class A {
   B() : super();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_CONSTRUCTOR_NAME]);
     // no verify() call, "B" is not resolved
   }
 
-  void test_invalidFactoryNameNotAClass_notClassName() {
+  test_invalidFactoryNameNotAClass_notClassName() async {
     Source source = addSource(r'''
 int B;
 class A {
   factory B() => null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.INVALID_FACTORY_NAME_NOT_A_CLASS]);
     verify([source]);
   }
 
-  void test_invalidFactoryNameNotAClass_notEnclosingClassName() {
+  test_invalidFactoryNameNotAClass_notEnclosingClassName() async {
     Source source = addSource(r'''
 class A {
   factory B() => null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.INVALID_FACTORY_NAME_NOT_A_CLASS]);
     // no verify() call, "B" is not resolved
   }
 
-  void test_invalidModifierOnConstructor_async() {
+  test_invalidModifierOnConstructor_async() async {
     Source source = addSource(r'''
 class A {
   A() async {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_invalidModifierOnConstructor_asyncStar() {
+  test_invalidModifierOnConstructor_asyncStar() async {
     Source source = addSource(r'''
 class A {
   A() async* {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_invalidModifierOnConstructor_syncStar() {
+  test_invalidModifierOnConstructor_syncStar() async {
     Source source = addSource(r'''
 class A {
   A() sync* {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_invalidModifierOnSetter_member_async() {
+  test_invalidModifierOnSetter_member_async() async {
     Source source = addSource(r'''
 class A {
   set x(v) async {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER]);
     verify([source]);
   }
 
-  void test_invalidModifierOnSetter_member_asyncStar() {
+  test_invalidModifierOnSetter_member_asyncStar() async {
     Source source = addSource(r'''
 class A {
   set x(v) async* {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER]);
     verify([source]);
   }
 
-  void test_invalidModifierOnSetter_member_syncStar() {
+  test_invalidModifierOnSetter_member_syncStar() async {
     Source source = addSource(r'''
 class A {
   set x(v) sync* {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER]);
     verify([source]);
   }
 
-  void test_invalidModifierOnSetter_topLevel_async() {
+  test_invalidModifierOnSetter_topLevel_async() async {
     Source source = addSource("set x(v) async {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER]);
     verify([source]);
   }
 
-  void test_invalidModifierOnSetter_topLevel_asyncStar() {
+  test_invalidModifierOnSetter_topLevel_asyncStar() async {
     Source source = addSource("set x(v) async* {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER]);
     verify([source]);
   }
 
-  void test_invalidModifierOnSetter_topLevel_syncStar() {
+  test_invalidModifierOnSetter_topLevel_syncStar() async {
     Source source = addSource("set x(v) sync* {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER]);
     verify([source]);
   }
 
-  void test_invalidReferenceToThis_factoryConstructor() {
+  test_invalidReferenceToThis_factoryConstructor() async {
     Source source = addSource(r'''
 class A {
   factory A() { return this; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS]);
     verify([source]);
   }
 
-  void test_invalidReferenceToThis_instanceVariableInitializer_inConstructor() {
+  test_invalidReferenceToThis_instanceVariableInitializer_inConstructor() async {
     Source source = addSource(r'''
 class A {
   var f;
   A() : f = this;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS]);
     verify([source]);
   }
 
-  void test_invalidReferenceToThis_instanceVariableInitializer_inDeclaration() {
+  test_invalidReferenceToThis_instanceVariableInitializer_inDeclaration() async {
     Source source = addSource(r'''
 class A {
   var f = this;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS]);
     verify([source]);
   }
 
-  void test_invalidReferenceToThis_staticMethod() {
+  test_invalidReferenceToThis_staticMethod() async {
     Source source = addSource(r'''
 class A {
   static m() { return this; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS]);
     verify([source]);
   }
 
-  void test_invalidReferenceToThis_staticVariableInitializer() {
+  test_invalidReferenceToThis_staticVariableInitializer() async {
     Source source = addSource(r'''
 class A {
   static A f = this;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS]);
     verify([source]);
   }
 
-  void test_invalidReferenceToThis_superInitializer() {
+  test_invalidReferenceToThis_superInitializer() async {
     Source source = addSource(r'''
 class A {
   A(var x) {}
@@ -3404,72 +3404,72 @@
 class B extends A {
   B() : super(this);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS]);
     verify([source]);
   }
 
-  void test_invalidReferenceToThis_topLevelFunction() {
+  test_invalidReferenceToThis_topLevelFunction() async {
     Source source = addSource("f() { return this; }");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS]);
     verify([source]);
   }
 
-  void test_invalidReferenceToThis_variableInitializer() {
+  test_invalidReferenceToThis_variableInitializer() async {
     Source source = addSource("int x = this;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS]);
     verify([source]);
   }
 
-  void test_invalidTypeArgumentInConstList() {
+  test_invalidTypeArgumentInConstList() async {
     Source source = addSource(r'''
 class A<E> {
   m() {
     return const <E>[];
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST]);
     verify([source]);
   }
 
-  void test_invalidTypeArgumentInConstMap() {
+  test_invalidTypeArgumentInConstMap() async {
     Source source = addSource(r'''
 class A<E> {
   m() {
     return const <String, E>{};
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP]);
     verify([source]);
   }
 
-  void test_invalidUri_export() {
+  test_invalidUri_export() async {
     Source source = addSource("export 'ht:';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_URI]);
   }
 
-  void test_invalidUri_import() {
+  test_invalidUri_import() async {
     Source source = addSource("import 'ht:';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_URI]);
   }
 
-  void test_invalidUri_part() {
+  test_invalidUri_part() async {
     Source source = addSource(r'''
 library lib;
 part 'ht:';''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.INVALID_URI]);
   }
 
-  void test_isInConstInstanceCreation_restored() {
+  test_isInConstInstanceCreation_restored() async {
     // If ErrorVerifier._isInConstInstanceCreation is not properly restored on
     // exit from visitInstanceCreationExpression, the error at (1) will be
     // treated as a warning rather than an error.
@@ -3480,13 +3480,13 @@
 const x = const Foo<int>(const Foo<int>(0, 1),
     const <Foo<String>>[]); // (1)
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
     verify([source]);
   }
 
-  void test_isInInstanceVariableInitializer_restored() {
+  test_isInInstanceVariableInitializer_restored() async {
     // If ErrorVerifier._isInInstanceVariableInitializer is not properly
     // restored on exit from visitVariableDeclaration, the error at (1)
     // won't be detected.
@@ -3502,13 +3502,13 @@
   _foo() {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
     verify([source]);
   }
 
-  void test_labelInOuterScope() {
+  test_labelInOuterScope() async {
     Source source = addSource(r'''
 class A {
   void m(int i) {
@@ -3519,40 +3519,40 @@
     }
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.LABEL_IN_OUTER_SCOPE]);
     // We cannot verify resolution with unresolvable labels
   }
 
-  void test_labelUndefined_break() {
+  test_labelUndefined_break() async {
     Source source = addSource(r'''
 f() {
   x: while (true) {
     break y;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.LABEL_UNDEFINED]);
     // We cannot verify resolution with undefined labels
   }
 
-  void test_labelUndefined_continue() {
+  test_labelUndefined_continue() async {
     Source source = addSource(r'''
 f() {
   x: while (true) {
     continue y;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.LABEL_UNDEFINED]);
     // We cannot verify resolution with undefined labels
   }
 
-  void test_length_of_erroneous_constant() {
+  test_length_of_erroneous_constant() async {
     // Attempting to compute the length of constant that couldn't be evaluated
     // (due to an error) should not crash the analyzer (see dartbug.com/23383)
     Source source = addSource("const int i = (1 ? 'alpha' : 'beta').length;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE,
       CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
@@ -3561,76 +3561,76 @@
     verify([source]);
   }
 
-  void test_memberWithClassName_field() {
+  test_memberWithClassName_field() async {
     Source source = addSource(r'''
 class A {
   int A = 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME]);
     verify([source]);
   }
 
-  void test_memberWithClassName_field2() {
+  test_memberWithClassName_field2() async {
     Source source = addSource(r'''
 class A {
   int z, A, b = 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME]);
     verify([source]);
   }
 
-  void test_memberWithClassName_getter() {
+  test_memberWithClassName_getter() async {
     Source source = addSource(r'''
 class A {
   get A => 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME]);
     verify([source]);
   }
 
-  void test_memberWithClassName_method() {
+  test_memberWithClassName_method() async {
     // no test because indistinguishable from constructor
   }
 
-  void test_methodAndGetterWithSameName() {
+  test_methodAndGetterWithSameName() async {
     Source source = addSource(r'''
 class A {
   get x => 0;
   x(y) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.METHOD_AND_GETTER_WITH_SAME_NAME]);
     verify([source]);
   }
 
-  void test_mixinDeclaresConstructor_classDeclaration() {
+  test_mixinDeclaresConstructor_classDeclaration() async {
     Source source = addSource(r'''
 class A {
   A() {}
 }
 class B extends Object with A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_mixinDeclaresConstructor_typeAlias() {
+  test_mixinDeclaresConstructor_typeAlias() async {
     Source source = addSource(r'''
 class A {
   A() {}
 }
 class B = Object with A;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_mixinDeferredClass() {
-    resolveWithErrors(<String>[
+  test_mixinDeferredClass() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -3643,8 +3643,8 @@
     ]);
   }
 
-  void test_mixinDeferredClass_classTypeAlias() {
-    resolveWithErrors(<String>[
+  test_mixinDeferredClass_classTypeAlias() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -3658,7 +3658,7 @@
     ]);
   }
 
-  void test_mixinHasNoConstructors_mixinApp() {
+  test_mixinHasNoConstructors_mixinApp() async {
     Source source = addSource(r'''
 class B {
   B({x});
@@ -3666,12 +3666,12 @@
 class M {}
 class C = B with M;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
     verify([source]);
   }
 
-  void test_mixinHasNoConstructors_mixinClass() {
+  test_mixinHasNoConstructors_mixinClass() async {
     Source source = addSource(r'''
 class B {
   B({x});
@@ -3683,12 +3683,12 @@
     // generate a further error (despite the fact that it's not forwarded),
     // since CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS does a better job
     // of explaining the probem to the user.
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
     verify([source]);
   }
 
-  void test_mixinHasNoConstructors_mixinClass_explicitSuperCall() {
+  test_mixinHasNoConstructors_mixinClass_explicitSuperCall() async {
     Source source = addSource(r'''
 class B {
   B({x});
@@ -3702,12 +3702,12 @@
     // error (despite the fact that it's not forwarded), since
     // CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS does a better job of
     // explaining the error to the user.
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
     verify([source]);
   }
 
-  void test_mixinHasNoConstructors_mixinClass_implicitSuperCall() {
+  test_mixinHasNoConstructors_mixinClass_implicitSuperCall() async {
     Source source = addSource(r'''
 class B {
   B({x});
@@ -3721,12 +3721,12 @@
     // error (despite the fact that it's not forwarded), since
     // CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS does a better job of
     // explaining the error to the user.
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
     verify([source]);
   }
 
-  void test_mixinHasNoConstructors_mixinClass_namedSuperCall() {
+  test_mixinHasNoConstructors_mixinClass_namedSuperCall() async {
     Source source = addSource(r'''
 class B {
   B.named({x});
@@ -3740,152 +3740,152 @@
     // further error (despite the fact that it's not forwarded), since
     // CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS does a better job of
     // explaining the error to the user.
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
     verify([source]);
   }
 
-  void test_mixinInheritsFromNotObject_classDeclaration_extends() {
+  test_mixinInheritsFromNotObject_classDeclaration_extends() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {}
 class C extends Object with B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT]);
     verify([source]);
   }
 
-  void test_mixinInheritsFromNotObject_classDeclaration_with() {
+  test_mixinInheritsFromNotObject_classDeclaration_with() async {
     Source source = addSource(r'''
 class A {}
 class B extends Object with A {}
 class C extends Object with B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT]);
     verify([source]);
   }
 
-  void test_mixinInheritsFromNotObject_typeAlias_extends() {
+  test_mixinInheritsFromNotObject_typeAlias_extends() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {}
 class C = Object with B;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT]);
     verify([source]);
   }
 
-  void test_mixinInheritsFromNotObject_typeAlias_with() {
+  test_mixinInheritsFromNotObject_typeAlias_with() async {
     Source source = addSource(r'''
 class A {}
 class B extends Object with A {}
 class C = Object with B;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT]);
     verify([source]);
   }
 
-  void test_mixinOfDisallowedClass_class_bool() {
+  test_mixinOfDisallowedClass_class_bool() async {
     Source source = addSource("class A extends Object with bool {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_mixinOfDisallowedClass_class_double() {
+  test_mixinOfDisallowedClass_class_double() async {
     Source source = addSource("class A extends Object with double {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_mixinOfDisallowedClass_class_int() {
+  test_mixinOfDisallowedClass_class_int() async {
     Source source = addSource("class A extends Object with int {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_mixinOfDisallowedClass_class_Null() {
+  test_mixinOfDisallowedClass_class_Null() async {
     Source source = addSource("class A extends Object with Null {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_mixinOfDisallowedClass_class_num() {
+  test_mixinOfDisallowedClass_class_num() async {
     Source source = addSource("class A extends Object with num {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_mixinOfDisallowedClass_class_String() {
+  test_mixinOfDisallowedClass_class_String() async {
     Source source = addSource("class A extends Object with String {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_mixinOfDisallowedClass_classTypeAlias_bool() {
+  test_mixinOfDisallowedClass_classTypeAlias_bool() async {
     Source source = addSource(r'''
 class A {}
 class C = A with bool;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_mixinOfDisallowedClass_classTypeAlias_double() {
+  test_mixinOfDisallowedClass_classTypeAlias_double() async {
     Source source = addSource(r'''
 class A {}
 class C = A with double;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_mixinOfDisallowedClass_classTypeAlias_int() {
+  test_mixinOfDisallowedClass_classTypeAlias_int() async {
     Source source = addSource(r'''
 class A {}
 class C = A with int;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_mixinOfDisallowedClass_classTypeAlias_Null() {
+  test_mixinOfDisallowedClass_classTypeAlias_Null() async {
     Source source = addSource(r'''
 class A {}
 class C = A with Null;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_mixinOfDisallowedClass_classTypeAlias_num() {
+  test_mixinOfDisallowedClass_classTypeAlias_num() async {
     Source source = addSource(r'''
 class A {}
 class C = A with num;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_mixinOfDisallowedClass_classTypeAlias_String() {
+  test_mixinOfDisallowedClass_classTypeAlias_String() async {
     Source source = addSource(r'''
 class A {}
 class C = A with String;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
-  void test_mixinOfDisallowedClass_classTypeAlias_String_num() {
+  test_mixinOfDisallowedClass_classTypeAlias_String_num() async {
     Source source = addSource(r'''
 class A {}
 class C = A with String, num;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS,
       CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
@@ -3893,113 +3893,113 @@
     verify([source]);
   }
 
-  void test_mixinOfEnum() {
+  test_mixinOfEnum() async {
     Source source = addSource(r'''
 enum E { ONE }
 class A extends Object with E {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_ENUM]);
     verify([source]);
   }
 
-  void test_mixinOfNonClass_class() {
+  test_mixinOfNonClass_class() async {
     Source source = addSource(r'''
 int A;
 class B extends Object with A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_NON_CLASS]);
     verify([source]);
   }
 
-  void test_mixinOfNonClass_typeAlias() {
+  test_mixinOfNonClass_typeAlias() async {
     Source source = addSource(r'''
 class A {}
 int B;
 class C = A with B;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_NON_CLASS]);
     verify([source]);
   }
 
-  void test_mixinReferencesSuper() {
+  test_mixinReferencesSuper() async {
     Source source = addSource(r'''
 class A {
   toString() => super.toString();
 }
 class B extends Object with A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_REFERENCES_SUPER]);
     verify([source]);
   }
 
-  void test_mixinWithNonClassSuperclass_class() {
+  test_mixinWithNonClassSuperclass_class() async {
     Source source = addSource(r'''
 int A;
 class B {}
 class C extends A with B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS]);
     verify([source]);
   }
 
-  void test_mixinWithNonClassSuperclass_typeAlias() {
+  test_mixinWithNonClassSuperclass_typeAlias() async {
     Source source = addSource(r'''
 int A;
 class B {}
 class C = A with B;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS]);
     verify([source]);
   }
 
-  void test_multipleRedirectingConstructorInvocations() {
+  test_multipleRedirectingConstructorInvocations() async {
     Source source = addSource(r'''
 class A {
   A() : this.a(), this.b();
   A.a() {}
   A.b() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS]);
     verify([source]);
   }
 
-  void test_multipleSuperInitializers() {
+  test_multipleSuperInitializers() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {
   B() : super(), super() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MULTIPLE_SUPER_INITIALIZERS]);
     verify([source]);
   }
 
-  void test_nativeClauseInNonSDKCode() {
+  test_nativeClauseInNonSDKCode() async {
     // TODO(jwren) Move this test somewhere else: This test verifies a parser
     // error code is generated through the ErrorVerifier, it is not a
     // CompileTimeErrorCode.
     Source source = addSource("class A native 'string' {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.NATIVE_CLAUSE_IN_NON_SDK_CODE]);
     verify([source]);
   }
 
-  void test_nativeFunctionBodyInNonSDKCode_function() {
+  test_nativeFunctionBodyInNonSDKCode_function() async {
     // TODO(jwren) Move this test somewhere else: This test verifies a parser
     // error code is generated through the ErrorVerifier, it is not a
     // CompileTimeErrorCode.
     Source source = addSource("int m(a) native 'string';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [ParserErrorCode.NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE]);
     verify([source]);
   }
 
-  void test_nativeFunctionBodyInNonSDKCode_method() {
+  test_nativeFunctionBodyInNonSDKCode_method() async {
     // TODO(jwren) Move this test somewhere else: This test verifies a parser
     // error code is generated through the ErrorVerifier, it is not a
     // CompileTimeErrorCode.
@@ -4007,13 +4007,13 @@
 class A{
   static int m(a) native 'string';
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [ParserErrorCode.NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE]);
     verify([source]);
   }
 
-  void test_noAnnotationConstructorArguments() {
+  test_noAnnotationConstructorArguments() async {
     Source source = addSource(r'''
 class A {
   const A();
@@ -4021,13 +4021,13 @@
 @A
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS]);
     verify([source]);
   }
 
-  void test_noDefaultSuperConstructorExplicit() {
+  test_noDefaultSuperConstructorExplicit() async {
     Source source = addSource(r'''
 class A {
   A(p);
@@ -4035,13 +4035,13 @@
 class B extends A {
   B() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT]);
     verify([source]);
   }
 
-  void test_noDefaultSuperConstructorExplicit_MixinAppWithDirectSuperCall() {
+  test_noDefaultSuperConstructorExplicit_MixinAppWithDirectSuperCall() async {
     Source source = addSource(r'''
 class M {}
 class B {
@@ -4053,13 +4053,13 @@
   C(x) : super();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
     verify([source]);
   }
 
-  void test_noDefaultSuperConstructorExplicit_mixinAppWithNamedParam() {
+  test_noDefaultSuperConstructorExplicit_mixinAppWithNamedParam() async {
     Source source = addSource(r'''
 class M {}
 class B {
@@ -4071,13 +4071,13 @@
   C();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
     verify([source]);
   }
 
-  void test_noDefaultSuperConstructorExplicit_MixinAppWithNamedSuperCall() {
+  test_noDefaultSuperConstructorExplicit_MixinAppWithNamedSuperCall() async {
     Source source = addSource(r'''
 class M {}
 class B {
@@ -4089,13 +4089,13 @@
   C(x) : super.named();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER]);
     // Don't verify since call to super.named() can't be resolved.
   }
 
-  void test_noDefaultSuperConstructorExplicit_mixinAppWithOptionalParam() {
+  test_noDefaultSuperConstructorExplicit_mixinAppWithOptionalParam() async {
     Source source = addSource(r'''
 class M {}
 class B {
@@ -4107,13 +4107,13 @@
   C();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
     verify([source]);
   }
 
-  void test_noDefaultSuperConstructorExplicit_MixinWithDirectSuperCall() {
+  test_noDefaultSuperConstructorExplicit_MixinWithDirectSuperCall() async {
     Source source = addSource(r'''
 class M {}
 class B {
@@ -4124,13 +4124,13 @@
   C(x) : super();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
     verify([source]);
   }
 
-  void test_noDefaultSuperConstructorExplicit_mixinWithNamedParam() {
+  test_noDefaultSuperConstructorExplicit_mixinWithNamedParam() async {
     Source source = addSource(r'''
 class M {}
 class B {
@@ -4141,13 +4141,13 @@
   C();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT]);
     verify([source]);
   }
 
-  void test_noDefaultSuperConstructorExplicit_MixinWithNamedSuperCall() {
+  test_noDefaultSuperConstructorExplicit_MixinWithNamedSuperCall() async {
     Source source = addSource(r'''
 class M {}
 class B {
@@ -4158,13 +4158,13 @@
   C(x) : super.named();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER]);
     // Don't verify since call to super.named() can't be resolved.
   }
 
-  void test_noDefaultSuperConstructorExplicit_mixinWithOptionalParam() {
+  test_noDefaultSuperConstructorExplicit_mixinWithOptionalParam() async {
     Source source = addSource(r'''
 class M {}
 class B {
@@ -4175,13 +4175,13 @@
   C();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT]);
     verify([source]);
   }
 
-  void test_noDefaultSuperConstructorImplicit_mixinAppWithNamedParam() {
+  test_noDefaultSuperConstructorImplicit_mixinAppWithNamedParam() async {
     Source source = addSource(r'''
 class M {}
 class B {
@@ -4191,13 +4191,13 @@
 class Mixed = B with M;
 class C extends Mixed {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
     verify([source]);
   }
 
-  void test_noDefaultSuperConstructorImplicit_mixinAppWithOptionalParam() {
+  test_noDefaultSuperConstructorImplicit_mixinAppWithOptionalParam() async {
     Source source = addSource(r'''
 class M {}
 class B {
@@ -4207,13 +4207,13 @@
 class Mixed = B with M;
 class C extends Mixed {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
     verify([source]);
   }
 
-  void test_noDefaultSuperConstructorImplicit_mixinWithNamedParam() {
+  test_noDefaultSuperConstructorImplicit_mixinWithNamedParam() async {
     Source source = addSource(r'''
 class M {}
 class B {
@@ -4222,13 +4222,13 @@
 }
 class C extends B with M {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
     verify([source]);
   }
 
-  void test_noDefaultSuperConstructorImplicit_mixinWithOptionalParam() {
+  test_noDefaultSuperConstructorImplicit_mixinWithOptionalParam() async {
     Source source = addSource(r'''
 class M {}
 class B {
@@ -4237,36 +4237,36 @@
 }
 class C extends B with M {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
     verify([source]);
   }
 
-  void test_noDefaultSuperConstructorImplicit_superHasParameters() {
+  test_noDefaultSuperConstructorImplicit_superHasParameters() async {
     Source source = addSource(r'''
 class A {
   A(p);
 }
 class B extends A {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
     verify([source]);
   }
 
-  void test_noDefaultSuperConstructorImplicit_superOnlyNamed() {
+  test_noDefaultSuperConstructorImplicit_superOnlyNamed() async {
     Source source = addSource(r'''
 class A { A.named() {} }
 class B extends A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
     verify([source]);
   }
 
-  void test_nonConstantAnnotationConstructor_named() {
+  test_nonConstantAnnotationConstructor_named() async {
     Source source = addSource(r'''
 class A {
   A.fromInt() {}
@@ -4274,13 +4274,13 @@
 @A.fromInt()
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_nonConstantAnnotationConstructor_unnamed() {
+  test_nonConstantAnnotationConstructor_unnamed() async {
     Source source = addSource(r'''
 class A {
   A() {}
@@ -4288,76 +4288,76 @@
 @A()
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_nonConstantDefaultValue_function_named() {
+  test_nonConstantDefaultValue_function_named() async {
     Source source = addSource(r'''
 int y;
 f({x : y}) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE]);
     verify([source]);
   }
 
-  void test_nonConstantDefaultValue_function_positional() {
+  test_nonConstantDefaultValue_function_positional() async {
     Source source = addSource(r'''
 int y;
 f([x = y]) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE]);
     verify([source]);
   }
 
-  void test_nonConstantDefaultValue_inConstructor_named() {
+  test_nonConstantDefaultValue_inConstructor_named() async {
     Source source = addSource(r'''
 class A {
   int y;
   A({x : y}) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE]);
     verify([source]);
   }
 
-  void test_nonConstantDefaultValue_inConstructor_positional() {
+  test_nonConstantDefaultValue_inConstructor_positional() async {
     Source source = addSource(r'''
 class A {
   int y;
   A([x = y]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE]);
     verify([source]);
   }
 
-  void test_nonConstantDefaultValue_method_named() {
+  test_nonConstantDefaultValue_method_named() async {
     Source source = addSource(r'''
 class A {
   int y;
   m({x : y}) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE]);
     verify([source]);
   }
 
-  void test_nonConstantDefaultValue_method_positional() {
+  test_nonConstantDefaultValue_method_positional() async {
     Source source = addSource(r'''
 class A {
   int y;
   m([x = y]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE]);
     verify([source]);
   }
 
-  void test_nonConstantDefaultValueFromDeferredLibrary() {
-    resolveWithErrors(<String>[
+  test_nonConstantDefaultValueFromDeferredLibrary() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 const V = 1;''',
@@ -4370,8 +4370,8 @@
     ]);
   }
 
-  void test_nonConstantDefaultValueFromDeferredLibrary_nested() {
-    resolveWithErrors(<String>[
+  test_nonConstantDefaultValueFromDeferredLibrary_nested() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 const V = 1;''',
@@ -4384,7 +4384,7 @@
     ]);
   }
 
-  void test_nonConstCaseExpression() {
+  test_nonConstCaseExpression() async {
     Source source = addSource(r'''
 f(int p, int q) {
   switch (p) {
@@ -4392,13 +4392,13 @@
       break;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION]);
     verify([source]);
   }
 
-  void test_nonConstCaseExpressionFromDeferredLibrary() {
-    resolveWithErrors(<String>[
+  test_nonConstCaseExpressionFromDeferredLibrary() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 const int c = 1;''',
@@ -4416,8 +4416,8 @@
     ]);
   }
 
-  void test_nonConstCaseExpressionFromDeferredLibrary_nested() {
-    resolveWithErrors(<String>[
+  test_nonConstCaseExpressionFromDeferredLibrary_nested() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 const int c = 1;''',
@@ -4435,18 +4435,18 @@
     ]);
   }
 
-  void test_nonConstListElement() {
+  test_nonConstListElement() async {
     Source source = addSource(r'''
 f(a) {
   return const [a];
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT]);
     verify([source]);
   }
 
-  void test_nonConstListElementFromDeferredLibrary() {
-    resolveWithErrors(<String>[
+  test_nonConstListElementFromDeferredLibrary() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 const int c = 1;''',
@@ -4461,8 +4461,8 @@
     ]);
   }
 
-  void test_nonConstListElementFromDeferredLibrary_nested() {
-    resolveWithErrors(<String>[
+  test_nonConstListElementFromDeferredLibrary_nested() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 const int c = 1;''',
@@ -4477,40 +4477,40 @@
     ]);
   }
 
-  void test_nonConstMapAsExpressionStatement_begin() {
+  test_nonConstMapAsExpressionStatement_begin() async {
     Source source = addSource(r'''
 f() {
   {'a' : 0, 'b' : 1}.length;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT]);
     verify([source]);
   }
 
-  void test_nonConstMapAsExpressionStatement_only() {
+  test_nonConstMapAsExpressionStatement_only() async {
     Source source = addSource(r'''
 f() {
   {'a' : 0, 'b' : 1};
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT]);
     verify([source]);
   }
 
-  void test_nonConstMapKey() {
+  test_nonConstMapKey() async {
     Source source = addSource(r'''
 f(a) {
   return const {a : 0};
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_MAP_KEY]);
     verify([source]);
   }
 
-  void test_nonConstMapKeyFromDeferredLibrary() {
-    resolveWithErrors(<String>[
+  test_nonConstMapKeyFromDeferredLibrary() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 const int c = 1;''',
@@ -4525,8 +4525,8 @@
     ]);
   }
 
-  void test_nonConstMapKeyFromDeferredLibrary_nested() {
-    resolveWithErrors(<String>[
+  test_nonConstMapKeyFromDeferredLibrary_nested() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 const int c = 1;''',
@@ -4541,18 +4541,18 @@
     ]);
   }
 
-  void test_nonConstMapValue() {
+  test_nonConstMapValue() async {
     Source source = addSource(r'''
 f(a) {
   return const {'a' : a};
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE]);
     verify([source]);
   }
 
-  void test_nonConstMapValueFromDeferredLibrary() {
-    resolveWithErrors(<String>[
+  test_nonConstMapValueFromDeferredLibrary() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 const int c = 1;''',
@@ -4567,8 +4567,8 @@
     ]);
   }
 
-  void test_nonConstMapValueFromDeferredLibrary_nested() {
-    resolveWithErrors(<String>[
+  test_nonConstMapValueFromDeferredLibrary_nested() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 const int c = 1;''',
@@ -4583,37 +4583,39 @@
     ]);
   }
 
-  void test_nonConstValueInInitializer_assert_condition() {
-    resetWithOptions(new AnalysisOptionsImpl()..enableAssertInitializer = true);
+  test_nonConstValueInInitializer_assert_condition() async {
+    resetWith(
+        options: new AnalysisOptionsImpl()..enableAssertInitializer = true);
     Source source = addSource(r'''
 class A {
   const A(int i) : assert(i.isNegative);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
     verify([source]);
   }
 
-  void test_nonConstValueInInitializer_assert_message() {
-    resetWithOptions(new AnalysisOptionsImpl()..enableAssertInitializer = true);
+  test_nonConstValueInInitializer_assert_message() async {
+    resetWith(
+        options: new AnalysisOptionsImpl()..enableAssertInitializer = true);
     Source source = addSource(r'''
 class A {
   const A(int i) : assert(i < 0, 'isNegative = ${i.isNegative}');
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
     verify([source]);
   }
 
-  void test_nonConstValueInInitializer_binary_notBool_left() {
+  test_nonConstValueInInitializer_binary_notBool_left() async {
     Source source = addSource(r'''
 class A {
   final bool a;
   const A(String p) : a = p && true;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
       StaticTypeWarningCode.NON_BOOL_OPERAND
@@ -4621,13 +4623,13 @@
     verify([source]);
   }
 
-  void test_nonConstValueInInitializer_binary_notBool_right() {
+  test_nonConstValueInInitializer_binary_notBool_right() async {
     Source source = addSource(r'''
 class A {
   final bool a;
   const A(String p) : a = true && p;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
       StaticTypeWarningCode.NON_BOOL_OPERAND
@@ -4635,13 +4637,13 @@
     verify([source]);
   }
 
-  void test_nonConstValueInInitializer_binary_notInt() {
+  test_nonConstValueInInitializer_binary_notInt() async {
     Source source = addSource(r'''
 class A {
   final int a;
   const A(String p) : a = 5 & p;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_EVAL_TYPE_INT,
       StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
@@ -4649,13 +4651,13 @@
     verify([source]);
   }
 
-  void test_nonConstValueInInitializer_binary_notNum() {
+  test_nonConstValueInInitializer_binary_notNum() async {
     Source source = addSource(r'''
 class A {
   final int a;
   const A(String p) : a = 5 + p;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_EVAL_TYPE_NUM,
       StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
@@ -4663,20 +4665,20 @@
     verify([source]);
   }
 
-  void test_nonConstValueInInitializer_field() {
+  test_nonConstValueInInitializer_field() async {
     Source source = addSource(r'''
 class A {
   static int C;
   final int a;
   const A() : a = C;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
     verify([source]);
   }
 
-  void test_nonConstValueInInitializer_instanceCreation() {
+  test_nonConstValueInInitializer_instanceCreation() async {
     Source source = addSource(r'''
 class A {
   A();
@@ -4686,9 +4688,9 @@
   final a;
 }
 var b = const B();''');
-    computeLibrarySourceErrors(source);
     // TODO(paulberry): the error INVALID_CONSTAT is redundant and ought to be
     // suppressed.
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER,
       CompileTimeErrorCode.INVALID_CONSTANT
@@ -4696,20 +4698,20 @@
     verify([source]);
   }
 
-  void test_nonConstValueInInitializer_redirecting() {
+  test_nonConstValueInInitializer_redirecting() async {
     Source source = addSource(r'''
 class A {
   static var C;
   const A.named(p);
   const A() : this.named(C);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
     verify([source]);
   }
 
-  void test_nonConstValueInInitializer_super() {
+  test_nonConstValueInInitializer_super() async {
     Source source = addSource(r'''
 class A {
   const A(p);
@@ -4718,14 +4720,14 @@
   static var C;
   const B() : super(C);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
     verify([source]);
   }
 
-  void test_nonConstValueInInitializerFromDeferredLibrary_field() {
-    resolveWithErrors(<String>[
+  test_nonConstValueInInitializerFromDeferredLibrary_field() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 const int c = 1;''',
@@ -4742,8 +4744,8 @@
     ]);
   }
 
-  void test_nonConstValueInInitializerFromDeferredLibrary_field_nested() {
-    resolveWithErrors(<String>[
+  test_nonConstValueInInitializerFromDeferredLibrary_field_nested() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 const int c = 1;''',
@@ -4760,8 +4762,8 @@
     ]);
   }
 
-  void test_nonConstValueInInitializerFromDeferredLibrary_redirecting() {
-    resolveWithErrors(<String>[
+  test_nonConstValueInInitializerFromDeferredLibrary_redirecting() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 const int c = 1;''',
@@ -4778,8 +4780,8 @@
     ]);
   }
 
-  void test_nonConstValueInInitializerFromDeferredLibrary_super() {
-    resolveWithErrors(<String>[
+  test_nonConstValueInInitializerFromDeferredLibrary_super() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 const int c = 1;''',
@@ -4798,7 +4800,7 @@
     ]);
   }
 
-  void test_nonGenerativeConstructor_explicit() {
+  test_nonGenerativeConstructor_explicit() async {
     Source source = addSource(r'''
 class A {
   factory A.named() => null;
@@ -4806,12 +4808,12 @@
 class B extends A {
   B() : super.named();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_nonGenerativeConstructor_implicit() {
+  test_nonGenerativeConstructor_implicit() async {
     Source source = addSource(r'''
 class A {
   factory A() => null;
@@ -4819,24 +4821,24 @@
 class B extends A {
   B();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_nonGenerativeConstructor_implicit2() {
+  test_nonGenerativeConstructor_implicit2() async {
     Source source = addSource(r'''
 class A {
   factory A() => null;
 }
 class B extends A {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_notEnoughRequiredArguments_const() {
+  test_notEnoughRequiredArguments_const() async {
     Source source = addSource(r'''
 class A {
   const A(int p);
@@ -4844,12 +4846,12 @@
 main() {
   const A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]);
     verify([source]);
   }
 
-  void test_notEnoughRequiredArguments_const_super() {
+  test_notEnoughRequiredArguments_const_super() async {
     Source source = addSource(r'''
 class A {
   const A(int p);
@@ -4857,51 +4859,51 @@
 class B extends A {
   const B() : super();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]);
     verify([source]);
   }
 
-  void test_optionalParameterInOperator_named() {
+  test_optionalParameterInOperator_named() async {
     Source source = addSource(r'''
 class A {
   operator +({p}) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.OPTIONAL_PARAMETER_IN_OPERATOR]);
     verify([source]);
   }
 
-  void test_optionalParameterInOperator_positional() {
+  test_optionalParameterInOperator_positional() async {
     Source source = addSource(r'''
 class A {
   operator +([p]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.OPTIONAL_PARAMETER_IN_OPERATOR]);
     verify([source]);
   }
 
-  void test_partOfNonPart() {
+  test_partOfNonPart() async {
     Source source = addSource(r'''
 library l1;
 part 'l2.dart';''');
     addNamedSource("/l2.dart", "library l2;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.PART_OF_NON_PART]);
     verify([source]);
   }
 
-  void test_partOfNonPart_self() {
+  test_partOfNonPart_self() async {
     Source source = addSource(r'''
 library lib;
 part 'test.dart';''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.PART_OF_NON_PART]);
     verify([source]);
   }
 
-  void test_prefix_assignment_compound_in_method() {
+  test_prefix_assignment_compound_in_method() async {
     addNamedSource('/lib.dart', 'library lib;');
     Source source = addSource('''
 import 'lib.dart' as p;
@@ -4911,13 +4913,13 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT]);
     verify([source]);
   }
 
-  void test_prefix_assignment_compound_not_in_method() {
+  test_prefix_assignment_compound_not_in_method() async {
     addNamedSource('/lib.dart', 'library lib;');
     Source source = addSource('''
 import 'lib.dart' as p;
@@ -4925,13 +4927,13 @@
   p += 1;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT]);
     verify([source]);
   }
 
-  void test_prefix_assignment_in_method() {
+  test_prefix_assignment_in_method() async {
     addNamedSource('/lib.dart', 'library lib;');
     Source source = addSource('''
 import 'lib.dart' as p;
@@ -4941,13 +4943,13 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT]);
     verify([source]);
   }
 
-  void test_prefix_assignment_not_in_method() {
+  test_prefix_assignment_not_in_method() async {
     addNamedSource('/lib.dart', 'library lib;');
     Source source = addSource('''
 import 'lib.dart' as p;
@@ -4955,13 +4957,13 @@
   p = 1;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT]);
     verify([source]);
   }
 
-  void test_prefix_conditionalPropertyAccess_call() {
+  test_prefix_conditionalPropertyAccess_call() async {
     addNamedSource(
         '/lib.dart',
         '''
@@ -4974,13 +4976,13 @@
   p?.g();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT]);
     verify([source]);
   }
 
-  void test_prefix_conditionalPropertyAccess_call_loadLibrary() {
+  test_prefix_conditionalPropertyAccess_call_loadLibrary() async {
     addNamedSource(
         '/lib.dart',
         '''
@@ -4992,13 +4994,13 @@
   p?.loadLibrary();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT]);
     verify([source]);
   }
 
-  void test_prefix_conditionalPropertyAccess_get() {
+  test_prefix_conditionalPropertyAccess_get() async {
     addNamedSource(
         '/lib.dart',
         '''
@@ -5011,13 +5013,13 @@
   return p?.x;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT]);
     verify([source]);
   }
 
-  void test_prefix_conditionalPropertyAccess_get_loadLibrary() {
+  test_prefix_conditionalPropertyAccess_get_loadLibrary() async {
     addNamedSource(
         '/lib.dart',
         '''
@@ -5029,13 +5031,13 @@
   return p?.loadLibrary;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT]);
     verify([source]);
   }
 
-  void test_prefix_conditionalPropertyAccess_set() {
+  test_prefix_conditionalPropertyAccess_set() async {
     addNamedSource(
         '/lib.dart',
         '''
@@ -5048,13 +5050,13 @@
   p?.x = null;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT]);
     verify([source]);
   }
 
-  void test_prefix_conditionalPropertyAccess_set_loadLibrary() {
+  test_prefix_conditionalPropertyAccess_set_loadLibrary() async {
     addNamedSource(
         '/lib.dart',
         '''
@@ -5066,13 +5068,13 @@
   p?.loadLibrary = null;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT]);
     verify([source]);
   }
 
-  void test_prefix_unqualified_invocation_in_method() {
+  test_prefix_unqualified_invocation_in_method() async {
     addNamedSource('/lib.dart', 'librarylib;');
     Source source = addSource('''
 import 'lib.dart' as p;
@@ -5082,13 +5084,13 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT]);
     verify([source]);
   }
 
-  void test_prefix_unqualified_invocation_not_in_method() {
+  test_prefix_unqualified_invocation_not_in_method() async {
     addNamedSource('/lib.dart', 'librarylib;');
     Source source = addSource('''
 import 'lib.dart' as p;
@@ -5096,13 +5098,13 @@
   p();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT]);
     verify([source]);
   }
 
-  void test_prefixCollidesWithTopLevelMembers_functionTypeAlias() {
+  test_prefixCollidesWithTopLevelMembers_functionTypeAlias() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -5112,13 +5114,13 @@
 import 'lib.dart' as p;
 typedef p();
 p.A a;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER]);
     verify([source]);
   }
 
-  void test_prefixCollidesWithTopLevelMembers_topLevelFunction() {
+  test_prefixCollidesWithTopLevelMembers_topLevelFunction() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -5128,13 +5130,13 @@
 import 'lib.dart' as p;
 p() {}
 p.A a;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER]);
     verify([source]);
   }
 
-  void test_prefixCollidesWithTopLevelMembers_topLevelVariable() {
+  test_prefixCollidesWithTopLevelMembers_topLevelVariable() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -5144,13 +5146,13 @@
 import 'lib.dart' as p;
 var p = null;
 p.A a;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER]);
     verify([source]);
   }
 
-  void test_prefixCollidesWithTopLevelMembers_type() {
+  test_prefixCollidesWithTopLevelMembers_type() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -5160,13 +5162,13 @@
 import 'lib.dart' as p;
 class p {}
 p.A a;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER]);
     verify([source]);
   }
 
-  void test_prefixNotFollowedByDot() {
+  test_prefixNotFollowedByDot() async {
     addNamedSource('/lib.dart', 'library lib;');
     Source source = addSource('''
 import 'lib.dart' as p;
@@ -5174,13 +5176,13 @@
   return p;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT]);
     verify([source]);
   }
 
-  void test_prefixNotFollowedByDot_compoundAssignment() {
+  test_prefixNotFollowedByDot_compoundAssignment() async {
     addNamedSource('/lib.dart', 'library lib;');
     Source source = addSource('''
 import 'lib.dart' as p;
@@ -5188,13 +5190,13 @@
   p += 1;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT]);
     verify([source]);
   }
 
-  void test_prefixNotFollowedByDot_conditionalMethodInvocation() {
+  test_prefixNotFollowedByDot_conditionalMethodInvocation() async {
     addNamedSource(
         '/lib.dart',
         '''
@@ -5207,54 +5209,54 @@
   p?.g();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT]);
     verify([source]);
   }
 
-  void test_privateOptionalParameter() {
+  test_privateOptionalParameter() async {
     Source source = addSource("f({var _p}) {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.PRIVATE_OPTIONAL_PARAMETER]);
     verify([source]);
   }
 
-  void test_privateOptionalParameter_fieldFormal() {
+  test_privateOptionalParameter_fieldFormal() async {
     Source source = addSource(r'''
 class A {
   var _p;
   A({this._p: 0});
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.PRIVATE_OPTIONAL_PARAMETER]);
     verify([source]);
   }
 
-  void test_privateOptionalParameter_withDefaultValue() {
+  test_privateOptionalParameter_withDefaultValue() async {
     Source source = addSource("f({_p : 0}) {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.PRIVATE_OPTIONAL_PARAMETER]);
     verify([source]);
   }
 
-  void test_recursiveCompileTimeConstant() {
+  test_recursiveCompileTimeConstant() async {
     Source source = addSource(r'''
 class A {
   const A();
   final m = const A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT]);
     verify([source]);
   }
 
-  void test_recursiveCompileTimeConstant_cycle() {
+  test_recursiveCompileTimeConstant_cycle() async {
     Source source = addSource(r'''
 const x = y + 1;
 const y = x + 1;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT,
       CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT
@@ -5262,7 +5264,7 @@
     verify([source]);
   }
 
-  void test_recursiveCompileTimeConstant_initializer_after_toplevel_var() {
+  test_recursiveCompileTimeConstant_initializer_after_toplevel_var() async {
     Source source = addSource('''
 const y = const C();
 class C {
@@ -5270,29 +5272,29 @@
   final x;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT]);
     verify([source]);
   }
 
-  void test_recursiveCompileTimeConstant_singleVariable() {
+  test_recursiveCompileTimeConstant_singleVariable() async {
     Source source = addSource(r'''
 const x = x;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT]);
     verify([source]);
   }
 
-  void test_recursiveConstructorRedirect() {
+  test_recursiveConstructorRedirect() async {
     Source source = addSource(r'''
 class A {
   A.a() : this.b();
   A.b() : this.a();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT,
       CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT
@@ -5300,17 +5302,17 @@
     verify([source]);
   }
 
-  void test_recursiveConstructorRedirect_directSelfReference() {
+  test_recursiveConstructorRedirect_directSelfReference() async {
     Source source = addSource(r'''
 class A {
   A() : this();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT]);
     verify([source]);
   }
 
-  void test_recursiveFactoryRedirect() {
+  test_recursiveFactoryRedirect() async {
     Source source = addSource(r'''
 class A implements B {
   factory A() = C;
@@ -5321,7 +5323,7 @@
 class C implements A {
   factory C() = B;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
       CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
@@ -5333,17 +5335,17 @@
     verify([source]);
   }
 
-  void test_recursiveFactoryRedirect_directSelfReference() {
+  test_recursiveFactoryRedirect_directSelfReference() async {
     Source source = addSource(r'''
 class A {
   factory A() = A;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT]);
     verify([source]);
   }
 
-  void test_recursiveFactoryRedirect_diverging() {
+  test_recursiveFactoryRedirect_diverging() async {
     // Analysis should terminate even though the redirections don't reach a
     // fixed point.  (C<int> redirects to C<C<int>>, then to C<C<C<int>>>, and
     // so on).
@@ -5355,12 +5357,12 @@
   const C<int>();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT]);
     verify([source]);
   }
 
-  void test_recursiveFactoryRedirect_generic() {
+  test_recursiveFactoryRedirect_generic() async {
     Source source = addSource(r'''
 class A<T> implements B<T> {
   factory A() = C;
@@ -5371,7 +5373,7 @@
 class C<T> implements A<T> {
   factory C() = B;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
       CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
@@ -5383,7 +5385,7 @@
     verify([source]);
   }
 
-  void test_recursiveFactoryRedirect_named() {
+  test_recursiveFactoryRedirect_named() async {
     Source source = addSource(r'''
 class A implements B {
   factory A.nameA() = C.nameC;
@@ -5394,7 +5396,7 @@
 class C implements A {
   factory C.nameC() = B.nameB;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
       CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
@@ -5410,7 +5412,7 @@
    * "A" references "C" which has cycle with "B". But we should not report problem for "A" - it is
    * not the part of a cycle.
    */
-  void test_recursiveFactoryRedirect_outsideCycle() {
+  test_recursiveFactoryRedirect_outsideCycle() async {
     Source source = addSource(r'''
 class A {
   factory A() = C;
@@ -5421,7 +5423,7 @@
 class C implements A, B {
   factory C() = B;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
       CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
@@ -5431,11 +5433,11 @@
     verify([source]);
   }
 
-  void test_recursiveInterfaceInheritance_extends() {
+  test_recursiveInterfaceInheritance_extends() async {
     Source source = addSource(r'''
 class A extends B {}
 class B extends A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE
@@ -5443,11 +5445,11 @@
     verify([source]);
   }
 
-  void test_recursiveInterfaceInheritance_extends_implements() {
+  test_recursiveInterfaceInheritance_extends_implements() async {
     Source source = addSource(r'''
 class A extends B {}
 class B implements A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE
@@ -5455,11 +5457,11 @@
     verify([source]);
   }
 
-  void test_recursiveInterfaceInheritance_implements() {
+  test_recursiveInterfaceInheritance_implements() async {
     Source source = addSource(r'''
 class A implements B {}
 class B implements A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE
@@ -5467,11 +5469,11 @@
     verify([source]);
   }
 
-  void test_recursiveInterfaceInheritance_mixin() {
+  test_recursiveInterfaceInheritance_mixin() async {
     Source source = addSource(r'''
 class M1 = Object with M2;
 class M2 = Object with M1;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE
@@ -5479,7 +5481,7 @@
     verify([source]);
   }
 
-  void test_recursiveInterfaceInheritance_mixin_superclass() {
+  test_recursiveInterfaceInheritance_mixin_superclass() async {
     // Make sure we don't get CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS in
     // addition--that would just be confusing.
     Source source = addSource('''
@@ -5487,7 +5489,7 @@
 class D = C with M;
 class M {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE
@@ -5495,23 +5497,23 @@
     verify([source]);
   }
 
-  void test_recursiveInterfaceInheritance_tail() {
+  test_recursiveInterfaceInheritance_tail() async {
     Source source = addSource(r'''
 abstract class A implements A {}
 class B implements A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS
     ]);
     verify([source]);
   }
 
-  void test_recursiveInterfaceInheritance_tail2() {
+  test_recursiveInterfaceInheritance_tail2() async {
     Source source = addSource(r'''
 abstract class A implements B {}
 abstract class B implements A {}
 class C implements A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE
@@ -5519,13 +5521,13 @@
     verify([source]);
   }
 
-  void test_recursiveInterfaceInheritance_tail3() {
+  test_recursiveInterfaceInheritance_tail3() async {
     Source source = addSource(r'''
 abstract class A implements B {}
 abstract class B implements C {}
 abstract class C implements A {}
 class D implements A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
@@ -5534,23 +5536,23 @@
     verify([source]);
   }
 
-  void test_recursiveInterfaceInheritanceBaseCaseExtends() {
+  test_recursiveInterfaceInheritanceBaseCaseExtends() async {
     Source source = addSource("class A extends A {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS
     ]);
     verify([source]);
   }
 
-  void test_recursiveInterfaceInheritanceBaseCaseExtends_abstract() {
+  test_recursiveInterfaceInheritanceBaseCaseExtends_abstract() async {
     Source source = addSource(r'''
 class C extends C {
   var bar = 0;
   m();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS,
       StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
@@ -5559,59 +5561,59 @@
     verify([source]);
   }
 
-  void test_recursiveInterfaceInheritanceBaseCaseImplements() {
+  test_recursiveInterfaceInheritanceBaseCaseImplements() async {
     Source source = addSource("class A implements A {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS
     ]);
     verify([source]);
   }
 
-  void test_recursiveInterfaceInheritanceBaseCaseImplements_typeAlias() {
+  test_recursiveInterfaceInheritanceBaseCaseImplements_typeAlias() async {
     Source source = addSource(r'''
 class A {}
 class M {}
 class B = A with M implements B;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS
     ]);
     verify([source]);
   }
 
-  void test_recursiveInterfaceInheritanceBaseCaseWith() {
+  test_recursiveInterfaceInheritanceBaseCaseWith() async {
     Source source = addSource("class M = Object with M;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_WITH]);
     verify([source]);
   }
 
-  void test_redirectGenerativeToMissingConstructor() {
+  test_redirectGenerativeToMissingConstructor() async {
     Source source = addSource(r'''
 class A {
   A() : this.noSuchConstructor();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR]);
   }
 
-  void test_redirectGenerativeToNonGenerativeConstructor() {
+  test_redirectGenerativeToNonGenerativeConstructor() async {
     Source source = addSource(r'''
 class A {
   A() : this.x();
   factory A.x() => null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR
     ]);
     verify([source]);
   }
 
-  void test_redirectToMissingConstructor_named() {
+  test_redirectToMissingConstructor_named() async {
     Source source = addSource(r'''
 class A implements B{
   A() {}
@@ -5619,12 +5621,12 @@
 class B {
   const factory B() = A.name;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR]);
   }
 
-  void test_redirectToMissingConstructor_unnamed() {
+  test_redirectToMissingConstructor_unnamed() async {
     Source source = addSource(r'''
 class A implements B{
   A.name() {}
@@ -5632,45 +5634,45 @@
 class B {
   const factory B() = A;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR]);
   }
 
-  void test_redirectToNonClass_notAType() {
+  test_redirectToNonClass_notAType() async {
     Source source = addSource(r'''
 int A;
 class B {
   const factory B() = A;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.REDIRECT_TO_NON_CLASS]);
     verify([source]);
   }
 
-  void test_redirectToNonClass_undefinedIdentifier() {
+  test_redirectToNonClass_undefinedIdentifier() async {
     Source source = addSource(r'''
 class B {
   const factory B() = A;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.REDIRECT_TO_NON_CLASS]);
     verify([source]);
   }
 
-  void test_redirectToNonConstConstructor() {
+  test_redirectToNonConstConstructor() async {
     Source source = addSource(r'''
 class A {
   A.a() {}
   const factory A.b() = A.a;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.REDIRECT_TO_NON_CONST_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_referencedBeforeDeclaration_hideInBlock_function() {
+  test_referencedBeforeDeclaration_hideInBlock_function() async {
     Source source = addSource(r'''
 var v = 1;
 main() {
@@ -5678,11 +5680,11 @@
   v() {}
 }
 print(x) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION]);
   }
 
-  void test_referencedBeforeDeclaration_hideInBlock_local() {
+  test_referencedBeforeDeclaration_hideInBlock_local() async {
     Source source = addSource(r'''
 var v = 1;
 main() {
@@ -5690,11 +5692,11 @@
   var v = 2;
 }
 print(x) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION]);
   }
 
-  void test_referencedBeforeDeclaration_hideInBlock_subBlock() {
+  test_referencedBeforeDeclaration_hideInBlock_subBlock() async {
     Source source = addSource(r'''
 var v = 1;
 main() {
@@ -5704,104 +5706,104 @@
   var v = 2;
 }
 print(x) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION]);
   }
 
-  void test_referencedBeforeDeclaration_inInitializer_closure() {
+  test_referencedBeforeDeclaration_inInitializer_closure() async {
     Source source = addSource(r'''
 main() {
   var v = () => v;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION]);
   }
 
-  void test_referencedBeforeDeclaration_inInitializer_directly() {
+  test_referencedBeforeDeclaration_inInitializer_directly() async {
     Source source = addSource(r'''
 main() {
   var v = v;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION]);
   }
 
-  void test_referencedBeforeDeclaration_type_localFunction() {
+  test_referencedBeforeDeclaration_type_localFunction() async {
     Source source = addSource(r'''
 void testTypeRef() {
   String s = '';
   int String(int x) => x + 1;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION]);
   }
 
-  void test_referencedBeforeDeclaration_type_localVariable() {
+  test_referencedBeforeDeclaration_type_localVariable() async {
     Source source = addSource(r'''
 void testTypeRef() {
   String s = '';
   var String = '';
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION]);
   }
 
-  void test_rethrowOutsideCatch() {
+  test_rethrowOutsideCatch() async {
     Source source = addSource(r'''
 f() {
   rethrow;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.RETHROW_OUTSIDE_CATCH]);
     verify([source]);
   }
 
-  void test_returnInGenerativeConstructor() {
+  test_returnInGenerativeConstructor() async {
     Source source = addSource(r'''
 class A {
   A() { return 0; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.RETURN_IN_GENERATIVE_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_returnInGenerativeConstructor_expressionFunctionBody() {
+  test_returnInGenerativeConstructor_expressionFunctionBody() async {
     Source source = addSource(r'''
 class A {
   A() => null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.RETURN_IN_GENERATIVE_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_returnInGenerator_asyncStar() {
+  test_returnInGenerator_asyncStar() async {
     Source source = addSource(r'''
 f() async* {
   return 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.RETURN_IN_GENERATOR]);
     verify([source]);
   }
 
-  void test_returnInGenerator_syncStar() {
+  test_returnInGenerator_syncStar() async {
     Source source = addSource(r'''
 f() sync* {
   return 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.RETURN_IN_GENERATOR]);
     verify([source]);
   }
 
-  void test_sharedDeferredPrefix() {
-    resolveWithErrors(<String>[
+  test_sharedDeferredPrefix() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 f1() {}''',
@@ -5818,14 +5820,14 @@
     ]);
   }
 
-  void test_superInInvalidContext_binaryExpression() {
+  test_superInInvalidContext_binaryExpression() async {
     Source source = addSource("var v = super + 0;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
     // no verify(), 'super.v' is not resolved
   }
 
-  void test_superInInvalidContext_constructorFieldInitializer() {
+  test_superInInvalidContext_constructorFieldInitializer() async {
     Source source = addSource(r'''
 class A {
   m() {}
@@ -5834,12 +5836,12 @@
   var f;
   B() : f = super.m();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
     // no verify(), 'super.m' is not resolved
   }
 
-  void test_superInInvalidContext_factoryConstructor() {
+  test_superInInvalidContext_factoryConstructor() async {
     Source source = addSource(r'''
 class A {
   m() {}
@@ -5850,12 +5852,12 @@
     return null;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
     // no verify(), 'super.m' is not resolved
   }
 
-  void test_superInInvalidContext_instanceVariableInitializer() {
+  test_superInInvalidContext_instanceVariableInitializer() async {
     Source source = addSource(r'''
 class A {
   var a;
@@ -5863,12 +5865,12 @@
 class B extends A {
  var b = super.a;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
     // no verify(), 'super.a' is not resolved
   }
 
-  void test_superInInvalidContext_staticMethod() {
+  test_superInInvalidContext_staticMethod() async {
     Source source = addSource(r'''
 class A {
   static m() {}
@@ -5876,12 +5878,12 @@
 class B extends A {
   static n() { return super.m(); }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
     // no verify(), 'super.m' is not resolved
   }
 
-  void test_superInInvalidContext_staticVariableInitializer() {
+  test_superInInvalidContext_staticVariableInitializer() async {
     Source source = addSource(r'''
 class A {
   static int a = 0;
@@ -5889,62 +5891,62 @@
 class B extends A {
   static int b = super.a;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
     // no verify(), 'super.a' is not resolved
   }
 
-  void test_superInInvalidContext_topLevelFunction() {
+  test_superInInvalidContext_topLevelFunction() async {
     Source source = addSource(r'''
 f() {
   super.f();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
     // no verify(), 'super.f' is not resolved
   }
 
-  void test_superInInvalidContext_topLevelVariableInitializer() {
+  test_superInInvalidContext_topLevelVariableInitializer() async {
     Source source = addSource("var v = super.y;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
     // no verify(), 'super.y' is not resolved
   }
 
-  void test_superInRedirectingConstructor_redirectionSuper() {
+  test_superInRedirectingConstructor_redirectionSuper() async {
     Source source = addSource(r'''
 class A {}
 class B {
   B() : this.name(), super();
   B.name() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_superInRedirectingConstructor_superRedirection() {
+  test_superInRedirectingConstructor_superRedirection() async {
     Source source = addSource(r'''
 class A {}
 class B {
   B() : super(), this.name();
   B.name() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_symbol_constructor_badArgs() {
+  test_symbol_constructor_badArgs() async {
     Source source = addSource(r'''
 var s1 = const Symbol('3');
 var s2 = const Symbol(3);
 var s3 = const Symbol();
 var s4 = const Symbol('x', 'y');
 var s5 = const Symbol('x', foo: 'x');''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
       CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
@@ -5956,14 +5958,14 @@
     verify([source]);
   }
 
-  void test_typeAliasCannotReferenceItself_11987() {
+  test_typeAliasCannotReferenceItself_11987() async {
     Source source = addSource(r'''
 typedef void F(List<G> l);
 typedef void G(List<F> l);
 main() {
   F foo(G g) => g;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
       CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF
@@ -5971,7 +5973,7 @@
     verify([source]);
   }
 
-  void test_typeAliasCannotReferenceItself_19459() {
+  test_typeAliasCannotReferenceItself_19459() async {
     // A complex example involving multiple classes.  This is legal, since
     // typedef F references itself only via a class.
     Source source = addSource(r'''
@@ -5982,44 +5984,44 @@
 abstract class E extends A<dynamic, F> {}
 typedef D F();
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typeAliasCannotReferenceItself_parameterType_named() {
+  test_typeAliasCannotReferenceItself_parameterType_named() async {
     Source source = addSource("typedef A({A a});");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
     verify([source]);
   }
 
-  void test_typeAliasCannotReferenceItself_parameterType_positional() {
+  test_typeAliasCannotReferenceItself_parameterType_positional() async {
     Source source = addSource("typedef A([A a]);");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
     verify([source]);
   }
 
-  void test_typeAliasCannotReferenceItself_parameterType_required() {
+  test_typeAliasCannotReferenceItself_parameterType_required() async {
     Source source = addSource("typedef A(A a);");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
     verify([source]);
   }
 
-  void test_typeAliasCannotReferenceItself_parameterType_typeArgument() {
+  test_typeAliasCannotReferenceItself_parameterType_typeArgument() async {
     Source source = addSource("typedef A(List<A> a);");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
     verify([source]);
   }
 
-  void test_typeAliasCannotReferenceItself_returnClass_withTypeAlias() {
+  test_typeAliasCannotReferenceItself_returnClass_withTypeAlias() async {
     // A typedef is allowed to indirectly reference itself via a class.
     Source source = addSource(r'''
 typedef C A();
@@ -6027,24 +6029,24 @@
 class C {
   B a;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typeAliasCannotReferenceItself_returnType() {
+  test_typeAliasCannotReferenceItself_returnType() async {
     Source source = addSource("typedef A A();");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
     verify([source]);
   }
 
-  void test_typeAliasCannotReferenceItself_returnType_indirect() {
+  test_typeAliasCannotReferenceItself_returnType_indirect() async {
     Source source = addSource(r'''
 typedef B A();
 typedef A B();''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
       CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF
@@ -6052,15 +6054,15 @@
     verify([source]);
   }
 
-  void test_typeAliasCannotReferenceItself_typeVariableBounds() {
+  test_typeAliasCannotReferenceItself_typeVariableBounds() async {
     Source source = addSource("typedef A<T extends A>();");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
     verify([source]);
   }
 
-  void test_typeArgumentNotMatchingBounds_const() {
+  test_typeArgumentNotMatchingBounds_const() async {
     Source source = addSource(r'''
 class A {}
 class B {}
@@ -6068,35 +6070,35 @@
   const G();
 }
 f() { return const G<B>(); }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
     verify([source]);
   }
 
-  void test_undefinedClass_const() {
+  test_undefinedClass_const() async {
     Source source = addSource(r'''
 f() {
   return const A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.UNDEFINED_CLASS]);
     verify([source]);
   }
 
-  void test_undefinedConstructorInInitializer_explicit_named() {
+  test_undefinedConstructorInInitializer_explicit_named() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {
   B() : super.named();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER]);
     // no verify(), "super.named()" is not resolved
   }
 
-  void test_undefinedConstructorInInitializer_explicit_unnamed() {
+  test_undefinedConstructorInInitializer_explicit_unnamed() async {
     Source source = addSource(r'''
 class A {
   A.named() {}
@@ -6104,13 +6106,13 @@
 class B extends A {
   B() : super();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
     verify([source]);
   }
 
-  void test_undefinedConstructorInInitializer_implicit() {
+  test_undefinedConstructorInInitializer_implicit() async {
     Source source = addSource(r'''
 class A {
   A.named() {}
@@ -6118,13 +6120,13 @@
 class B extends A {
   B();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
     verify([source]);
   }
 
-  void test_undefinedNamedParameter() {
+  test_undefinedNamedParameter() async {
     Source source = addSource(r'''
 class A {
   const A();
@@ -6132,41 +6134,42 @@
 main() {
   const A(p: 0);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER]);
     // no verify(), 'p' is not resolved
   }
 
-  void test_uriDoesNotExist_export() {
+  test_uriDoesNotExist_export() async {
     Source source = addSource("export 'unknown.dart';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.URI_DOES_NOT_EXIST]);
   }
 
-  void test_uriDoesNotExist_import() {
+  test_uriDoesNotExist_import() async {
     Source source = addSource("import 'unknown.dart';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.URI_DOES_NOT_EXIST]);
   }
 
-  void test_uriDoesNotExist_import_appears_after_deleting_target() {
+  test_uriDoesNotExist_import_appears_after_deleting_target() async {
     Source test = addSource("import 'target.dart';");
     Source target = addNamedSource("/target.dart", "");
-    computeLibrarySourceErrors(test);
+    await computeAnalysisResult(test);
     assertErrors(test, [HintCode.UNUSED_IMPORT]);
 
     // Remove the overlay in the same way as AnalysisServer.
+    resourceProvider.deleteFile(resourceProvider.convertPath('/target.dart'));
     analysisContext2.setContents(target, null);
     ChangeSet changeSet = new ChangeSet()..removedSource(target);
     analysisContext2.applyChanges(changeSet);
 
-    computeLibrarySourceErrors(test);
+    await computeAnalysisResult(test);
     assertErrors(test, [CompileTimeErrorCode.URI_DOES_NOT_EXIST]);
   }
 
-  void test_uriDoesNotExist_import_disappears_when_fixed() {
+  test_uriDoesNotExist_import_disappears_when_fixed() async {
     Source source = addSource("import 'target.dart';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.URI_DOES_NOT_EXIST]);
 
     // Check that the file is represented as missing.
@@ -6181,21 +6184,21 @@
       ..handleContentsChanged(target, null, "", true);
 
     // Make sure the error goes away.
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_IMPORT]);
   }
 
-  void test_uriDoesNotExist_part() {
+  test_uriDoesNotExist_part() async {
     Source source = addSource(r'''
 library lib;
 part 'unknown.dart';''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.URI_DOES_NOT_EXIST]);
   }
 
-  void test_uriWithInterpolation_constant() {
+  test_uriWithInterpolation_constant() async {
     Source source = addSource("import 'stuff_\$platform.dart';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.URI_WITH_INTERPOLATION,
       StaticWarningCode.UNDEFINED_IDENTIFIER
@@ -6204,179 +6207,182 @@
     // URI: 'stuff_$platform.dart'
   }
 
-  void test_uriWithInterpolation_nonConstant() {
+  test_uriWithInterpolation_nonConstant() async {
     Source source = addSource(r'''
 library lib;
 part '${'a'}.dart';''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.URI_WITH_INTERPOLATION]);
     // We cannot verify resolution with an unresolvable URI: '${'a'}.dart'
   }
 
-  void test_wrongNumberOfParametersForOperator1() {
-    _check_wrongNumberOfParametersForOperator1("<");
-    _check_wrongNumberOfParametersForOperator1(">");
-    _check_wrongNumberOfParametersForOperator1("<=");
-    _check_wrongNumberOfParametersForOperator1(">=");
-    _check_wrongNumberOfParametersForOperator1("+");
-    _check_wrongNumberOfParametersForOperator1("/");
-    _check_wrongNumberOfParametersForOperator1("~/");
-    _check_wrongNumberOfParametersForOperator1("*");
-    _check_wrongNumberOfParametersForOperator1("%");
-    _check_wrongNumberOfParametersForOperator1("|");
-    _check_wrongNumberOfParametersForOperator1("^");
-    _check_wrongNumberOfParametersForOperator1("&");
-    _check_wrongNumberOfParametersForOperator1("<<");
-    _check_wrongNumberOfParametersForOperator1(">>");
-    _check_wrongNumberOfParametersForOperator1("[]");
+  test_wrongNumberOfParametersForOperator1() async {
+    await _check_wrongNumberOfParametersForOperator1("<");
+    await _check_wrongNumberOfParametersForOperator1(">");
+    await _check_wrongNumberOfParametersForOperator1("<=");
+    await _check_wrongNumberOfParametersForOperator1(">=");
+    await _check_wrongNumberOfParametersForOperator1("+");
+    await _check_wrongNumberOfParametersForOperator1("/");
+    await _check_wrongNumberOfParametersForOperator1("~/");
+    await _check_wrongNumberOfParametersForOperator1("*");
+    await _check_wrongNumberOfParametersForOperator1("%");
+    await _check_wrongNumberOfParametersForOperator1("|");
+    await _check_wrongNumberOfParametersForOperator1("^");
+    await _check_wrongNumberOfParametersForOperator1("&");
+    await _check_wrongNumberOfParametersForOperator1("<<");
+    await _check_wrongNumberOfParametersForOperator1(">>");
+    await _check_wrongNumberOfParametersForOperator1("[]");
   }
 
-  void test_wrongNumberOfParametersForOperator_minus() {
+  test_wrongNumberOfParametersForOperator_minus() async {
     Source source = addSource(r'''
 class A {
   operator -(a, b) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS]);
     verify([source]);
     reset();
   }
 
-  void test_wrongNumberOfParametersForOperator_tilde() {
-    _check_wrongNumberOfParametersForOperator("~", "a");
-    _check_wrongNumberOfParametersForOperator("~", "a, b");
+  test_wrongNumberOfParametersForOperator_tilde() async {
+    await _check_wrongNumberOfParametersForOperator("~", "a");
+    await _check_wrongNumberOfParametersForOperator("~", "a, b");
   }
 
-  void test_wrongNumberOfParametersForSetter_function_named() {
+  test_wrongNumberOfParametersForSetter_function_named() async {
     Source source = addSource("set x({p}) {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
     verify([source]);
   }
 
-  void test_wrongNumberOfParametersForSetter_function_optional() {
+  test_wrongNumberOfParametersForSetter_function_optional() async {
     Source source = addSource("set x([p]) {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
     verify([source]);
   }
 
-  void test_wrongNumberOfParametersForSetter_function_tooFew() {
+  test_wrongNumberOfParametersForSetter_function_tooFew() async {
     Source source = addSource("set x() {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
     verify([source]);
   }
 
-  void test_wrongNumberOfParametersForSetter_function_tooMany() {
+  test_wrongNumberOfParametersForSetter_function_tooMany() async {
     Source source = addSource("set x(a, b) {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
     verify([source]);
   }
 
-  void test_wrongNumberOfParametersForSetter_method_named() {
+  test_wrongNumberOfParametersForSetter_method_named() async {
     Source source = addSource(r'''
 class A {
   set x({p}) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
     verify([source]);
   }
 
-  void test_wrongNumberOfParametersForSetter_method_optional() {
+  test_wrongNumberOfParametersForSetter_method_optional() async {
     Source source = addSource(r'''
 class A {
   set x([p]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
     verify([source]);
   }
 
-  void test_wrongNumberOfParametersForSetter_method_tooFew() {
+  test_wrongNumberOfParametersForSetter_method_tooFew() async {
     Source source = addSource(r'''
 class A {
   set x() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
     verify([source]);
   }
 
-  void test_wrongNumberOfParametersForSetter_method_tooMany() {
+  test_wrongNumberOfParametersForSetter_method_tooMany() async {
     Source source = addSource(r'''
 class A {
   set x(a, b) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
     verify([source]);
   }
 
-  void test_yield_used_as_identifier_in_async_method() {
+  test_yield_used_as_identifier_in_async_method() async {
     Source source = addSource('''
 f() async {
   var yield = 1;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_yield_used_as_identifier_in_async_star_method() {
+  test_yield_used_as_identifier_in_async_star_method() async {
     Source source = addSource('''
 f() async* {
   var yield = 1;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void test_yield_used_as_identifier_in_sync_star_method() {
+  test_yield_used_as_identifier_in_sync_star_method() async {
     Source source = addSource('''
 f() sync* {
   var yield = 1;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
     verify([source]);
   }
 
-  void _check_constEvalThrowsException_binary_null(String expr, bool resolved) {
+  Future<Null> _check_constEvalThrowsException_binary_null(
+      String expr, bool resolved) async {
     Source source = addSource("const C = $expr;");
-    computeLibrarySourceErrors(source);
     if (resolved) {
+      await computeAnalysisResult(source);
       assertErrors(source, [CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION]);
       verify([source]);
     } else {
+      await computeAnalysisResult(source);
       assertErrors(source, [CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION]);
       // no verify(), 'null x' is not resolved
     }
     reset();
   }
 
-  void _check_constEvalTypeBool_withParameter_binary(String expr) {
+  Future<Null> _check_constEvalTypeBool_withParameter_binary(
+      String expr) async {
     Source source = addSource('''
 class A {
   final a;
   const A(bool p) : a = $expr;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
       StaticTypeWarningCode.NON_BOOL_OPERAND
@@ -6385,13 +6391,13 @@
     reset();
   }
 
-  void _check_constEvalTypeInt_withParameter_binary(String expr) {
+  Future<Null> _check_constEvalTypeInt_withParameter_binary(String expr) async {
     Source source = addSource('''
 class A {
   final a;
   const A(int p) : a = $expr;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_EVAL_TYPE_INT,
       StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
@@ -6400,13 +6406,13 @@
     reset();
   }
 
-  void _check_constEvalTypeNum_withParameter_binary(String expr) {
+  Future<Null> _check_constEvalTypeNum_withParameter_binary(String expr) async {
     Source source = addSource('''
 class A {
   final a;
   const A(num p) : a = $expr;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.CONST_EVAL_TYPE_NUM,
       StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
@@ -6415,21 +6421,21 @@
     reset();
   }
 
-  void _check_wrongNumberOfParametersForOperator(
-      String name, String parameters) {
+  Future<Null> _check_wrongNumberOfParametersForOperator(
+      String name, String parameters) async {
     Source source = addSource('''
 class A {
   operator $name($parameters) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR]);
     verify([source]);
     reset();
   }
 
-  void _check_wrongNumberOfParametersForOperator1(String name) {
-    _check_wrongNumberOfParametersForOperator(name, "");
-    _check_wrongNumberOfParametersForOperator(name, "a, b");
+  Future<Null> _check_wrongNumberOfParametersForOperator1(String name) async {
+    await _check_wrongNumberOfParametersForOperator(name, "");
+    await _check_wrongNumberOfParametersForOperator(name, "a, b");
   }
 }
diff --git a/pkg/analyzer/test/generated/declaration_resolver_test.dart b/pkg/analyzer/test/generated/declaration_resolver_test.dart
index eeaf82d..9ecac6a 100644
--- a/pkg/analyzer/test/generated/declaration_resolver_test.dart
+++ b/pkg/analyzer/test/generated/declaration_resolver_test.dart
@@ -4,6 +4,8 @@
 
 library engine.declaration_resolver_test;
 
+import 'dart:async';
+
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
@@ -59,50 +61,50 @@
     }
   }
 
-  void setupCode(String code) {
+  Future<Null> setupCode(String code) async {
     this.code = code;
-    unit = resolveSource(code + ' const a = null;');
+    unit = await resolveSource(code + ' const a = null;');
     unit2 = _cloneResolveUnit(unit);
   }
 
-  void test_metadata_classDeclaration() {
-    setupCode('@a class C {}');
+  test_metadata_classDeclaration() async {
+    await setupCode('@a class C {}');
     checkMetadata('C');
   }
 
-  void test_metadata_classTypeAlias() {
-    setupCode('@a class C = D with E; class D {} class E {}');
+  test_metadata_classTypeAlias() async {
+    await setupCode('@a class C = D with E; class D {} class E {}');
     checkMetadata('C');
   }
 
-  void test_metadata_constructorDeclaration_named() {
-    setupCode('class C { @a C.x(); }');
+  test_metadata_constructorDeclaration_named() async {
+    await setupCode('class C { @a C.x(); }');
     checkMetadata('x');
   }
 
-  void test_metadata_constructorDeclaration_unnamed() {
-    setupCode('class C { @a C(); }');
+  test_metadata_constructorDeclaration_unnamed() async {
+    await setupCode('class C { @a C(); }');
     checkMetadata('C()');
   }
 
-  void test_metadata_declaredIdentifier() {
-    setupCode('f(x, y) { for (@a var x in y) {} }');
+  test_metadata_declaredIdentifier() async {
+    await setupCode('f(x, y) { for (@a var x in y) {} }');
     checkMetadata('var', expectDifferent: true);
   }
 
-  void test_metadata_enumDeclaration() {
-    setupCode('@a enum E { v }');
+  test_metadata_enumDeclaration() async {
+    await setupCode('@a enum E { v }');
     checkMetadata('E');
   }
 
-  void test_metadata_exportDirective() {
+  test_metadata_exportDirective() async {
     addNamedSource('/foo.dart', 'class C {}');
-    setupCode('@a export "foo.dart";');
+    await setupCode('@a export "foo.dart";');
     checkMetadata('export');
   }
 
-  void test_metadata_exportDirective_resynthesized() {
-    CompilationUnit unit = resolveSource(r'''
+  test_metadata_exportDirective_resynthesized() async {
+    CompilationUnit unit = await resolveSource(r'''
 @a
 export "dart:async";
 
@@ -128,58 +130,58 @@
     expect(unit.directives[1].metadata.single.name.name, 'b');
   }
 
-  void test_metadata_fieldDeclaration() {
-    setupCode('class C { @a int x; }');
+  test_metadata_fieldDeclaration() async {
+    await setupCode('class C { @a int x; }');
     checkMetadata('x');
   }
 
-  void test_metadata_fieldFormalParameter() {
-    setupCode('class C { var x; C(@a this.x); }');
+  test_metadata_fieldFormalParameter() async {
+    await setupCode('class C { var x; C(@a this.x); }');
     checkMetadata('this');
   }
 
-  void test_metadata_fieldFormalParameter_withDefault() {
-    setupCode('class C { var x; C([@a this.x = null]); }');
+  test_metadata_fieldFormalParameter_withDefault() async {
+    await setupCode('class C { var x; C([@a this.x = null]); }');
     checkMetadata('this');
   }
 
-  void test_metadata_functionDeclaration_function() {
-    setupCode('@a f() {}');
+  test_metadata_functionDeclaration_function() async {
+    await setupCode('@a f() {}');
     checkMetadata('f');
   }
 
-  void test_metadata_functionDeclaration_getter() {
-    setupCode('@a get f() => null;');
+  test_metadata_functionDeclaration_getter() async {
+    await setupCode('@a get f() => null;');
     checkMetadata('f');
   }
 
-  void test_metadata_functionDeclaration_setter() {
-    setupCode('@a set f(value) {}');
+  test_metadata_functionDeclaration_setter() async {
+    await setupCode('@a set f(value) {}');
     checkMetadata('f');
   }
 
-  void test_metadata_functionTypeAlias() {
-    setupCode('@a typedef F();');
+  test_metadata_functionTypeAlias() async {
+    await setupCode('@a typedef F();');
     checkMetadata('F');
   }
 
-  void test_metadata_functionTypedFormalParameter() {
-    setupCode('f(@a g()) {}');
+  test_metadata_functionTypedFormalParameter() async {
+    await setupCode('f(@a g()) {}');
     checkMetadata('g');
   }
 
-  void test_metadata_functionTypedFormalParameter_withDefault() {
-    setupCode('f([@a g() = null]) {}');
+  test_metadata_functionTypedFormalParameter_withDefault() async {
+    await setupCode('f([@a g() = null]) {}');
     checkMetadata('g');
   }
 
-  void test_metadata_importDirective() {
+  test_metadata_importDirective() async {
     addNamedSource('/foo.dart', 'class C {}');
-    setupCode('@a import "foo.dart";');
+    await setupCode('@a import "foo.dart";');
     checkMetadata('import');
   }
 
-  void test_metadata_importDirective_partiallyResolved() {
+  test_metadata_importDirective_partiallyResolved() async {
     addNamedSource('/foo.dart', 'class C {}');
     this.code = 'const a = null; @a import "foo.dart";';
     Source source = addNamedSource('/test.dart', code);
@@ -190,8 +192,8 @@
     checkMetadata('import');
   }
 
-  void test_metadata_importDirective_resynthesized() {
-    CompilationUnit unit = resolveSource(r'''
+  test_metadata_importDirective_resynthesized() async {
+    CompilationUnit unit = await resolveSource(r'''
 @a
 import "dart:async";
 
@@ -217,13 +219,14 @@
     expect(unit.directives[1].metadata.single.name.name, 'b');
   }
 
-  void test_metadata_libraryDirective() {
-    setupCode('@a library L;');
+  test_metadata_libraryDirective() async {
+    await setupCode('@a library L;');
     checkMetadata('L');
   }
 
-  void test_metadata_libraryDirective_resynthesized() {
-    CompilationUnit unit = resolveSource('@a library L; const a = null;');
+  test_metadata_libraryDirective_resynthesized() async {
+    CompilationUnit unit =
+        await resolveSource('@a library L; const a = null;');
     expect(unit.directives.single.metadata.single.name.name, 'a');
     var unitElement = unit.element as CompilationUnitElementImpl;
     // Damage the unit element - as if "setAnnotations" were not called.
@@ -236,8 +239,8 @@
     expect(clonedUnit.directives.single.metadata.single.name.name, 'a');
   }
 
-  void test_metadata_localFunctionDeclaration() {
-    setupCode('f() { @a g() {} }');
+  test_metadata_localFunctionDeclaration() async {
+    await setupCode('f() { @a g() {} }');
     // Note: metadata on local function declarations is ignored by the
     // analyzer.  TODO(paulberry): is this a bug?
     FunctionDeclaration node = EngineTestCase.findNode(
@@ -245,64 +248,64 @@
     expect((node as FunctionDeclarationImpl).metadata, isEmpty);
   }
 
-  void test_metadata_localVariableDeclaration() {
-    setupCode('f() { @a int x; }');
+  test_metadata_localVariableDeclaration() async {
+    await setupCode('f() { @a int x; }');
     checkMetadata('x', expectDifferent: true);
   }
 
-  void test_metadata_methodDeclaration_getter() {
-    setupCode('class C { @a get m => null; }');
+  test_metadata_methodDeclaration_getter() async {
+    await setupCode('class C { @a get m => null; }');
     checkMetadata('m');
   }
 
-  void test_metadata_methodDeclaration_method() {
-    setupCode('class C { @a m() {} }');
+  test_metadata_methodDeclaration_method() async {
+    await setupCode('class C { @a m() {} }');
     checkMetadata('m');
   }
 
-  void test_metadata_methodDeclaration_setter() {
-    setupCode('class C { @a set m(value) {} }');
+  test_metadata_methodDeclaration_setter() async {
+    await setupCode('class C { @a set m(value) {} }');
     checkMetadata('m');
   }
 
-  void test_metadata_partDirective() {
+  test_metadata_partDirective() async {
     addNamedSource('/foo.dart', 'part of L;');
-    setupCode('library L; @a part "foo.dart";');
+    await setupCode('library L; @a part "foo.dart";');
     checkMetadata('part');
   }
 
-  void test_metadata_simpleFormalParameter() {
-    setupCode('f(@a x) {}) {}');
+  test_metadata_simpleFormalParameter() async {
+    await setupCode('f(@a x) {}) {}');
     checkMetadata('x');
   }
 
-  void test_metadata_simpleFormalParameter_withDefault() {
-    setupCode('f([@a x = null]) {}');
+  test_metadata_simpleFormalParameter_withDefault() async {
+    await setupCode('f([@a x = null]) {}');
     checkMetadata('x');
   }
 
-  void test_metadata_topLevelVariableDeclaration() {
-    setupCode('@a int x;');
+  test_metadata_topLevelVariableDeclaration() async {
+    await setupCode('@a int x;');
     checkMetadata('x');
   }
 
-  void test_metadata_typeParameter_ofClass() {
-    setupCode('class C<@a T> {}');
+  test_metadata_typeParameter_ofClass() async {
+    await setupCode('class C<@a T> {}');
     checkMetadata('T');
   }
 
-  void test_metadata_typeParameter_ofClassTypeAlias() {
-    setupCode('class C<@a T> = D with E; class D {} class E {}');
+  test_metadata_typeParameter_ofClassTypeAlias() async {
+    await setupCode('class C<@a T> = D with E; class D {} class E {}');
     checkMetadata('T');
   }
 
-  void test_metadata_typeParameter_ofFunction() {
-    setupCode('f<@a T>() {}');
+  test_metadata_typeParameter_ofFunction() async {
+    await setupCode('f<@a T>() {}');
     checkMetadata('T');
   }
 
-  void test_metadata_typeParameter_ofTypedef() {
-    setupCode('typedef F<@a T>();');
+  test_metadata_typeParameter_ofTypedef() async {
+    await setupCode('typedef F<@a T>();');
     checkMetadata('T');
   }
 
@@ -330,7 +333,7 @@
     super.setUp();
   }
 
-  void test_closure_inside_catch_block() {
+  test_closure_inside_catch_block() async {
     String code = '''
 f() {
   try {
@@ -339,13 +342,13 @@
   }
 }
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     // re-resolve
     _cloneResolveUnit(unit);
     // no other validations than built into DeclarationResolver
   }
 
-  void test_closure_inside_labeled_statement() {
+  test_closure_inside_labeled_statement() async {
     String code = '''
 f(b) {
   foo: while (true) {
@@ -356,13 +359,13 @@
   }
 }
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     // re-resolve
     _cloneResolveUnit(unit);
     // no other validations than built into DeclarationResolver
   }
 
-  void test_closure_inside_switch_case() {
+  test_closure_inside_switch_case() async {
     String code = '''
 void f(k, m) {
   switch (k) {
@@ -372,13 +375,13 @@
   }
 }
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     // re-resolve
     _cloneResolveUnit(unit);
     // no other validations than built into DeclarationResolver
   }
 
-  void test_closure_inside_switch_default() {
+  test_closure_inside_switch_default() async {
     String code = '''
 void f(k, m) {
   switch (k) {
@@ -388,13 +391,13 @@
   }
 }
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     // re-resolve
     _cloneResolveUnit(unit);
     // no other validations than built into DeclarationResolver
   }
 
-  void test_enumConstant_partiallyResolved() {
+  test_enumConstant_partiallyResolved() async {
     String code = r'''
 enum Fruit {apple, pear}
 ''';
@@ -406,11 +409,11 @@
     _cloneResolveUnit(unit);
   }
 
-  void test_functionDeclaration_getter() {
+  test_functionDeclaration_getter() async {
     String code = r'''
 int get zzz => 42;
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     PropertyAccessorElement getterElement =
         _findSimpleIdentifier(unit, code, 'zzz =>').staticElement;
     expect(getterElement.isGetter, isTrue);
@@ -420,11 +423,11 @@
     expect(getterName.staticElement, same(getterElement));
   }
 
-  void test_functionDeclaration_setter() {
+  test_functionDeclaration_setter() async {
     String code = r'''
 void set zzz(_) {}
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     PropertyAccessorElement setterElement =
         _findSimpleIdentifier(unit, code, 'zzz(_)').staticElement;
     expect(setterElement.isSetter, isTrue);
@@ -434,7 +437,7 @@
     expect(getterName.staticElement, same(setterElement));
   }
 
-  void test_invalid_functionDeclaration_getter_inFunction() {
+  test_invalid_functionDeclaration_getter_inFunction() async {
     String code = r'''
 var v = (() {
   main() {
@@ -442,7 +445,7 @@
   }
 });
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     FunctionElement getterElement =
         _findSimpleIdentifier(unit, code, 'zzz =>').staticElement;
     // re-resolve
@@ -451,7 +454,7 @@
     expect(getterName.staticElement, same(getterElement));
   }
 
-  void test_invalid_functionDeclaration_setter_inFunction() {
+  test_invalid_functionDeclaration_setter_inFunction() async {
     String code = r'''
 var v = (() {
   main() {
@@ -459,7 +462,7 @@
   }
 });
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     FunctionElement setterElement =
         _findSimpleIdentifier(unit, code, 'zzz(x)').staticElement;
     // re-resolve
@@ -468,66 +471,66 @@
     expect(setterName.staticElement, same(setterElement));
   }
 
-  void test_visitExportDirective_notExistingSource() {
+  test_visitExportDirective_notExistingSource() async {
     String code = r'''
 export 'foo.dart';
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     // re-resolve
     _cloneResolveUnit(unit);
     // no other validations than built into DeclarationResolver
   }
 
-  void test_visitExportDirective_unresolvedUri() {
+  test_visitExportDirective_unresolvedUri() async {
     String code = r'''
 export 'package:foo/bar.dart';
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     // re-resolve
     _cloneResolveUnit(unit);
     // no other validations than built into DeclarationResolver
   }
 
-  void test_visitFunctionExpression() {
+  test_visitFunctionExpression() async {
     String code = r'''
 main(List<String> items) {
   items.forEach((item) {});
 }
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     // re-resolve
     _cloneResolveUnit(unit);
     // no other validations than built into DeclarationResolver
   }
 
-  void test_visitImportDirective_notExistingSource() {
+  test_visitImportDirective_notExistingSource() async {
     String code = r'''
 import 'foo.dart';
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     // re-resolve
     _cloneResolveUnit(unit);
     // no other validations than built into DeclarationResolver
   }
 
-  void test_visitImportDirective_unresolvedUri() {
+  test_visitImportDirective_unresolvedUri() async {
     String code = r'''
 import 'package:foo/bar.dart';
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     // re-resolve
     _cloneResolveUnit(unit);
     // no other validations than built into DeclarationResolver
   }
 
-  void test_visitMethodDeclaration_getter_duplicate() {
+  test_visitMethodDeclaration_getter_duplicate() async {
     String code = r'''
 class C {
   int get zzz => 1;
   String get zzz => null;
 }
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     PropertyAccessorElement firstElement =
         _findSimpleIdentifier(unit, code, 'zzz => 1').staticElement;
     PropertyAccessorElement secondElement =
@@ -541,7 +544,7 @@
     expect(secondName.staticElement, same(secondElement));
   }
 
-  void test_visitMethodDeclaration_getterSetter() {
+  test_visitMethodDeclaration_getterSetter() async {
     String code = r'''
 class C {
   int _field = 0;
@@ -549,7 +552,7 @@
   void set field(value) {_field = value;}
 }
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     FieldElement getterElement =
         _findSimpleIdentifier(unit, code, 'field =').staticElement;
     PropertyAccessorElement setterElement =
@@ -562,14 +565,14 @@
     expect(setterName.staticElement, same(setterElement));
   }
 
-  void test_visitMethodDeclaration_method_duplicate() {
+  test_visitMethodDeclaration_method_duplicate() async {
     String code = r'''
 class C {
   void zzz(x) {}
   void zzz(y) {}
 }
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     MethodElement firstElement =
         _findSimpleIdentifier(unit, code, 'zzz(x)').staticElement;
     MethodElement secondElement =
@@ -582,7 +585,7 @@
     expect(secondName.staticElement, same(secondElement));
   }
 
-  void test_visitMethodDeclaration_setter_duplicate() {
+  test_visitMethodDeclaration_setter_duplicate() async {
     // https://github.com/dart-lang/sdk/issues/25601
     String code = r'''
 class C {
@@ -590,7 +593,7 @@
   set zzz(y) {}
 }
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     PropertyAccessorElement firstElement =
         _findSimpleIdentifier(unit, code, 'zzz(x)').staticElement;
     PropertyAccessorElement secondElement =
@@ -603,24 +606,24 @@
     expect(secondName.staticElement, same(secondElement));
   }
 
-  void test_visitMethodDeclaration_unaryMinus() {
+  test_visitMethodDeclaration_unaryMinus() async {
     String code = r'''
 class C {
   C operator -() => null;
   C operator -(C other) => null;
 }
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     // re-resolve
     _cloneResolveUnit(unit);
     // no other validations than built into DeclarationResolver
   }
 
-  void test_visitPartDirective_notExistingSource() {
+  test_visitPartDirective_notExistingSource() async {
     String code = r'''
 part 'foo.bar';
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     // re-resolve
     _cloneResolveUnit(unit);
     // no other validations than built into DeclarationResolver
@@ -634,14 +637,14 @@
 class StrongModeDeclarationResolverTest extends ResolverTestCase {
   @override
   void setUp() {
-    resetWithOptions(new AnalysisOptionsImpl()..strongMode = true);
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
   }
 
-  void test_genericFunction_typeParameter() {
+  test_genericFunction_typeParameter() async {
     String code = r'''
 /*=T*/ max/*<T>*/(/*=T*/ x, /*=T*/ y) => null;
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     FunctionDeclaration node = _findSimpleIdentifier(unit, code, 'max').parent;
     TypeParameter t = node.functionExpression.typeParameters.typeParameters[0];
 
@@ -659,13 +662,13 @@
     expect(t.element, same(tElement));
   }
 
-  void test_genericMethod_typeParameter() {
+  test_genericMethod_typeParameter() async {
     String code = r'''
 class C {
   /*=T*/ max/*<T>*/(/*=T*/ x, /*=T*/ y) => null;
 }
 ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     MethodDeclaration node = _findSimpleIdentifier(unit, code, 'max').parent;
     TypeParameter t = node.typeParameters.typeParameters[0];
 
diff --git a/pkg/analyzer/test/generated/element_resolver_test.dart b/pkg/analyzer/test/generated/element_resolver_test.dart
index 277a2c7..26c6ab0 100644
--- a/pkg/analyzer/test/generated/element_resolver_test.dart
+++ b/pkg/analyzer/test/generated/element_resolver_test.dart
@@ -4,9 +4,11 @@
 
 library analyzer.test.generated.element_resolver_test;
 
+import 'dart:async';
+
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/standard_ast_factory.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -36,7 +38,7 @@
 
 @reflectiveTest
 class ElementResolverCodeTest extends ResolverTestCase {
-  void test_annotation_class_namedConstructor() {
+  test_annotation_class_namedConstructor() async {
     addNamedSource(
         '/a.dart',
         r'''
@@ -44,7 +46,7 @@
   const A.named();
 }
 ''');
-    _validateAnnotation('', '@A.named()', (SimpleIdentifier name1,
+    await _validateAnnotation('', '@A.named()', (SimpleIdentifier name1,
         SimpleIdentifier name2,
         SimpleIdentifier name3,
         Element annotationElement) {
@@ -68,7 +70,7 @@
     });
   }
 
-  void test_annotation_class_prefixed_namedConstructor() {
+  test_annotation_class_prefixed_namedConstructor() async {
     addNamedSource(
         '/a.dart',
         r'''
@@ -76,7 +78,7 @@
   const A.named();
 }
 ''');
-    _validateAnnotation('as p', '@p.A.named()', (SimpleIdentifier name1,
+    await _validateAnnotation('as p', '@p.A.named()', (SimpleIdentifier name1,
         SimpleIdentifier name2,
         SimpleIdentifier name3,
         Element annotationElement) {
@@ -102,7 +104,7 @@
     });
   }
 
-  void test_annotation_class_prefixed_staticConstField() {
+  test_annotation_class_prefixed_staticConstField() async {
     addNamedSource(
         '/a.dart',
         r'''
@@ -110,7 +112,7 @@
   static const V = 0;
 }
 ''');
-    _validateAnnotation('as p', '@p.A.V', (SimpleIdentifier name1,
+    await _validateAnnotation('as p', '@p.A.V', (SimpleIdentifier name1,
         SimpleIdentifier name2,
         SimpleIdentifier name3,
         Element annotationElement) {
@@ -134,7 +136,7 @@
     });
   }
 
-  void test_annotation_class_prefixed_unnamedConstructor() {
+  test_annotation_class_prefixed_unnamedConstructor() async {
     addNamedSource(
         '/a.dart',
         r'''
@@ -142,7 +144,7 @@
   const A();
 }
 ''');
-    _validateAnnotation('as p', '@p.A', (SimpleIdentifier name1,
+    await _validateAnnotation('as p', '@p.A', (SimpleIdentifier name1,
         SimpleIdentifier name2,
         SimpleIdentifier name3,
         Element annotationElement) {
@@ -164,7 +166,7 @@
     });
   }
 
-  void test_annotation_class_staticConstField() {
+  test_annotation_class_staticConstField() async {
     addNamedSource(
         '/a.dart',
         r'''
@@ -172,7 +174,7 @@
   static const V = 0;
 }
 ''');
-    _validateAnnotation('', '@A.V', (SimpleIdentifier name1,
+    await _validateAnnotation('', '@A.V', (SimpleIdentifier name1,
         SimpleIdentifier name2,
         SimpleIdentifier name3,
         Element annotationElement) {
@@ -194,7 +196,7 @@
     });
   }
 
-  void test_annotation_class_unnamedConstructor() {
+  test_annotation_class_unnamedConstructor() async {
     addNamedSource(
         '/a.dart',
         r'''
@@ -202,7 +204,7 @@
   const A();
 }
 ''');
-    _validateAnnotation('', '@A', (SimpleIdentifier name1,
+    await _validateAnnotation('', '@A', (SimpleIdentifier name1,
         SimpleIdentifier name2,
         SimpleIdentifier name3,
         Element annotationElement) {
@@ -222,13 +224,13 @@
     });
   }
 
-  void test_annotation_topLevelVariable() {
+  test_annotation_topLevelVariable() async {
     addNamedSource(
         '/a.dart',
         r'''
 const V = 0;
 ''');
-    _validateAnnotation('', '@V', (SimpleIdentifier name1,
+    await _validateAnnotation('', '@V', (SimpleIdentifier name1,
         SimpleIdentifier name2,
         SimpleIdentifier name3,
         Element annotationElement) {
@@ -249,13 +251,13 @@
     });
   }
 
-  void test_annotation_topLevelVariable_prefixed() {
+  test_annotation_topLevelVariable_prefixed() async {
     addNamedSource(
         '/a.dart',
         r'''
 const V = 0;
 ''');
-    _validateAnnotation('as p', '@p.V', (SimpleIdentifier name1,
+    await _validateAnnotation('as p', '@p.V', (SimpleIdentifier name1,
         SimpleIdentifier name2,
         SimpleIdentifier name3,
         Element annotationElement) {
@@ -278,12 +280,12 @@
     });
   }
 
-  void _validateAnnotation(
+  Future<Null> _validateAnnotation(
       String annotationPrefix,
       String annotationText,
       validator(SimpleIdentifier name1, SimpleIdentifier name2,
-          SimpleIdentifier name3, Element annotationElement)) {
-    CompilationUnit unit = resolveSource('''
+          SimpleIdentifier name3, Element annotationElement)) async {
+    CompilationUnit unit = await resolveSource('''
 import 'a.dart' $annotationPrefix;
 $annotationText
 class C {}
@@ -387,7 +389,7 @@
     _resolver = _createResolver();
   }
 
-  void test_lookUpMethodInInterfaces() {
+  test_lookUpMethodInInterfaces() async {
     InterfaceType intType = _typeProvider.intType;
     //
     // abstract class A { int operator[](int index); }
@@ -422,7 +424,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitAssignmentExpression_compound() {
+  test_visitAssignmentExpression_compound() async {
     InterfaceType intType = _typeProvider.intType;
     SimpleIdentifier leftHandSide = AstTestFactory.identifier3("a");
     leftHandSide.staticType = intType;
@@ -434,7 +436,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitAssignmentExpression_simple() {
+  test_visitAssignmentExpression_simple() async {
     AssignmentExpression expression = AstTestFactory.assignmentExpression(
         AstTestFactory.identifier3("x"),
         TokenType.EQ,
@@ -444,7 +446,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitBinaryExpression_bangEq() {
+  test_visitBinaryExpression_bangEq() async {
     // String i;
     // var j;
     // i == j
@@ -464,7 +466,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitBinaryExpression_eq() {
+  test_visitBinaryExpression_eq() async {
     // String i;
     // var j;
     // i == j
@@ -483,7 +485,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitBinaryExpression_plus() {
+  test_visitBinaryExpression_plus() async {
     // num i;
     // var j;
     // i + j
@@ -498,7 +500,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitBinaryExpression_plus_propagatedElement() {
+  test_visitBinaryExpression_plus_propagatedElement() async {
     // var i = 1;
     // var j;
     // i + j
@@ -513,7 +515,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitBreakStatement_withLabel() {
+  test_visitBreakStatement_withLabel() async {
     // loop: while (true) {
     //   break loop;
     // }
@@ -530,13 +532,13 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitBreakStatement_withoutLabel() {
+  test_visitBreakStatement_withoutLabel() async {
     BreakStatement statement = AstTestFactory.breakStatement();
     _resolveStatement(statement, null, null);
     _listener.assertNoErrors();
   }
 
-  void test_visitCommentReference_prefixedIdentifier_class_getter() {
+  test_visitCommentReference_prefixedIdentifier_class_getter() async {
     ClassElementImpl classA = ElementFactory.classElement2("A");
     // set accessors
     String propName = "p";
@@ -559,7 +561,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitCommentReference_prefixedIdentifier_class_method() {
+  test_visitCommentReference_prefixedIdentifier_class_method() async {
     ClassElementImpl classA = ElementFactory.classElement2("A");
     // set method
     MethodElement method =
@@ -579,7 +581,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitCommentReference_prefixedIdentifier_class_operator() {
+  test_visitCommentReference_prefixedIdentifier_class_operator() async {
     ClassElementImpl classA = ElementFactory.classElement2("A");
     // set method
     MethodElement method =
@@ -599,7 +601,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitConstructorName_named() {
+  test_visitConstructorName_named() async {
     ClassElementImpl classA = ElementFactory.classElement2("A");
     String constructorName = "a";
     ConstructorElement constructor =
@@ -612,7 +614,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitConstructorName_unnamed() {
+  test_visitConstructorName_unnamed() async {
     ClassElementImpl classA = ElementFactory.classElement2("A");
     String constructorName = null;
     ConstructorElement constructor =
@@ -625,7 +627,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitContinueStatement_withLabel() {
+  test_visitContinueStatement_withLabel() async {
     // loop: while (true) {
     //   continue loop;
     // }
@@ -643,13 +645,13 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitContinueStatement_withoutLabel() {
+  test_visitContinueStatement_withoutLabel() async {
     ContinueStatement statement = AstTestFactory.continueStatement();
     _resolveStatement(statement, null, null);
     _listener.assertNoErrors();
   }
 
-  void test_visitEnumDeclaration() {
+  test_visitEnumDeclaration() async {
     CompilationUnitElementImpl compilationUnitElement =
         ElementFactory.compilationUnit('foo.dart');
     EnumElementImpl enumElement =
@@ -670,7 +672,7 @@
     expect(metadata[0].element, annotationNode.element);
   }
 
-  void test_visitExportDirective_noCombinators() {
+  test_visitExportDirective_noCombinators() async {
     ExportDirective directive = AstTestFactory.exportDirective2(null);
     directive.element = ElementFactory
         .exportFor(ElementFactory.library(_definingLibrary.context, "lib"));
@@ -678,7 +680,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitFieldFormalParameter() {
+  test_visitFieldFormalParameter() async {
     String fieldName = "f";
     InterfaceType intType = _typeProvider.intType;
     FieldElementImpl fieldElement =
@@ -697,7 +699,7 @@
         same(intType));
   }
 
-  void test_visitImportDirective_noCombinators_noPrefix() {
+  test_visitImportDirective_noCombinators_noPrefix() async {
     ImportDirective directive = AstTestFactory.importDirective3(null, null);
     directive.element = ElementFactory.importFor(
         ElementFactory.library(_definingLibrary.context, "lib"), null);
@@ -705,7 +707,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitImportDirective_noCombinators_prefix() {
+  test_visitImportDirective_noCombinators_prefix() async {
     String prefixName = "p";
     ImportElement importElement = ElementFactory.importFor(
         ElementFactory.library(_definingLibrary.context, "lib"),
@@ -718,7 +720,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitImportDirective_withCombinators() {
+  test_visitImportDirective_withCombinators() async {
     ShowCombinator combinator = AstTestFactory.showCombinator2(["A", "B", "C"]);
     ImportDirective directive =
         AstTestFactory.importDirective3(null, null, [combinator]);
@@ -747,7 +749,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitIndexExpression_get() {
+  test_visitIndexExpression_get() async {
     ClassElementImpl classA = ElementFactory.classElement2("A");
     InterfaceType intType = _typeProvider.intType;
     MethodElement getter =
@@ -761,7 +763,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitIndexExpression_set() {
+  test_visitIndexExpression_set() async {
     ClassElementImpl classA = ElementFactory.classElement2("A");
     InterfaceType intType = _typeProvider.intType;
     MethodElement setter =
@@ -777,7 +779,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitInstanceCreationExpression_named() {
+  test_visitInstanceCreationExpression_named() async {
     ClassElementImpl classA = ElementFactory.classElement2("A");
     String constructorName = "a";
     ConstructorElement constructor =
@@ -793,7 +795,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitInstanceCreationExpression_unnamed() {
+  test_visitInstanceCreationExpression_unnamed() async {
     ClassElementImpl classA = ElementFactory.classElement2("A");
     String constructorName = null;
     ConstructorElement constructor =
@@ -809,7 +811,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitInstanceCreationExpression_unnamed_namedParameter() {
+  test_visitInstanceCreationExpression_unnamed_namedParameter() async {
     ClassElementImpl classA = ElementFactory.classElement2("A");
     String constructorName = null;
     ConstructorElementImpl constructor =
@@ -836,7 +838,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitMethodInvocation() {
+  test_visitMethodInvocation() async {
     InterfaceType numType = _typeProvider.numType;
     SimpleIdentifier left = AstTestFactory.identifier3("i");
     left.staticType = numType;
@@ -849,7 +851,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitMethodInvocation_namedParameter() {
+  test_visitMethodInvocation_namedParameter() async {
     ClassElementImpl classA = ElementFactory.classElement2("A");
     String methodName = "m";
     String parameterName = "p";
@@ -874,7 +876,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitPostfixExpression() {
+  test_visitPostfixExpression() async {
     InterfaceType numType = _typeProvider.numType;
     SimpleIdentifier operand = AstTestFactory.identifier3("i");
     operand.staticType = numType;
@@ -885,7 +887,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitPrefixedIdentifier_dynamic() {
+  test_visitPrefixedIdentifier_dynamic() async {
     DartType dynamicType = _typeProvider.dynamicType;
     SimpleIdentifier target = AstTestFactory.identifier3("a");
     VariableElementImpl variable = ElementFactory.localVariableElement(target);
@@ -900,7 +902,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitPrefixedIdentifier_nonDynamic() {
+  test_visitPrefixedIdentifier_nonDynamic() async {
     ClassElementImpl classA = ElementFactory.classElement2("A");
     String getterName = "b";
     PropertyAccessorElement getter =
@@ -919,7 +921,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitPrefixedIdentifier_staticClassMember_getter() {
+  test_visitPrefixedIdentifier_staticClassMember_getter() async {
     ClassElementImpl classA = ElementFactory.classElement2("A");
     // set accessors
     String propName = "b";
@@ -941,7 +943,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitPrefixedIdentifier_staticClassMember_method() {
+  test_visitPrefixedIdentifier_staticClassMember_method() async {
     ClassElementImpl classA = ElementFactory.classElement2("A");
     // set methods
     String propName = "m";
@@ -963,7 +965,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitPrefixedIdentifier_staticClassMember_setter() {
+  test_visitPrefixedIdentifier_staticClassMember_setter() async {
     ClassElementImpl classA = ElementFactory.classElement2("A");
     // set accessors
     String propName = "b";
@@ -987,7 +989,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitPrefixExpression() {
+  test_visitPrefixExpression() async {
     InterfaceType numType = _typeProvider.numType;
     SimpleIdentifier operand = AstTestFactory.identifier3("i");
     operand.staticType = numType;
@@ -998,7 +1000,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitPropertyAccess_getter_identifier() {
+  test_visitPropertyAccess_getter_identifier() async {
     ClassElementImpl classA = ElementFactory.classElement2("A");
     String getterName = "b";
     PropertyAccessorElement getter =
@@ -1012,7 +1014,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitPropertyAccess_getter_super() {
+  test_visitPropertyAccess_getter_super() async {
     //
     // class A {
     //  int get b;
@@ -1042,7 +1044,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitPropertyAccess_setter_this() {
+  test_visitPropertyAccess_setter_this() async {
     ClassElementImpl classA = ElementFactory.classElement2("A");
     String setterName = "b";
     PropertyAccessorElement setter =
@@ -1058,7 +1060,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitSimpleIdentifier_classScope() {
+  test_visitSimpleIdentifier_classScope() async {
     InterfaceType doubleType = _typeProvider.doubleType;
     String fieldName = "NAN";
     SimpleIdentifier node = AstTestFactory.identifier3(fieldName);
@@ -1067,7 +1069,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitSimpleIdentifier_dynamic() {
+  test_visitSimpleIdentifier_dynamic() async {
     SimpleIdentifier node = AstTestFactory.identifier3("dynamic");
     _resolveIdentifier(node);
     expect(node.staticElement, same(_typeProvider.dynamicType.element));
@@ -1075,14 +1077,14 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitSimpleIdentifier_lexicalScope() {
+  test_visitSimpleIdentifier_lexicalScope() async {
     SimpleIdentifier node = AstTestFactory.identifier3("i");
     VariableElementImpl element = ElementFactory.localVariableElement(node);
     expect(_resolveIdentifier(node, [element]), same(element));
     _listener.assertNoErrors();
   }
 
-  void test_visitSimpleIdentifier_lexicalScope_field_setter() {
+  test_visitSimpleIdentifier_lexicalScope_field_setter() async {
     InterfaceType intType = _typeProvider.intType;
     ClassElementImpl classA = ElementFactory.classElement2("A");
     String fieldName = "a";
@@ -1101,7 +1103,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitSuperConstructorInvocation() {
+  test_visitSuperConstructorInvocation() async {
     ClassElementImpl superclass = ElementFactory.classElement2("A");
     ConstructorElementImpl superConstructor =
         ElementFactory.constructorElement2(superclass, null);
@@ -1121,7 +1123,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitSuperConstructorInvocation_namedParameter() {
+  test_visitSuperConstructorInvocation_namedParameter() async {
     ClassElementImpl superclass = ElementFactory.classElement2("A");
     ConstructorElementImpl superConstructor =
         ElementFactory.constructorElement2(superclass, null);
diff --git a/pkg/analyzer/test/generated/error_suppression_test.dart b/pkg/analyzer/test/generated/error_suppression_test.dart
index 20a3312..ea353b2 100644
--- a/pkg/analyzer/test/generated/error_suppression_test.dart
+++ b/pkg/analyzer/test/generated/error_suppression_test.dart
@@ -12,187 +12,194 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ErrorSuppressionTest);
+    defineReflectiveTests(ErrorSuppressionTest_Driver);
   });
 }
 
 @reflectiveTest
 class ErrorSuppressionTest extends ResolverTestCase {
-  void test_error_code_mismatch() {
+  test_error_code_mismatch() async {
     Source source = addSource('''
 // ignore: const_initialized_with_non_constant_value
 int x = '';
 const y = x; //CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticTypeWarningCode.INVALID_ASSIGNMENT,
       CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
     ]);
   }
 
-  void test_ignore_first() {
+  test_ignore_first() async {
     Source source = addSource('''
 // ignore: invalid_assignment
 int x = '';
 // ... but no ignore here ...
 const y = x; //CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
   }
 
-  void test_ignore_first_trailing() {
+  test_ignore_first_trailing() async {
     Source source = addSource('''
 int x = ''; // ignore: invalid_assignment
 // ... but no ignore here ...
 const y = x; //CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
   }
 
-  void test_ignore_only_trailing() {
+  test_ignore_only_trailing() async {
     Source source = addSource('''
 int x = ''; // ignore: invalid_assignment
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, []);
   }
 
-  void test_ignore_second() {
+  test_ignore_second() async {
     Source source = addSource('''
 //INVALID_ASSIGNMENT
 int x = '';
 // ignore: const_initialized_with_non_constant_value
 const y = x; //CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_ignore_second_trailing() {
+  test_ignore_second_trailing() async {
     Source source = addSource('''
 //INVALID_ASSIGNMENT
 int x = '';
 const y = x; // ignore: const_initialized_with_non_constant_value
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_ignore_upper_case() {
+  test_ignore_upper_case() async {
     Source source = addSource('''
 int x = ''; // ignore: INVALID_ASSIGNMENT
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, []);
   }
 
-  void test_invalid_error_code() {
+  test_invalid_error_code() async {
     Source source = addSource('''
 // ignore: right_format_wrong_code
 int x = '';
 const y = x; //CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticTypeWarningCode.INVALID_ASSIGNMENT,
       CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
     ]);
   }
 
-  void test_missing_error_codes() {
+  test_missing_error_codes() async {
     Source source = addSource('''
     int x = 3;
 // ignore:
 const String y = x; //INVALID_ASSIGNMENT, CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticTypeWarningCode.INVALID_ASSIGNMENT,
       CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
     ]);
   }
 
-  void test_missing_metadata_suffix() {
+  test_missing_metadata_suffix() async {
     Source source = addSource('''
 // ignore invalid_assignment
 String y = 3; //INVALID_ASSIGNMENT
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_multiple_comments() {
+  test_multiple_comments() async {
     Source source = addSource('''
 int x = ''; //This is the first comment...
 // ignore: const_initialized_with_non_constant_value
 const y = x; //CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_multiple_ignores() {
+  test_multiple_ignores() async {
     Source source = addSource('''
 int x = 3;
 // ignore: invalid_assignment, const_initialized_with_non_constant_value
 const String y = x; //INVALID_ASSIGNMENT, CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, []);
   }
 
-  void test_multiple_ignores_traling() {
+  test_multiple_ignores_traling() async {
     Source source = addSource('''
 int x = 3;
 const String y = x; // ignore: invalid_assignment, const_initialized_with_non_constant_value
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, []);
   }
 
-  void test_multiple_ignores_whitespace_variant_1() {
+  test_multiple_ignores_whitespace_variant_1() async {
     Source source = addSource('''
 int x = 3;
 //ignore:invalid_assignment,const_initialized_with_non_constant_value
 const String y = x; //INVALID_ASSIGNMENT, CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, []);
   }
 
-  void test_multiple_ignores_whitespace_variant_2() {
+  test_multiple_ignores_whitespace_variant_2() async {
     Source source = addSource('''
 int x = 3;
 //ignore: invalid_assignment,const_initialized_with_non_constant_value
 const String y = x; //INVALID_ASSIGNMENT, CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, []);
   }
 
-  void test_multiple_ignores_whitespace_variant_3() {
+  test_multiple_ignores_whitespace_variant_3() async {
     Source source = addSource('''
 int x = 3;
 // ignore: invalid_assignment,const_initialized_with_non_constant_value
 const String y = x; //INVALID_ASSIGNMENT, CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, []);
   }
 
-  void test_no_ignores() {
+  test_no_ignores() async {
     Source source = addSource('''
 int x = '';  //INVALID_ASSIGNMENT
 const y = x; //CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticTypeWarningCode.INVALID_ASSIGNMENT,
       CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
     ]);
   }
 }
+
+@reflectiveTest
+class ErrorSuppressionTest_Driver extends ErrorSuppressionTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analyzer/test/generated/hint_code_driver_test.dart b/pkg/analyzer/test/generated/hint_code_driver_test.dart
new file mode 100644
index 0000000..c7a7758
--- /dev/null
+++ b/pkg/analyzer/test/generated/hint_code_driver_test.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'hint_code_test.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(HintCodeTest_Driver);
+  });
+}
+
+@reflectiveTest
+class HintCodeTest_Driver extends HintCodeTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analyzer/test/generated/hint_code_test.dart b/pkg/analyzer/test/generated/hint_code_test.dart
index 4e5009f..52b0feb 100644
--- a/pkg/analyzer/test/generated/hint_code_test.dart
+++ b/pkg/analyzer/test/generated/hint_code_test.dart
@@ -12,7 +12,6 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import 'analysis_context_factory.dart';
 import 'resolver_test_case.dart';
 
 main() {
@@ -25,8 +24,10 @@
 class HintCodeTest extends ResolverTestCase {
   @override
   void reset() {
-    analysisContext2 = AnalysisContextFactory.contextWithCoreAndPackages({
-      'package:meta/meta.dart': r'''
+    super.resetWith(packages: [
+      [
+        'meta',
+        r'''
 library meta;
 
 const _Factory factory = const _Factory();
@@ -55,17 +56,21 @@
   final String reason;
   const _Required([this.reason]));
 }
-''',
-      'package:js/js.dart': r'''
+'''
+      ],
+      [
+        'js',
+        r'''
 library js;
 class JS {
   const JS([String js]) { }
 }
 '''
-    }, resourceProvider: resourceProvider);
+      ]
+    ]);
   }
 
-  void test_abstractSuperMemberReference_getter() {
+  test_abstractSuperMemberReference_getter() async {
     Source source = addSource(r'''
 abstract class A {
   int get test;
@@ -77,12 +82,12 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]);
     verify([source]);
   }
 
-  void test_abstractSuperMemberReference_method_invocation() {
+  test_abstractSuperMemberReference_method_invocation() async {
     Source source = addSource(r'''
 abstract class A {
   void test();
@@ -93,12 +98,12 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]);
     verify([source]);
   }
 
-  void test_abstractSuperMemberReference_method_reference() {
+  test_abstractSuperMemberReference_method_reference() async {
     Source source = addSource(r'''
 abstract class A {
   void test();
@@ -109,12 +114,12 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]);
     verify([source]);
   }
 
-  void test_abstractSuperMemberReference_setter() {
+  test_abstractSuperMemberReference_setter() async {
     Source source = addSource(r'''
 abstract class A {
   void set test(int v);
@@ -125,12 +130,12 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_functionType() {
+  test_argumentTypeNotAssignable_functionType() async {
     Source source = addSource(r'''
 m() {
   var a = new A();
@@ -139,42 +144,42 @@
 class A {
   n(void f(int i)) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_message() {
+  test_argumentTypeNotAssignable_message() async {
     // The implementation of HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE assumes that
     // StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE has the same message.
     expect(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE.message,
         HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE.message);
   }
 
-  void test_argumentTypeNotAssignable_type() {
+  test_argumentTypeNotAssignable_type() async {
     Source source = addSource(r'''
 m() {
   var i = '';
   n(i);
 }
 n(int i) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_canBeNullAfterNullAware_false_methodInvocation() {
+  test_canBeNullAfterNullAware_false_methodInvocation() async {
     Source source = addSource(r'''
 m(x) {
   x?.a()?.b();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_canBeNullAfterNullAware_false_null() {
+  test_canBeNullAfterNullAware_false_null() async {
     Source source = addSource(r'''
 m(x) {
   x?.a.hashCode;
@@ -185,217 +190,217 @@
   x?.b().toString();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_canBeNullAfterNullAware_false_propertyAccess() {
+  test_canBeNullAfterNullAware_false_propertyAccess() async {
     Source source = addSource(r'''
 m(x) {
   x?.a?.b;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_canBeNullAfterNullAware_methodInvocation() {
+  test_canBeNullAfterNullAware_methodInvocation() async {
     Source source = addSource(r'''
 m(x) {
   x?.a.b();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.CAN_BE_NULL_AFTER_NULL_AWARE]);
     verify([source]);
   }
 
-  void test_canBeNullAfterNullAware_parenthesized() {
+  test_canBeNullAfterNullAware_parenthesized() async {
     Source source = addSource(r'''
 m(x) {
   (x?.a).b;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.CAN_BE_NULL_AFTER_NULL_AWARE]);
     verify([source]);
   }
 
-  void test_canBeNullAfterNullAware_propertyAccess() {
+  test_canBeNullAfterNullAware_propertyAccess() async {
     Source source = addSource(r'''
 m(x) {
   x?.a.b;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.CAN_BE_NULL_AFTER_NULL_AWARE]);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_conditionalElse() {
+  test_deadCode_deadBlock_conditionalElse() async {
     Source source = addSource(r'''
 f() {
   true ? 1 : 2;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_conditionalElse_nested() {
+  test_deadCode_deadBlock_conditionalElse_nested() async {
     // test that a dead else-statement can't generate additional violations
     Source source = addSource(r'''
 f() {
   true ? true : false && false;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_conditionalIf() {
+  test_deadCode_deadBlock_conditionalIf() async {
     Source source = addSource(r'''
 f() {
   false ? 1 : 2;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_conditionalIf_nested() {
+  test_deadCode_deadBlock_conditionalIf_nested() async {
     // test that a dead then-statement can't generate additional violations
     Source source = addSource(r'''
 f() {
   false ? false && false : true;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_else() {
+  test_deadCode_deadBlock_else() async {
     Source source = addSource(r'''
 f() {
   if(true) {} else {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_else_nested() {
+  test_deadCode_deadBlock_else_nested() async {
     // test that a dead else-statement can't generate additional violations
     Source source = addSource(r'''
 f() {
   if(true) {} else {if (false) {}}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_if() {
+  test_deadCode_deadBlock_if() async {
     Source source = addSource(r'''
 f() {
   if(false) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_if_nested() {
+  test_deadCode_deadBlock_if_nested() async {
     // test that a dead then-statement can't generate additional violations
     Source source = addSource(r'''
 f() {
   if(false) {if(false) {}}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_while() {
+  test_deadCode_deadBlock_while() async {
     Source source = addSource(r'''
 f() {
   while(false) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_while_nested() {
+  test_deadCode_deadBlock_while_nested() async {
     // test that a dead while body can't generate additional violations
     Source source = addSource(r'''
 f() {
   while(false) {if(false) {}}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_deadCatch_catchFollowingCatch() {
+  test_deadCode_deadCatch_catchFollowingCatch() async {
     Source source = addSource(r'''
 class A {}
 f() {
   try {} catch (e) {} catch (e) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH]);
     verify([source]);
   }
 
-  void test_deadCode_deadCatch_catchFollowingCatch_nested() {
+  test_deadCode_deadCatch_catchFollowingCatch_nested() async {
     // test that a dead catch clause can't generate additional violations
     Source source = addSource(r'''
 class A {}
 f() {
   try {} catch (e) {} catch (e) {if(false) {}}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH]);
     verify([source]);
   }
 
-  void test_deadCode_deadCatch_catchFollowingCatch_object() {
+  test_deadCode_deadCatch_catchFollowingCatch_object() async {
     Source source = addSource(r'''
 f() {
   try {} on Object catch (e) {} catch (e) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH]);
     verify([source]);
   }
 
-  void test_deadCode_deadCatch_catchFollowingCatch_object_nested() {
+  test_deadCode_deadCatch_catchFollowingCatch_object_nested() async {
     // test that a dead catch clause can't generate additional violations
     Source source = addSource(r'''
 f() {
   try {} on Object catch (e) {} catch (e) {if(false) {}}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH]);
     verify([source]);
   }
 
-  void test_deadCode_deadCatch_onCatchSubtype() {
+  test_deadCode_deadCatch_onCatchSubtype() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {}
 f() {
   try {} on A catch (e) {} on B catch (e) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE_ON_CATCH_SUBTYPE]);
     verify([source]);
   }
 
-  void test_deadCode_deadCatch_onCatchSubtype_nested() {
+  test_deadCode_deadCatch_onCatchSubtype_nested() async {
     // test that a dead catch clause can't generate additional violations
     Source source = addSource(r'''
 class A {}
@@ -403,12 +408,12 @@
 f() {
   try {} on A catch (e) {} on B catch (e) {if(false) {}}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE_ON_CATCH_SUBTYPE]);
     verify([source]);
   }
 
-  void test_deadCode_deadFinalReturnInCase() {
+  test_deadCode_deadFinalReturnInCase() async {
     Source source = addSource(r'''
 f() {
   switch (true) {
@@ -423,12 +428,12 @@
     break;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_deadFinalStatementInCase() {
+  test_deadCode_deadFinalStatementInCase() async {
     Source source = addSource(r'''
 f() {
   switch (true) {
@@ -443,55 +448,55 @@
     break;
   }
 }''');
-    computeLibrarySourceErrors(source);
     // A single dead statement at the end of a switch case that is not a
     // terminating statement will yield two errors.
+    await computeAnalysisResult(source);
     assertErrors(source,
         [HintCode.DEAD_CODE, StaticWarningCode.CASE_BLOCK_NOT_TERMINATED]);
     verify([source]);
   }
 
-  void test_deadCode_deadOperandLHS_and() {
+  test_deadCode_deadOperandLHS_and() async {
     Source source = addSource(r'''
 f() {
   bool b = false && false;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_deadOperandLHS_and_nested() {
+  test_deadCode_deadOperandLHS_and_nested() async {
     Source source = addSource(r'''
 f() {
   bool b = false && (false && false);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_deadOperandLHS_or() {
+  test_deadCode_deadOperandLHS_or() async {
     Source source = addSource(r'''
 f() {
   bool b = true || true;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_deadOperandLHS_or_nested() {
+  test_deadCode_deadOperandLHS_or_nested() async {
     Source source = addSource(r'''
 f() {
   bool b = true || (false && false);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_statementAfterBreak_inDefaultCase() {
+  test_deadCode_statementAfterBreak_inDefaultCase() async {
     Source source = addSource(r'''
 f(v) {
   switch(v) {
@@ -501,12 +506,12 @@
       var a;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_statementAfterBreak_inForEachStatement() {
+  test_deadCode_statementAfterBreak_inForEachStatement() async {
     Source source = addSource(r'''
 f() {
   var list;
@@ -515,12 +520,12 @@
     var a;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_statementAfterBreak_inForStatement() {
+  test_deadCode_statementAfterBreak_inForStatement() async {
     Source source = addSource(r'''
 f() {
   for(;;) {
@@ -528,12 +533,12 @@
     var a;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_statementAfterBreak_inSwitchCase() {
+  test_deadCode_statementAfterBreak_inSwitchCase() async {
     Source source = addSource(r'''
 f(v) {
   switch(v) {
@@ -542,12 +547,12 @@
       var a;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_statementAfterBreak_inWhileStatement() {
+  test_deadCode_statementAfterBreak_inWhileStatement() async {
     Source source = addSource(r'''
 f(v) {
   while(v) {
@@ -555,12 +560,12 @@
     var a;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_statementAfterContinue_inForEachStatement() {
+  test_deadCode_statementAfterContinue_inForEachStatement() async {
     Source source = addSource(r'''
 f() {
   var list;
@@ -569,12 +574,12 @@
     var a;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_statementAfterContinue_inForStatement() {
+  test_deadCode_statementAfterContinue_inForStatement() async {
     Source source = addSource(r'''
 f() {
   for(;;) {
@@ -582,12 +587,12 @@
     var a;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_statementAfterContinue_inWhileStatement() {
+  test_deadCode_statementAfterContinue_inWhileStatement() async {
     Source source = addSource(r'''
 f(v) {
   while(v) {
@@ -595,12 +600,12 @@
     var a;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_statementAfterExitingIf_returns() {
+  test_deadCode_statementAfterExitingIf_returns() async {
     Source source = addSource(r'''
 f() {
   if (1 > 2) {
@@ -610,12 +615,12 @@
   }
   var one = 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_statementAfterRethrow() {
+  test_deadCode_statementAfterRethrow() async {
     Source source = addSource(r'''
 f() {
   try {
@@ -625,24 +630,24 @@
     var two = 2;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_statementAfterReturn_function() {
+  test_deadCode_statementAfterReturn_function() async {
     Source source = addSource(r'''
 f() {
   var one = 1;
   return;
   var two = 2;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_statementAfterReturn_ifStatement() {
+  test_deadCode_statementAfterReturn_ifStatement() async {
     Source source = addSource(r'''
 f(bool b) {
   if(b) {
@@ -651,12 +656,12 @@
     var two = 2;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_statementAfterReturn_method() {
+  test_deadCode_statementAfterReturn_method() async {
     Source source = addSource(r'''
 class A {
   m() {
@@ -665,24 +670,24 @@
     var two = 2;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_statementAfterReturn_nested() {
+  test_deadCode_statementAfterReturn_nested() async {
     Source source = addSource(r'''
 f() {
   var one = 1;
   return;
   if(false) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_statementAfterReturn_twoReturns() {
+  test_deadCode_statementAfterReturn_twoReturns() async {
     Source source = addSource(r'''
 f() {
   var one = 1;
@@ -691,24 +696,24 @@
   return;
   var three = 3;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deadCode_statementAfterThrow() {
+  test_deadCode_statementAfterThrow() async {
     Source source = addSource(r'''
 f() {
   var one = 1;
   throw 'Stop here';
   var two = 2;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_deprecatedAnnotationUse_assignment() {
+  test_deprecatedAnnotationUse_assignment() async {
     Source source = addSource(r'''
 class A {
   @deprecated
@@ -718,12 +723,12 @@
   A b;
   a += b;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]);
     verify([source]);
   }
 
-  void test_deprecatedAnnotationUse_call() {
+  test_deprecatedAnnotationUse_call() async {
     Source source = addSource(r'''
 class A {
   @deprecated
@@ -733,36 +738,36 @@
     a();
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]);
     verify([source]);
   }
 
-  void test_deprecatedAnnotationUse_deprecated() {
+  test_deprecatedAnnotationUse_deprecated() async {
     Source source = addSource(r'''
 class A {
   @deprecated
   m() {}
   n() {m();}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]);
     verify([source]);
   }
 
-  void test_deprecatedAnnotationUse_Deprecated() {
+  test_deprecatedAnnotationUse_Deprecated() async {
     Source source = addSource(r'''
 class A {
   @Deprecated('0.9')
   m() {}
   n() {m();}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]);
     verify([source]);
   }
 
-  void test_deprecatedAnnotationUse_export() {
+  test_deprecatedAnnotationUse_export() async {
     Source source = addSource("export 'deprecated_library.dart';");
     addNamedSource(
         "/deprecated_library.dart",
@@ -770,12 +775,12 @@
 @deprecated
 library deprecated_library;
 class A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]);
     verify([source]);
   }
 
-  void test_deprecatedAnnotationUse_field() {
+  test_deprecatedAnnotationUse_field() async {
     Source source = addSource(r'''
 class A {
   @deprecated
@@ -784,12 +789,12 @@
 f(A a) {
   return a.x;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]);
     verify([source]);
   }
 
-  void test_deprecatedAnnotationUse_getter() {
+  test_deprecatedAnnotationUse_getter() async {
     Source source = addSource(r'''
 class A {
   @deprecated
@@ -798,12 +803,12 @@
 f(A a) {
   return a.m;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]);
     verify([source]);
   }
 
-  void test_deprecatedAnnotationUse_import() {
+  test_deprecatedAnnotationUse_import() async {
     Source source = addSource(r'''
 import 'deprecated_library.dart';
 f(A a) {}''');
@@ -813,12 +818,12 @@
 @deprecated
 library deprecated_library;
 class A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]);
     verify([source]);
   }
 
-  void test_deprecatedAnnotationUse_indexExpression() {
+  test_deprecatedAnnotationUse_indexExpression() async {
     Source source = addSource(r'''
 class A {
   @deprecated
@@ -827,12 +832,12 @@
 f(A a) {
   return a[1];
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]);
     verify([source]);
   }
 
-  void test_deprecatedAnnotationUse_instanceCreation() {
+  test_deprecatedAnnotationUse_instanceCreation() async {
     Source source = addSource(r'''
 class A {
   @deprecated
@@ -841,12 +846,12 @@
 f() {
   A a = new A(1);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]);
     verify([source]);
   }
 
-  void test_deprecatedAnnotationUse_instanceCreation_namedConstructor() {
+  test_deprecatedAnnotationUse_instanceCreation_namedConstructor() async {
     Source source = addSource(r'''
 class A {
   @deprecated
@@ -855,23 +860,23 @@
 f() {
   A a = new A.named(1);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]);
     verify([source]);
   }
 
-  void test_deprecatedAnnotationUse_named() {
+  test_deprecatedAnnotationUse_named() async {
     Source source = addSource(r'''
 class A {
   m({@deprecated int x}) {}
   n() {m(x: 1);}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]);
     verify([source]);
   }
 
-  void test_deprecatedAnnotationUse_operator() {
+  test_deprecatedAnnotationUse_operator() async {
     Source source = addSource(r'''
 class A {
   @deprecated
@@ -881,23 +886,23 @@
   A b;
   return a + b;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]);
     verify([source]);
   }
 
-  void test_deprecatedAnnotationUse_positional() {
+  test_deprecatedAnnotationUse_positional() async {
     Source source = addSource(r'''
 class A {
   m([@deprecated int x]) {}
   n() {m(1);}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]);
     verify([source]);
   }
 
-  void test_deprecatedAnnotationUse_setter() {
+  test_deprecatedAnnotationUse_setter() async {
     Source source = addSource(r'''
 class A {
   @deprecated
@@ -906,12 +911,12 @@
 f(A a) {
   return a.s = 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]);
     verify([source]);
   }
 
-  void test_deprecatedAnnotationUse_superConstructor() {
+  test_deprecatedAnnotationUse_superConstructor() async {
     Source source = addSource(r'''
 class A {
   @deprecated
@@ -920,12 +925,12 @@
 class B extends A {
   B() : super() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]);
     verify([source]);
   }
 
-  void test_deprecatedAnnotationUse_superConstructor_namedConstructor() {
+  test_deprecatedAnnotationUse_superConstructor_namedConstructor() async {
     Source source = addSource(r'''
 class A {
   @deprecated
@@ -934,32 +939,32 @@
 class B extends A {
   B() : super.named() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]);
     verify([source]);
   }
 
-  void test_divisionOptimization_double() {
+  test_divisionOptimization_double() async {
     Source source = addSource(r'''
 f(double x, double y) {
   var v = (x / y).toInt();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DIVISION_OPTIMIZATION]);
     verify([source]);
   }
 
-  void test_divisionOptimization_int() {
+  test_divisionOptimization_int() async {
     Source source = addSource(r'''
 f(int x, int y) {
   var v = (x / y).toInt();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DIVISION_OPTIMIZATION]);
     verify([source]);
   }
 
-  void test_divisionOptimization_propagatedType() {
+  test_divisionOptimization_propagatedType() async {
     // Tests the propagated type information of the '/' method
     Source source = addSource(r'''
 f(x, y) {
@@ -967,22 +972,22 @@
   y = 1;
   var v = (x / y).toInt();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DIVISION_OPTIMIZATION]);
     verify([source]);
   }
 
-  void test_divisionOptimization_wrappedBinaryExpression() {
+  test_divisionOptimization_wrappedBinaryExpression() async {
     Source source = addSource(r'''
 f(int x, int y) {
   var v = (((x / y))).toInt();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DIVISION_OPTIMIZATION]);
     verify([source]);
   }
 
-  void test_duplicateImport() {
+  test_duplicateImport() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart';
@@ -993,12 +998,12 @@
         r'''
 library lib1;
 class A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DUPLICATE_IMPORT]);
     verify([source]);
   }
 
-  void test_duplicateImport2() {
+  test_duplicateImport2() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart';
@@ -1010,13 +1015,13 @@
         r'''
 library lib1;
 class A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [HintCode.DUPLICATE_IMPORT, HintCode.DUPLICATE_IMPORT]);
     verify([source]);
   }
 
-  void test_duplicateImport3() {
+  test_duplicateImport3() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart' as M show A hide B;
@@ -1028,12 +1033,12 @@
 library lib1;
 class A {}
 class B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DUPLICATE_IMPORT]);
     verify([source]);
   }
 
-  void test_factory__expr_return_null_OK() {
+  test_factory__expr_return_null_OK() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -1044,12 +1049,12 @@
 
 class State { }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_factory_abstract_OK() {
+  test_factory_abstract_OK() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -1060,12 +1065,12 @@
 
 class State { }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_factory_bad_return() {
+  test_factory_bad_return() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -1078,12 +1083,12 @@
 
 class State { }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.INVALID_FACTORY_METHOD_IMPL]);
     verify([source]);
   }
 
-  void test_factory_block_OK() {
+  test_factory_block_OK() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -1096,12 +1101,12 @@
 
 class State { }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_factory_block_return_null_OK() {
+  test_factory_block_return_null_OK() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -1114,12 +1119,12 @@
 
 class State { }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_factory_expr_OK() {
+  test_factory_expr_OK() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -1130,12 +1135,12 @@
 
 class State { }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_factory_misplaced_annotation() {
+  test_factory_misplaced_annotation() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -1148,7 +1153,7 @@
 @factory
 main() { }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       HintCode.INVALID_FACTORY_ANNOTATION,
       HintCode.INVALID_FACTORY_ANNOTATION,
@@ -1157,7 +1162,7 @@
     verify([source]);
   }
 
-  void test_factory_no_return_type_OK() {
+  test_factory_no_return_type_OK() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -1168,13 +1173,13 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
     // Null return types will get flagged elsewhere, no need to pile-on here.
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_factory_subclass_OK() {
+  test_factory_subclass_OK() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -1194,12 +1199,12 @@
 class State { }
 class MyState extends State { }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_factory_void_return() {
+  test_factory_void_return() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -1208,13 +1213,13 @@
   void createState() {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.INVALID_FACTORY_METHOD_DECL]);
     verify([source]);
   }
 
-  void test_importDeferredLibraryWithLoadFunction() {
-    resolveWithErrors(<String>[
+  test_importDeferredLibraryWithLoadFunction() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 loadLibrary() {}
@@ -1228,7 +1233,7 @@
     ]);
   }
 
-  void test_invalidAssignment_instanceVariable() {
+  test_invalidAssignment_instanceVariable() async {
     Source source = addSource(r'''
 class A {
   int x;
@@ -1239,31 +1244,31 @@
     a.x = y;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.INVALID_ASSIGNMENT]);
     verify([source]);
   }
 
-  void test_invalidAssignment_localVariable() {
+  test_invalidAssignment_localVariable() async {
     Source source = addSource(r'''
 f(var y) {
   if(y is String) {
     int x = y;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.INVALID_ASSIGNMENT]);
     verify([source]);
   }
 
-  void test_invalidAssignment_message() {
+  test_invalidAssignment_message() async {
     // The implementation of HintCode.INVALID_ASSIGNMENT assumes that
     // StaticTypeWarningCode.INVALID_ASSIGNMENT has the same message.
     expect(StaticTypeWarningCode.INVALID_ASSIGNMENT.message,
         HintCode.INVALID_ASSIGNMENT.message);
   }
 
-  void test_invalidAssignment_staticVariable() {
+  test_invalidAssignment_staticVariable() async {
     Source source = addSource(r'''
 class A {
   static int x;
@@ -1273,12 +1278,12 @@
     A.x = y;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.INVALID_ASSIGNMENT]);
     verify([source]);
   }
 
-  void test_invalidAssignment_variableDeclaration() {
+  test_invalidAssignment_variableDeclaration() async {
     // 17971
     Source source = addSource(r'''
 class Point {
@@ -1293,12 +1298,12 @@
   var p2 = new Point(10, 10);
   int n = p1 + p2;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.INVALID_ASSIGNMENT]);
     verify([source]);
   }
 
-  void test_invalidUseOfProtectedMember_closure() {
+  test_invalidUseOfProtectedMember_closure() async {
     Source source = addNamedSource(
         '/lib1.dart',
         r'''
@@ -1319,13 +1324,14 @@
   print(leak);
 }
 ''');
-    computeLibrarySourceErrors(source2);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
     assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]);
     assertNoErrors(source);
     verify([source, source2]);
   }
 
-  void test_invalidUseOfProtectedMember_field() {
+  test_invalidUseOfProtectedMember_field() async {
     Source source = addNamedSource(
         '/lib1.dart',
         r'''
@@ -1344,13 +1350,14 @@
   int b() => new A().a;
 }
 ''');
-    computeLibrarySourceErrors(source2);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
     assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]);
     assertNoErrors(source);
     verify([source, source2]);
   }
 
-  void test_invalidUseOfProtectedMember_field_OK() {
+  test_invalidUseOfProtectedMember_field_OK() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -1360,12 +1367,12 @@
 abstract class B implements A {
   int b() => a;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidUseOfProtectedMember_function() {
+  test_invalidUseOfProtectedMember_function() async {
     Source source = addNamedSource(
         '/lib1.dart',
         r'''
@@ -1384,13 +1391,14 @@
   new A().a();
 }
 ''');
-    computeLibrarySourceErrors(source2);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
     assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]);
     assertNoErrors(source);
     verify([source, source2]);
   }
 
-  void test_invalidUseOfProtectedMember_function_OK() {
+  test_invalidUseOfProtectedMember_function_OK() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -1401,12 +1409,12 @@
 abstract class B implements A {
   int b() => a();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidUseOfProtectedMember_function_OK2() {
+  test_invalidUseOfProtectedMember_function_OK2() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -1416,12 +1424,12 @@
 main() {
   new A().a();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidUseOfProtectedMember_getter() {
+  test_invalidUseOfProtectedMember_getter() async {
     Source source = addNamedSource(
         '/lib1.dart',
         r'''
@@ -1441,13 +1449,14 @@
   int b() => a.a;
 }
 ''');
-    computeLibrarySourceErrors(source2);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
     assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]);
     assertNoErrors(source);
     verify([source, source2]);
   }
 
-  void test_invalidUseOfProtectedMember_getter_OK() {
+  test_invalidUseOfProtectedMember_getter_OK() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -1457,12 +1466,12 @@
 abstract class B implements A {
   int b() => a;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidUseOfProtectedMember_in_docs_OK() {
+  test_invalidUseOfProtectedMember_in_docs_OK() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -1478,12 +1487,12 @@
 /// OK: [A.a], [A.b], [A.c].
 f() {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidUseOfProtectedMember_message() {
+  test_invalidUseOfProtectedMember_message() async {
     Source source = addNamedSource(
         '/lib1.dart',
         r'''
@@ -1502,13 +1511,13 @@
   void b() => new A().a();
 }
 ''');
-    List<AnalysisError> errors = analysisContext2.computeErrors(source2);
-    expect(errors, hasLength(1));
-    expect(errors[0].errorCode, HintCode.INVALID_USE_OF_PROTECTED_MEMBER);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
+    assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]);
     verify([source, source2]);
   }
 
-  void test_invalidUseOfProtectedMember_method_1() {
+  test_invalidUseOfProtectedMember_method_1() async {
     Source source = addNamedSource(
         '/lib1.dart',
         r'''
@@ -1528,13 +1537,14 @@
 }
 ''');
 
-    computeLibrarySourceErrors(source2);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
     assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]);
     assertNoErrors(source);
     verify([source, source2]);
   }
 
-  void test_invalidUseOfProtectedMember_method_OK() {
+  test_invalidUseOfProtectedMember_method_OK() async {
     // https://github.com/dart-lang/linter/issues/257
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
@@ -1552,12 +1562,12 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidUseOfProtectedMember_OK_1() {
+  test_invalidUseOfProtectedMember_OK_1() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -1567,12 +1577,12 @@
 class B extends A {
   void b() => a();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidUseOfProtectedMember_OK_2() {
+  test_invalidUseOfProtectedMember_OK_2() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -1582,12 +1592,12 @@
 class B extends Object with A {
   void b() => a();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidUseOfProtectedMember_OK_3() {
+  test_invalidUseOfProtectedMember_OK_3() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -1596,12 +1606,12 @@
 class B extends A {
   static m2(A a) => a.m1();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidUseOfProtectedMember_OK_4() {
+  test_invalidUseOfProtectedMember_OK_4() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -1614,12 +1624,12 @@
 main() {
   new B().a();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidUseOfProtectedMember_OK_field() {
+  test_invalidUseOfProtectedMember_OK_field() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -1630,12 +1640,12 @@
   int b() => a;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidUseOfProtectedMember_OK_getter() {
+  test_invalidUseOfProtectedMember_OK_getter() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -1646,12 +1656,12 @@
   int b() => a;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidUseOfProtectedMember_OK_setter() {
+  test_invalidUseOfProtectedMember_OK_setter() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -1664,12 +1674,12 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidUseOfProtectedMember_OK_setter_2() {
+  test_invalidUseOfProtectedMember_OK_setter_2() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -1681,12 +1691,12 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidUseOfProtectedMember_setter() {
+  test_invalidUseOfProtectedMember_setter() async {
     Source source = addNamedSource(
         '/lib1.dart',
         r'''
@@ -1708,13 +1718,14 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source2);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
     assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]);
     assertNoErrors(source);
     verify([source, source2]);
   }
 
-  void test_invalidUseOfProtectedMember_setter_OK() {
+  test_invalidUseOfProtectedMember_setter_OK() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -1726,12 +1737,12 @@
     a = i;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidUseOfProtectedMember_topLevelVariable() {
+  test_invalidUseOfProtectedMember_topLevelVariable() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 @protected
@@ -1739,50 +1750,50 @@
 main() {
   print(x);
 }''');
-    computeLibrarySourceErrors(source);
     // TODO(brianwilkerson) This should produce a hint because the annotation is
     // being applied to the wrong kind of declaration.
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_isDouble() {
+  test_isDouble() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.dart2jsHint = true;
-    resetWithOptions(options);
+    resetWith(options: options);
     Source source = addSource("var v = 1 is double;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.IS_DOUBLE]);
     verify([source]);
   }
 
   @failingTest
-  void test_isInt() {
+  test_isInt() async {
     Source source = addSource("var v = 1 is int;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.IS_INT]);
     verify([source]);
   }
 
-  void test_isNotDouble() {
+  test_isNotDouble() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.dart2jsHint = true;
-    resetWithOptions(options);
+    resetWith(options: options);
     Source source = addSource("var v = 1 is! double;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.IS_NOT_DOUBLE]);
     verify([source]);
   }
 
   @failingTest
-  void test_isNotInt() {
+  test_isNotInt() async {
     Source source = addSource("var v = 1 is! int;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.IS_NOT_INT]);
     verify([source]);
   }
 
-  void test_js_lib_OK() {
+  test_js_lib_OK() async {
     Source source = addSource(r'''
 @JS()
 library foo;
@@ -1792,12 +1803,12 @@
 @JS()
 class A { }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_missingJsLibAnnotation_class() {
+  test_missingJsLibAnnotation_class() async {
     Source source = addSource(r'''
 library foo;
 
@@ -1806,12 +1817,12 @@
 @JS()
 class A { }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MISSING_JS_LIB_ANNOTATION]);
     verify([source]);
   }
 
-  void test_missingJsLibAnnotation_externalField() {
+  test_missingJsLibAnnotation_externalField() async {
     // https://github.com/dart-lang/sdk/issues/26987
     Source source = addSource(r'''
 import 'package:js/js.dart';
@@ -1819,13 +1830,13 @@
 @JS()
 external dynamic exports;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [ParserErrorCode.EXTERNAL_FIELD, HintCode.MISSING_JS_LIB_ANNOTATION]);
     verify([source]);
   }
 
-  void test_missingJsLibAnnotation_function() {
+  test_missingJsLibAnnotation_function() async {
     Source source = addSource(r'''
 library foo;
 
@@ -1834,12 +1845,12 @@
 @JS('acxZIndex')
 set _currentZIndex(int value) { }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MISSING_JS_LIB_ANNOTATION]);
     verify([source]);
   }
 
-  void test_missingJsLibAnnotation_method() {
+  test_missingJsLibAnnotation_method() async {
     Source source = addSource(r'''
 library foo;
 
@@ -1850,62 +1861,62 @@
   void a() { }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MISSING_JS_LIB_ANNOTATION]);
     verify([source]);
   }
 
-  void test_missingJsLibAnnotation_variable() {
+  test_missingJsLibAnnotation_variable() async {
     Source source = addSource(r'''
 import 'package:js/js.dart';
 
 @JS()
 dynamic variable;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MISSING_JS_LIB_ANNOTATION]);
     verify([source]);
   }
 
-  void test_missingReturn_async() {
+  test_missingReturn_async() async {
     Source source = addSource('''
 import 'dart:async';
 Future<int> f() async {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MISSING_RETURN]);
     verify([source]);
   }
 
-  void test_missingReturn_factory() {
+  test_missingReturn_factory() async {
     Source source = addSource(r'''
 class A {
   factory A() {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MISSING_RETURN]);
     verify([source]);
   }
 
-  void test_missingReturn_function() {
+  test_missingReturn_function() async {
     Source source = addSource("int f() {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MISSING_RETURN]);
     verify([source]);
   }
 
-  void test_missingReturn_method() {
+  test_missingReturn_method() async {
     Source source = addSource(r'''
 class A {
   int m() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MISSING_RETURN]);
     verify([source]);
   }
 
-  void test_mustCallSuper() {
+  test_mustCallSuper() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -1918,12 +1929,12 @@
   {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MUST_CALL_SUPER]);
     verify([source]);
   }
 
-  void test_mustCallSuper_fromInterface() {
+  test_mustCallSuper_fromInterface() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -1935,12 +1946,12 @@
   void a() {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, []);
     verify([source]);
   }
 
-  void test_mustCallSuper_indirect() {
+  test_mustCallSuper_indirect() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -1958,12 +1969,12 @@
   void a() {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MUST_CALL_SUPER]);
     verify([source]);
   }
 
-  void test_mustCallSuper_overridden() {
+  test_mustCallSuper_overridden() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -1977,177 +1988,177 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, []);
     verify([source]);
   }
 
-  void test_nullAwareInCondition_assert() {
+  test_nullAwareInCondition_assert() async {
     Source source = addSource(r'''
 m(x) {
   assert (x?.a);
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]);
     verify([source]);
   }
 
-  void test_nullAwareInCondition_conditionalExpression() {
+  test_nullAwareInCondition_conditionalExpression() async {
     Source source = addSource(r'''
 m(x) {
   return x?.a ? 0 : 1;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]);
     verify([source]);
   }
 
-  void test_nullAwareInCondition_do() {
+  test_nullAwareInCondition_do() async {
     Source source = addSource(r'''
 m(x) {
   do {} while (x?.a);
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]);
     verify([source]);
   }
 
-  void test_nullAwareInCondition_for() {
+  test_nullAwareInCondition_for() async {
     Source source = addSource(r'''
 m(x) {
   for (var v = x; v?.a; v = v.next) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]);
     verify([source]);
   }
 
-  void test_nullAwareInCondition_if() {
+  test_nullAwareInCondition_if() async {
     Source source = addSource(r'''
 m(x) {
   if (x?.a) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]);
     verify([source]);
   }
 
-  void test_nullAwareInCondition_if_conditionalAnd_first() {
+  test_nullAwareInCondition_if_conditionalAnd_first() async {
     Source source = addSource(r'''
 m(x) {
   if (x?.a && x.b) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]);
     verify([source]);
   }
 
-  void test_nullAwareInCondition_if_conditionalAnd_second() {
+  test_nullAwareInCondition_if_conditionalAnd_second() async {
     Source source = addSource(r'''
 m(x) {
   if (x.a && x?.b) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]);
     verify([source]);
   }
 
-  void test_nullAwareInCondition_if_conditionalAnd_third() {
+  test_nullAwareInCondition_if_conditionalAnd_third() async {
     Source source = addSource(r'''
 m(x) {
   if (x.a && x.b && x?.c) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]);
     verify([source]);
   }
 
-  void test_nullAwareInCondition_if_conditionalOr_first() {
+  test_nullAwareInCondition_if_conditionalOr_first() async {
     Source source = addSource(r'''
 m(x) {
   if (x?.a || x.b) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]);
     verify([source]);
   }
 
-  void test_nullAwareInCondition_if_conditionalOr_second() {
+  test_nullAwareInCondition_if_conditionalOr_second() async {
     Source source = addSource(r'''
 m(x) {
   if (x.a || x?.b) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]);
     verify([source]);
   }
 
-  void test_nullAwareInCondition_if_conditionalOr_third() {
+  test_nullAwareInCondition_if_conditionalOr_third() async {
     Source source = addSource(r'''
 m(x) {
   if (x.a || x.b || x?.c) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]);
     verify([source]);
   }
 
-  void test_nullAwareInCondition_if_not() {
+  test_nullAwareInCondition_if_not() async {
     Source source = addSource(r'''
 m(x) {
   if (!x?.a) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]);
     verify([source]);
   }
 
-  void test_nullAwareInCondition_if_parenthesized() {
+  test_nullAwareInCondition_if_parenthesized() async {
     Source source = addSource(r'''
 m(x) {
   if ((x?.a)) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]);
     verify([source]);
   }
 
-  void test_nullAwareInCondition_while() {
+  test_nullAwareInCondition_while() async {
     Source source = addSource(r'''
 m(x) {
   while (x?.a) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]);
     verify([source]);
   }
 
   @failingTest
-  void test_overrideEqualsButNotHashCode() {
+  test_overrideEqualsButNotHashCode() async {
     Source source = addSource(r'''
 class A {
   bool operator ==(x) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.OVERRIDE_EQUALS_BUT_NOT_HASH_CODE]);
     verify([source]);
   }
 
-  void test_overrideOnNonOverridingField_invalid() {
+  test_overrideOnNonOverridingField_invalid() async {
     Source source = addSource(r'''
 class A {
 }
@@ -2155,12 +2166,12 @@
   @override
   final int m = 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.OVERRIDE_ON_NON_OVERRIDING_FIELD]);
     verify([source]);
   }
 
-  void test_overrideOnNonOverridingGetter_invalid() {
+  test_overrideOnNonOverridingGetter_invalid() async {
     Source source = addSource(r'''
 class A {
 }
@@ -2168,12 +2179,12 @@
   @override
   int get m => 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER]);
     verify([source]);
   }
 
-  void test_overrideOnNonOverridingMethod_invalid() {
+  test_overrideOnNonOverridingMethod_invalid() async {
     Source source = addSource(r'''
 class A {
 }
@@ -2181,12 +2192,12 @@
   @override
   int m() => 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD]);
     verify([source]);
   }
 
-  void test_overrideOnNonOverridingSetter_invalid() {
+  test_overrideOnNonOverridingSetter_invalid() async {
     Source source = addSource(r'''
 class A {
 }
@@ -2194,12 +2205,12 @@
   @override
   set m(int x) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.OVERRIDE_ON_NON_OVERRIDING_SETTER]);
     verify([source]);
   }
 
-  void test_required_constructor_param() {
+  test_required_constructor_param() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -2211,12 +2222,12 @@
   new C();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS]);
     verify([source]);
   }
 
-  void test_required_constructor_param_no_reason() {
+  test_required_constructor_param_no_reason() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -2228,12 +2239,12 @@
   new C();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM]);
     verify([source]);
   }
 
-  void test_required_constructor_param_null_reason() {
+  test_required_constructor_param_null_reason() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -2245,12 +2256,12 @@
   new C();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM]);
     verify([source]);
   }
 
-  void test_required_constructor_param_OK() {
+  test_required_constructor_param_OK() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -2262,12 +2273,12 @@
   new C(a: 2);
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_required_constructor_param_redirecting_cons_call() {
+  test_required_constructor_param_redirecting_cons_call() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -2276,12 +2287,12 @@
   C.named() : this();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM]);
     verify([source]);
   }
 
-  void test_required_constructor_param_super_call() {
+  test_required_constructor_param_super_call() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -2293,12 +2304,12 @@
   D() : super();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS]);
     verify([source]);
   }
 
-  void test_required_function_param() {
+  test_required_function_param() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -2308,12 +2319,12 @@
   f();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS]);
     verify([source]);
   }
 
-  void test_required_method_param() {
+  test_required_method_param() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 class A {
@@ -2323,12 +2334,12 @@
   new A().m();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS]);
     verify([source]);
   }
 
-  void test_required_method_param_in_other_lib() {
+  test_required_method_param_in_other_lib() async {
     addNamedSource(
         '/a_lib.dart',
         r'''
@@ -2346,12 +2357,12 @@
 }
 ''');
 
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS]);
     verify([source]);
   }
 
-  void test_required_typedef_function_param() {
+  test_required_typedef_function_param() async {
     Source source = addSource(r'''
 import 'package:meta/meta.dart';
 
@@ -2363,32 +2374,32 @@
   F m() => ({@required String x}) => null;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM]);
     verify([source]);
   }
 
-  void test_typeCheck_type_is_Null() {
+  test_typeCheck_type_is_Null() async {
     Source source = addSource(r'''
 m(i) {
   bool b = i is Null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.TYPE_CHECK_IS_NULL]);
     verify([source]);
   }
 
-  void test_typeCheck_type_not_Null() {
+  test_typeCheck_type_not_Null() async {
     Source source = addSource(r'''
 m(i) {
   bool b = i is! Null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.TYPE_CHECK_IS_NOT_NULL]);
     verify([source]);
   }
 
-  void test_undefinedGetter() {
+  test_undefinedGetter() async {
     Source source = addSource(r'''
 class A {}
 f(var a) {
@@ -2396,11 +2407,11 @@
     return a.m;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNDEFINED_GETTER]);
   }
 
-  void test_undefinedGetter_message() {
+  test_undefinedGetter_message() async {
     // The implementation of HintCode.UNDEFINED_SETTER assumes that
     // UNDEFINED_SETTER in StaticTypeWarningCode and StaticWarningCode are the
     // same, this verifies that assumption.
@@ -2408,59 +2419,59 @@
         StaticTypeWarningCode.UNDEFINED_GETTER.message);
   }
 
-  void test_undefinedIdentifier_exportHide() {
+  test_undefinedIdentifier_exportHide() async {
     Source source = addSource(r'''
 library L;
 export 'lib1.dart' hide a;''');
     addNamedSource("/lib1.dart", "library lib1;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNDEFINED_HIDDEN_NAME]);
     verify([source]);
   }
 
-  void test_undefinedIdentifier_exportShow() {
+  test_undefinedIdentifier_exportShow() async {
     Source source = addSource(r'''
 library L;
 export 'lib1.dart' show a;''');
     addNamedSource("/lib1.dart", "library lib1;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNDEFINED_SHOWN_NAME]);
     verify([source]);
   }
 
-  void test_undefinedIdentifier_importHide() {
+  test_undefinedIdentifier_importHide() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart' hide a;''');
     addNamedSource("/lib1.dart", "library lib1;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [HintCode.UNUSED_IMPORT, HintCode.UNDEFINED_HIDDEN_NAME]);
     verify([source]);
   }
 
-  void test_undefinedIdentifier_importShow() {
+  test_undefinedIdentifier_importShow() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart' show a;''');
     addNamedSource("/lib1.dart", "library lib1;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [HintCode.UNUSED_IMPORT, HintCode.UNDEFINED_SHOWN_NAME]);
     verify([source]);
   }
 
-  void test_undefinedMethod() {
+  test_undefinedMethod() async {
     Source source = addSource(r'''
 f() {
   var a = 'str';
   a.notAMethodOnString();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNDEFINED_METHOD]);
   }
 
-  void test_undefinedMethod_assignmentExpression() {
+  test_undefinedMethod_assignmentExpression() async {
     Source source = addSource(r'''
 class A {}
 class B {
@@ -2470,11 +2481,11 @@
     a += a2;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNDEFINED_METHOD]);
   }
 
-  void test_undefinedOperator_binaryExpression() {
+  test_undefinedOperator_binaryExpression() async {
     Source source = addSource(r'''
 class A {}
 f(var a) {
@@ -2482,11 +2493,11 @@
     a + 1;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_undefinedOperator_indexBoth() {
+  test_undefinedOperator_indexBoth() async {
     Source source = addSource(r'''
 class A {}
 f(var a) {
@@ -2494,11 +2505,11 @@
     a[0]++;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_undefinedOperator_indexGetter() {
+  test_undefinedOperator_indexGetter() async {
     Source source = addSource(r'''
 class A {}
 f(var a) {
@@ -2506,11 +2517,11 @@
     a[0];
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_undefinedOperator_indexSetter() {
+  test_undefinedOperator_indexSetter() async {
     Source source = addSource(r'''
 class A {}
 f(var a) {
@@ -2518,11 +2529,11 @@
     a[0] = 1;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_undefinedOperator_postfixExpression() {
+  test_undefinedOperator_postfixExpression() async {
     Source source = addSource(r'''
 class A {}
 f(var a) {
@@ -2530,11 +2541,11 @@
     a++;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_undefinedOperator_prefixExpression() {
+  test_undefinedOperator_prefixExpression() async {
     Source source = addSource(r'''
 class A {}
 f(var a) {
@@ -2542,11 +2553,11 @@
     ++a;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_undefinedSetter() {
+  test_undefinedSetter() async {
     Source source = addSource(r'''
 class A {}
 f(var a) {
@@ -2554,11 +2565,11 @@
     a.m = 0;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNDEFINED_SETTER]);
   }
 
-  void test_undefinedSetter_message() {
+  test_undefinedSetter_message() async {
     // The implementation of HintCode.UNDEFINED_SETTER assumes that
     // UNDEFINED_SETTER in StaticTypeWarningCode and StaticWarningCode are the
     // same, this verifies that assumption.
@@ -2566,27 +2577,27 @@
         StaticTypeWarningCode.UNDEFINED_SETTER.message);
   }
 
-  void test_unnecessaryCast_type_supertype() {
+  test_unnecessaryCast_type_supertype() async {
     Source source = addSource(r'''
 m(int i) {
   var b = i as Object;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNNECESSARY_CAST]);
     verify([source]);
   }
 
-  void test_unnecessaryCast_type_type() {
+  test_unnecessaryCast_type_type() async {
     Source source = addSource(r'''
 m(num i) {
   var b = i as num;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNNECESSARY_CAST]);
     verify([source]);
   }
 
-  void test_unnecessaryNoSuchMethod_blockBody() {
+  test_unnecessaryNoSuchMethod_blockBody() async {
     Source source = addSource(r'''
 class A {
   noSuchMethod(x) => super.noSuchMethod(x);
@@ -2597,12 +2608,12 @@
     return super.noSuchMethod(y);
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNNECESSARY_NO_SUCH_METHOD]);
     verify([source]);
   }
 
-  void test_unnecessaryNoSuchMethod_expressionBody() {
+  test_unnecessaryNoSuchMethod_expressionBody() async {
     Source source = addSource(r'''
 class A {
   noSuchMethod(x) => super.noSuchMethod(x);
@@ -2611,77 +2622,77 @@
   mmm();
   noSuchMethod(y) => super.noSuchMethod(y);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNNECESSARY_NO_SUCH_METHOD]);
     verify([source]);
   }
 
-  void test_unnecessaryTypeCheck_null_is_Null() {
+  test_unnecessaryTypeCheck_null_is_Null() async {
     Source source = addSource("bool b = null is Null;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_TRUE]);
     verify([source]);
   }
 
-  void test_unnecessaryTypeCheck_null_not_Null() {
+  test_unnecessaryTypeCheck_null_not_Null() async {
     Source source = addSource("bool b = null is! Null;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_FALSE]);
     verify([source]);
   }
 
-  void test_unnecessaryTypeCheck_type_is_dynamic() {
+  test_unnecessaryTypeCheck_type_is_dynamic() async {
     Source source = addSource(r'''
 m(i) {
   bool b = i is dynamic;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_TRUE]);
     verify([source]);
   }
 
-  void test_unnecessaryTypeCheck_type_is_object() {
+  test_unnecessaryTypeCheck_type_is_object() async {
     Source source = addSource(r'''
 m(i) {
   bool b = i is Object;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_TRUE]);
     verify([source]);
   }
 
-  void test_unnecessaryTypeCheck_type_not_dynamic() {
+  test_unnecessaryTypeCheck_type_not_dynamic() async {
     Source source = addSource(r'''
 m(i) {
   bool b = i is! dynamic;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_FALSE]);
     verify([source]);
   }
 
-  void test_unnecessaryTypeCheck_type_not_object() {
+  test_unnecessaryTypeCheck_type_not_object() async {
     Source source = addSource(r'''
 m(i) {
   bool b = i is! Object;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_FALSE]);
     verify([source]);
   }
 
-  void test_unusedElement_class_isUsed_extends() {
+  test_unusedElement_class_isUsed_extends() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class _A {}
 class B extends _A {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_class_isUsed_fieldDeclaration() {
+  test_unusedElement_class_isUsed_fieldDeclaration() async {
     enableUnusedElement = true;
     var src = r'''
 class Foo {
@@ -2692,35 +2703,35 @@
 }
 ''';
     Source source = addSource(src);
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_class_isUsed_implements() {
+  test_unusedElement_class_isUsed_implements() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class _A {}
 class B implements _A {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_class_isUsed_instanceCreation() {
+  test_unusedElement_class_isUsed_instanceCreation() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class _A {}
 main() {
   new _A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_class_isUsed_staticFieldAccess() {
+  test_unusedElement_class_isUsed_staticFieldAccess() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class _A {
@@ -2729,12 +2740,12 @@
 main() {
   _A.F;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_class_isUsed_staticMethodInvocation() {
+  test_unusedElement_class_isUsed_staticMethodInvocation() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class _A {
@@ -2743,12 +2754,12 @@
 main() {
   _A.m();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_class_isUsed_typeArgument() {
+  test_unusedElement_class_isUsed_typeArgument() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class _A {}
@@ -2756,12 +2767,12 @@
   var v = new List<_A>();
   print(v);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_class_notUsed_inClassMember() {
+  test_unusedElement_class_notUsed_inClassMember() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class _A {
@@ -2773,12 +2784,12 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_ELEMENT]);
     verify([source]);
   }
 
-  void test_unusedElement_class_notUsed_inConstructorName() {
+  test_unusedElement_class_notUsed_inConstructorName() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class _A {
@@ -2786,12 +2797,12 @@
   _A.named() {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_ELEMENT]);
     verify([source]);
   }
 
-  void test_unusedElement_class_notUsed_isExpression() {
+  test_unusedElement_class_notUsed_isExpression() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class _A {}
@@ -2800,23 +2811,23 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_ELEMENT]);
     verify([source]);
   }
 
-  void test_unusedElement_class_notUsed_noReference() {
+  test_unusedElement_class_notUsed_noReference() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class _A {}
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_ELEMENT]);
     verify([source]);
   }
 
-  void test_unusedElement_class_notUsed_variableDeclaration() {
+  test_unusedElement_class_notUsed_variableDeclaration() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class _A {}
@@ -2826,35 +2837,35 @@
 }
 print(x) {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_ELEMENT]);
     verify([source]);
   }
 
-  void test_unusedElement_enum_isUsed_fieldReference() {
+  test_unusedElement_enum_isUsed_fieldReference() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 enum _MyEnum {A, B, C}
 main() {
   print(_MyEnum.B);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_enum_notUsed_noReference() {
+  test_unusedElement_enum_notUsed_noReference() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 enum _MyEnum {A, B, C}
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_ELEMENT]);
     verify([source]);
   }
 
-  void test_unusedElement_functionLocal_isUsed_closure() {
+  test_unusedElement_functionLocal_isUsed_closure() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 main() {
@@ -2862,24 +2873,24 @@
 }
 print(x) {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_functionLocal_isUsed_invocation() {
+  test_unusedElement_functionLocal_isUsed_invocation() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 main() {
   f() {}
   f();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_functionLocal_isUsed_reference() {
+  test_unusedElement_functionLocal_isUsed_reference() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 main() {
@@ -2888,23 +2899,23 @@
 }
 print(x) {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_functionLocal_notUsed_noReference() {
+  test_unusedElement_functionLocal_notUsed_noReference() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 main() {
   f() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_ELEMENT]);
     verify([source]);
   }
 
-  void test_unusedElement_functionLocal_notUsed_referenceFromItself() {
+  test_unusedElement_functionLocal_notUsed_referenceFromItself() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 main() {
@@ -2912,24 +2923,24 @@
     _f(p - 1);
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_ELEMENT]);
     verify([source]);
   }
 
-  void test_unusedElement_functionTop_isUsed_invocation() {
+  test_unusedElement_functionTop_isUsed_invocation() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 _f() {}
 main() {
   _f();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_functionTop_isUsed_reference() {
+  test_unusedElement_functionTop_isUsed_reference() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 _f() {}
@@ -2938,23 +2949,23 @@
 }
 print(x) {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_functionTop_notUsed_noReference() {
+  test_unusedElement_functionTop_notUsed_noReference() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 _f() {}
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_ELEMENT]);
     verify([source]);
   }
 
-  void test_unusedElement_functionTop_notUsed_referenceFromItself() {
+  test_unusedElement_functionTop_notUsed_referenceFromItself() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 _f(int p) {
@@ -2962,12 +2973,12 @@
 }
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_ELEMENT]);
     verify([source]);
   }
 
-  void test_unusedElement_functionTypeAlias_isUsed_isExpression() {
+  test_unusedElement_functionTypeAlias_isUsed_isExpression() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 typedef _F(a, b);
@@ -2976,23 +2987,23 @@
     print('F');
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_functionTypeAlias_isUsed_reference() {
+  test_unusedElement_functionTypeAlias_isUsed_reference() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 typedef _F(a, b);
 main(_F f) {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_functionTypeAlias_isUsed_typeArgument() {
+  test_unusedElement_functionTypeAlias_isUsed_typeArgument() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 typedef _F(a, b);
@@ -3000,35 +3011,35 @@
   var v = new List<_F>();
   print(v);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_functionTypeAlias_isUsed_variableDeclaration() {
+  test_unusedElement_functionTypeAlias_isUsed_variableDeclaration() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 typedef _F(a, b);
 class A {
   _F f;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_functionTypeAlias_notUsed_noReference() {
+  test_unusedElement_functionTypeAlias_notUsed_noReference() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 typedef _F(a, b);
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_ELEMENT]);
     verify([source]);
   }
 
-  void test_unusedElement_getter_isUsed_invocation_implicitThis() {
+  test_unusedElement_getter_isUsed_invocation_implicitThis() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3037,12 +3048,12 @@
     var v = _g;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_getter_isUsed_invocation_PrefixedIdentifier() {
+  test_unusedElement_getter_isUsed_invocation_PrefixedIdentifier() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3052,12 +3063,12 @@
   var v = a._g;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_getter_isUsed_invocation_PropertyAccess() {
+  test_unusedElement_getter_isUsed_invocation_PropertyAccess() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3067,23 +3078,23 @@
   var v = new A()._g;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_getter_notUsed_noReference() {
+  test_unusedElement_getter_notUsed_noReference() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
   get _g => null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_ELEMENT]);
     verify([source]);
   }
 
-  void test_unusedElement_getter_notUsed_referenceFromItself() {
+  test_unusedElement_getter_notUsed_referenceFromItself() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3091,12 +3102,12 @@
     return _g;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_ELEMENT]);
     verify([source]);
   }
 
-  void test_unusedElement_method_isUsed_hasReference_implicitThis() {
+  test_unusedElement_method_isUsed_hasReference_implicitThis() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3107,12 +3118,12 @@
 }
 print(x) {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_method_isUsed_hasReference_implicitThis_subclass() {
+  test_unusedElement_method_isUsed_hasReference_implicitThis_subclass() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3126,12 +3137,12 @@
 }
 print(x) {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_method_isUsed_hasReference_PrefixedIdentifier() {
+  test_unusedElement_method_isUsed_hasReference_PrefixedIdentifier() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3140,12 +3151,12 @@
 main(A a) {
   a._m;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_method_isUsed_hasReference_PropertyAccess() {
+  test_unusedElement_method_isUsed_hasReference_PropertyAccess() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3154,12 +3165,12 @@
 main() {
   new A()._m;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_method_isUsed_invocation_implicitThis() {
+  test_unusedElement_method_isUsed_invocation_implicitThis() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3168,12 +3179,12 @@
     _m();
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_method_isUsed_invocation_implicitThis_subclass() {
+  test_unusedElement_method_isUsed_invocation_implicitThis_subclass() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3185,12 +3196,12 @@
 class B extends A {
   _m() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_method_isUsed_invocation_MemberElement() {
+  test_unusedElement_method_isUsed_invocation_MemberElement() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A<T> {
@@ -3199,12 +3210,12 @@
 main(A<int> a) {
   a._m(0);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_method_isUsed_invocation_propagated() {
+  test_unusedElement_method_isUsed_invocation_propagated() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3214,12 +3225,12 @@
   var a = new A();
   a._m();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_method_isUsed_invocation_static() {
+  test_unusedElement_method_isUsed_invocation_static() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3229,12 +3240,12 @@
   A a = new A();
   a._m();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_method_isUsed_invocation_subclass() {
+  test_unusedElement_method_isUsed_invocation_subclass() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3246,12 +3257,12 @@
 main(A a) {
   a._m();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_method_isUsed_notPrivate() {
+  test_unusedElement_method_isUsed_notPrivate() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3259,12 +3270,12 @@
 }
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_method_isUsed_staticInvocation() {
+  test_unusedElement_method_isUsed_staticInvocation() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3273,23 +3284,23 @@
 main() {
   A._m();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_method_notUsed_noReference() {
+  test_unusedElement_method_notUsed_noReference() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
   static _m() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_ELEMENT]);
     verify([source]);
   }
 
-  void test_unusedElement_method_notUsed_referenceFromItself() {
+  test_unusedElement_method_notUsed_referenceFromItself() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3297,12 +3308,12 @@
     _m(p - 1);
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_ELEMENT]);
     verify([source]);
   }
 
-  void test_unusedElement_setter_isUsed_invocation_implicitThis() {
+  test_unusedElement_setter_isUsed_invocation_implicitThis() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3311,12 +3322,12 @@
     _s = 42;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_setter_isUsed_invocation_PrefixedIdentifier() {
+  test_unusedElement_setter_isUsed_invocation_PrefixedIdentifier() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3326,12 +3337,12 @@
   a._s = 42;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_setter_isUsed_invocation_PropertyAccess() {
+  test_unusedElement_setter_isUsed_invocation_PropertyAccess() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3341,23 +3352,23 @@
   new A()._s = 42;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedElement_setter_notUsed_noReference() {
+  test_unusedElement_setter_notUsed_noReference() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
   set _s(x) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_ELEMENT]);
     verify([source]);
   }
 
-  void test_unusedElement_setter_notUsed_referenceFromItself() {
+  test_unusedElement_setter_notUsed_referenceFromItself() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3367,12 +3378,12 @@
     }
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_ELEMENT]);
     verify([source]);
   }
 
-  void test_unusedField_isUsed_argument() {
+  test_unusedField_isUsed_argument() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3382,12 +3393,12 @@
   }
 }
 print(x) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source);
     verify([source]);
   }
 
-  void test_unusedField_isUsed_reference_implicitThis() {
+  test_unusedField_isUsed_reference_implicitThis() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3397,24 +3408,24 @@
   }
 }
 print(x) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source);
     verify([source]);
   }
 
-  void test_unusedField_isUsed_reference_implicitThis_expressionFunctionBody() {
+  test_unusedField_isUsed_reference_implicitThis_expressionFunctionBody() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
   int _f;
   m() => _f;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source);
     verify([source]);
   }
 
-  void test_unusedField_isUsed_reference_implicitThis_subclass() {
+  test_unusedField_isUsed_reference_implicitThis_subclass() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3427,12 +3438,12 @@
   int _f;
 }
 print(x) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source);
     verify([source]);
   }
 
-  void test_unusedField_isUsed_reference_qualified_propagatedElement() {
+  test_unusedField_isUsed_reference_qualified_propagatedElement() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3443,12 +3454,12 @@
   print(a._f);
 }
 print(x) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source);
     verify([source]);
   }
 
-  void test_unusedField_isUsed_reference_qualified_staticElement() {
+  test_unusedField_isUsed_reference_qualified_staticElement() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3459,12 +3470,12 @@
   print(a._f);
 }
 print(x) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source);
     verify([source]);
   }
 
-  void test_unusedField_isUsed_reference_qualified_unresolved() {
+  test_unusedField_isUsed_reference_qualified_unresolved() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3474,12 +3485,12 @@
   print(a._f);
 }
 print(x) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source);
     verify([source]);
   }
 
-  void test_unusedField_notUsed_compoundAssign() {
+  test_unusedField_notUsed_compoundAssign() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3488,48 +3499,48 @@
     _f += 2;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_FIELD]);
     verify([source]);
   }
 
-  void test_unusedField_notUsed_constructorFieldInitializers() {
+  test_unusedField_notUsed_constructorFieldInitializers() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
   int _f;
   A() : _f = 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_FIELD]);
     verify([source]);
   }
 
-  void test_unusedField_notUsed_fieldFormalParameter() {
+  test_unusedField_notUsed_fieldFormalParameter() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
   int _f;
   A(this._f);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_FIELD]);
     verify([source]);
   }
 
-  void test_unusedField_notUsed_noReference() {
+  test_unusedField_notUsed_noReference() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
   int _f;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_FIELD]);
     verify([source]);
   }
 
-  void test_unusedField_notUsed_postfixExpr() {
+  test_unusedField_notUsed_postfixExpr() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3538,12 +3549,12 @@
     _f++;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_FIELD]);
     verify([source]);
   }
 
-  void test_unusedField_notUsed_prefixExpr() {
+  test_unusedField_notUsed_prefixExpr() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3552,12 +3563,12 @@
     ++_f;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_FIELD]);
     verify([source]);
   }
 
-  void test_unusedField_notUsed_simpleAssignment() {
+  test_unusedField_notUsed_simpleAssignment() async {
     enableUnusedElement = true;
     Source source = addSource(r'''
 class A {
@@ -3570,23 +3581,24 @@
   a._f = 2;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_FIELD]);
     verify([source]);
   }
 
-  void test_unusedImport() {
+  test_unusedImport() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart';''');
     Source source2 = addNamedSource("/lib1.dart", "library lib1;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
     assertErrors(source, [HintCode.UNUSED_IMPORT]);
     assertNoErrors(source2);
     verify([source, source2]);
   }
 
-  void test_unusedImport_as() {
+  test_unusedImport_as() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart';
@@ -3597,14 +3609,15 @@
         r'''
 library lib1;
 class A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
     assertErrors(source, [HintCode.UNUSED_IMPORT]);
     assertNoErrors(source2);
     verify([source, source2]);
   }
 
   @failingTest
-  void test_unusedImport_as_equalPrefixes() {
+  test_unusedImport_as_equalPrefixes() async {
     // See todo at ImportsVerifier.prefixElementMap.
     Source source = addSource(r'''
 library L;
@@ -3621,14 +3634,16 @@
         r'''
 library lib2;
 class B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
+    await computeAnalysisResult(source3);
     assertErrors(source, [HintCode.UNUSED_IMPORT]);
     assertNoErrors(source2);
     assertNoErrors(source3);
     verify([source, source2, source3]);
   }
 
-  void test_unusedImport_hide() {
+  test_unusedImport_hide() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart';
@@ -3639,22 +3654,24 @@
         r'''
 library lib1;
 class A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
     assertErrors(source, [HintCode.UNUSED_IMPORT]);
     assertNoErrors(source2);
     verify([source, source2]);
   }
 
-  void test_unusedImport_inComment_libraryDirective() {
+  test_unusedImport_inComment_libraryDirective() async {
     Source source = addSource(r'''
 /// Use [Future] class.
 library L;
 import 'dart:async';
 ''');
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_unusedImport_show() {
+  test_unusedImport_show() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart' show A;
@@ -3666,13 +3683,14 @@
 library lib1;
 class A {}
 class B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
     assertErrors(source, [HintCode.UNUSED_IMPORT]);
     assertNoErrors(source2);
     verify([source, source2]);
   }
 
-  void test_unusedLocalVariable_inCatch_exception() {
+  test_unusedLocalVariable_inCatch_exception() async {
     enableUnusedLocalVariable = true;
     Source source = addSource(r'''
 main() {
@@ -3680,12 +3698,12 @@
   } on String catch (exception) {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_CATCH_CLAUSE]);
     verify([source]);
   }
 
-  void test_unusedLocalVariable_inCatch_exception_hasStack() {
+  test_unusedLocalVariable_inCatch_exception_hasStack() async {
     enableUnusedLocalVariable = true;
     Source source = addSource(r'''
 main() {
@@ -3694,12 +3712,12 @@
     print(stack);
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedLocalVariable_inCatch_exception_noOnClause() {
+  test_unusedLocalVariable_inCatch_exception_noOnClause() async {
     enableUnusedLocalVariable = true;
     Source source = addSource(r'''
 main() {
@@ -3707,12 +3725,12 @@
   } catch (exception) {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedLocalVariable_inCatch_stackTrace() {
+  test_unusedLocalVariable_inCatch_stackTrace() async {
     enableUnusedLocalVariable = true;
     Source source = addSource(r'''
 main() {
@@ -3720,12 +3738,12 @@
   } catch (exception, stackTrace) {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_CATCH_STACK]);
     verify([source]);
   }
 
-  void test_unusedLocalVariable_inCatch_stackTrace_used() {
+  test_unusedLocalVariable_inCatch_stackTrace_used() async {
     enableUnusedLocalVariable = true;
     Source source = addSource(r'''
 main() {
@@ -3735,12 +3753,12 @@
   }
 }
 print(x) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source);
     verify([source]);
   }
 
-  void test_unusedLocalVariable_inFor_underscore_ignored() {
+  test_unusedLocalVariable_inFor_underscore_ignored() async {
     enableUnusedLocalVariable = true;
     Source source = addSource(r'''
 main() {
@@ -3750,24 +3768,24 @@
     }
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source);
     verify([source]);
   }
 
-  void test_unusedLocalVariable_inFunction() {
+  test_unusedLocalVariable_inFunction() async {
     enableUnusedLocalVariable = true;
     Source source = addSource(r'''
 main() {
   var v = 1;
   v = 2;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_LOCAL_VARIABLE]);
     verify([source]);
   }
 
-  void test_unusedLocalVariable_inMethod() {
+  test_unusedLocalVariable_inMethod() async {
     enableUnusedLocalVariable = true;
     Source source = addSource(r'''
 class A {
@@ -3776,12 +3794,12 @@
     v = 2;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_LOCAL_VARIABLE]);
     verify([source]);
   }
 
-  void test_unusedLocalVariable_isInvoked() {
+  test_unusedLocalVariable_isInvoked() async {
     enableUnusedLocalVariable = true;
     Source source = addSource(r'''
 typedef Foo();
@@ -3789,48 +3807,48 @@
   Foo foo;
   foo();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source);
     verify([source]);
   }
 
-  void test_unusedLocalVariable_isRead_notUsed_compoundAssign() {
+  test_unusedLocalVariable_isRead_notUsed_compoundAssign() async {
     enableUnusedLocalVariable = true;
     Source source = addSource(r'''
 main() {
   var v = 1;
   v += 2;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_LOCAL_VARIABLE]);
     verify([source]);
   }
 
-  void test_unusedLocalVariable_isRead_notUsed_postfixExpr() {
+  test_unusedLocalVariable_isRead_notUsed_postfixExpr() async {
     enableUnusedLocalVariable = true;
     Source source = addSource(r'''
 main() {
   var v = 1;
   v++;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_LOCAL_VARIABLE]);
     verify([source]);
   }
 
-  void test_unusedLocalVariable_isRead_notUsed_prefixExpr() {
+  test_unusedLocalVariable_isRead_notUsed_prefixExpr() async {
     enableUnusedLocalVariable = true;
     Source source = addSource(r'''
 main() {
   var v = 1;
   ++v;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_LOCAL_VARIABLE]);
     verify([source]);
   }
 
-  void test_unusedLocalVariable_isRead_usedArgument() {
+  test_unusedLocalVariable_isRead_usedArgument() async {
     enableUnusedLocalVariable = true;
     Source source = addSource(r'''
 main() {
@@ -3838,12 +3856,12 @@
   print(++v);
 }
 print(x) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source);
     verify([source]);
   }
 
-  void test_unusedLocalVariable_isRead_usedInvocationTarget() {
+  test_unusedLocalVariable_isRead_usedInvocationTarget() async {
     enableUnusedLocalVariable = true;
     Source source = addSource(r'''
 class A {
@@ -3854,12 +3872,12 @@
   a.foo();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source);
     verify([source]);
   }
 
-  void test_unusedShownName() {
+  test_unusedShownName() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart' show A, B;
@@ -3870,13 +3888,14 @@
 library lib1;
 class A {}
 class B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
     assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]);
     assertNoErrors(source2);
     verify([source, source2]);
   }
 
-  void test_unusedShownName_as() {
+  test_unusedShownName_as() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart' as p show A, B;
@@ -3887,13 +3906,14 @@
 library lib1;
 class A {}
 class B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
     assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]);
     assertNoErrors(source2);
     verify([source, source2]);
   }
 
-  void test_unusedShownName_duplicates() {
+  test_unusedShownName_duplicates() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart' show A, B;
@@ -3908,14 +3928,15 @@
 class B {}
 class C {}
 class D {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
     assertErrors(
         source, [HintCode.UNUSED_SHOWN_NAME, HintCode.UNUSED_SHOWN_NAME]);
     assertNoErrors(source2);
     verify([source, source2]);
   }
 
-  void test_unusedShownName_topLevelVariable() {
+  test_unusedShownName_topLevelVariable() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart' show var1, var2;
@@ -3931,13 +3952,14 @@
 const int var2 = 2;
 const int var3 = 3;
 const int var4 = 4;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
     assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]);
     assertNoErrors(source2);
     verify([source, source2]);
   }
 
-  void test_useOfVoidResult_assignmentExpression_function() {
+  test_useOfVoidResult_assignmentExpression_function() async {
     Source source = addSource(r'''
 void f() {}
 class A {
@@ -3946,12 +3968,12 @@
     a = f();
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.USE_OF_VOID_RESULT]);
     verify([source]);
   }
 
-  void test_useOfVoidResult_assignmentExpression_method() {
+  test_useOfVoidResult_assignmentExpression_method() async {
     Source source = addSource(r'''
 class A {
   void m() {}
@@ -3960,12 +3982,12 @@
     a = m();
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.USE_OF_VOID_RESULT]);
     verify([source]);
   }
 
-  void test_useOfVoidResult_inForLoop() {
+  test_useOfVoidResult_inForLoop() async {
     Source source = addSource(r'''
 class A {
   void m() {}
@@ -3973,12 +3995,12 @@
     for(var a = m();;) {}
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.USE_OF_VOID_RESULT]);
     verify([source]);
   }
 
-  void test_useOfVoidResult_variableDeclaration_function() {
+  test_useOfVoidResult_variableDeclaration_function() async {
     Source source = addSource(r'''
 void f() {}
 class A {
@@ -3986,12 +4008,12 @@
     var a = f();
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.USE_OF_VOID_RESULT]);
     verify([source]);
   }
 
-  void test_useOfVoidResult_variableDeclaration_method() {
+  test_useOfVoidResult_variableDeclaration_method() async {
     Source source = addSource(r'''
 class A {
   void m() {}
@@ -3999,12 +4021,12 @@
     var a = m();
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.USE_OF_VOID_RESULT]);
     verify([source]);
   }
 
-  void test_useOfVoidResult_variableDeclaration_method2() {
+  test_useOfVoidResult_variableDeclaration_method2() async {
     Source source = addSource(r'''
 class A {
   void m() {}
@@ -4012,7 +4034,7 @@
     var a = m(), b = m();
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [HintCode.USE_OF_VOID_RESULT, HintCode.USE_OF_VOID_RESULT]);
     verify([source]);
diff --git a/pkg/analyzer/test/generated/non_error_resolver_driver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_driver_test.dart
new file mode 100644
index 0000000..a2cdd13
--- /dev/null
+++ b/pkg/analyzer/test/generated/non_error_resolver_driver_test.dart
@@ -0,0 +1,104 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'non_error_resolver_test.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(NonErrorResolverTest_Driver);
+  });
+}
+
+@reflectiveTest
+class NonErrorResolverTest_Driver extends NonErrorResolverTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+
+  @failingTest
+  @override
+  test_class_type_alias_documentationComment() {
+    return super.test_class_type_alias_documentationComment();
+  }
+
+  @failingTest
+  @override
+  test_commentReference_beforeConstructor() {
+    return super.test_commentReference_beforeConstructor();
+  }
+
+  @failingTest
+  @override
+  test_commentReference_beforeEnum() {
+    return super.test_commentReference_beforeEnum();
+  }
+
+  @failingTest
+  @override
+  test_commentReference_beforeFunction_blockBody() {
+    return super.test_commentReference_beforeFunction_blockBody();
+  }
+
+  @failingTest
+  @override
+  test_commentReference_beforeFunction_expressionBody() {
+    return super.test_commentReference_beforeFunction_expressionBody();
+  }
+
+  @failingTest
+  @override
+  test_commentReference_beforeFunctionTypeAlias() {
+    return super.test_commentReference_beforeFunctionTypeAlias();
+  }
+
+  @failingTest
+  @override
+  test_commentReference_beforeGetter() {
+    return super.test_commentReference_beforeGetter();
+  }
+
+  @failingTest
+  @override
+  test_commentReference_beforeMethod() {
+    return super.test_commentReference_beforeMethod();
+  }
+
+  @failingTest
+  @override
+  test_commentReference_class() {
+    return super.test_commentReference_class();
+  }
+
+  @failingTest
+  @override
+  test_commentReference_setter() {
+    return super.test_commentReference_setter();
+  }
+
+  @failingTest
+  @override
+  test_invalidAnnotation_constantVariable_field_importWithPrefix() {
+    return super
+        .test_invalidAnnotation_constantVariable_field_importWithPrefix();
+  }
+
+  @failingTest
+  @override
+  test_issue_24191() {
+    return super.test_issue_24191();
+  }
+
+  @failingTest
+  @override
+  test_nativeConstConstructor() {
+    return super.test_nativeConstConstructor();
+  }
+
+  @failingTest
+  @override
+  test_nativeFunctionBodyInNonSDKCode_function() {
+    return super.test_nativeFunctionBodyInNonSDKCode_function();
+  }
+}
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 8ad198f..1fae0c2 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -4,6 +4,8 @@
 
 library analyzer.test.generated.non_error_resolver_test;
 
+import 'dart:async';
+
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -26,19 +28,18 @@
 
 @reflectiveTest
 class NonErrorResolverTest extends ResolverTestCase {
-  void fail_undefinedEnumConstant() {
+  fail_undefinedEnumConstant() async {
     Source source = addSource(r'''
 enum E { ONE }
 E e() {
   return E.TWO;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void
-      test_abstractSuperMemberReference_superHasConcrete_mixinHasAbstract_method() {
+  test_abstractSuperMemberReference_superHasConcrete_mixinHasAbstract_method() async {
     Source source = addSource('''
 class A {
   void method() {}
@@ -54,12 +55,12 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_abstractSuperMemberReference_superHasNoSuchMethod() {
+  test_abstractSuperMemberReference_superHasNoSuchMethod() async {
     Source source = addSource('''
 abstract class A {
   int m();
@@ -70,12 +71,12 @@
   int m() => super.m();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_abstractSuperMemberReference_superSuperHasConcrete_getter() {
+  test_abstractSuperMemberReference_superSuperHasConcrete_getter() async {
     Source source = addSource('''
 abstract class A {
   int get m => 0;
@@ -89,12 +90,12 @@
   int get m => super.m;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_abstractSuperMemberReference_superSuperHasConcrete_method() {
+  test_abstractSuperMemberReference_superSuperHasConcrete_method() async {
     Source source = addSource('''
 void main() {
   print(new C().m());
@@ -112,12 +113,12 @@
   int m() => super.m();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_abstractSuperMemberReference_superSuperHasConcrete_setter() {
+  test_abstractSuperMemberReference_superSuperHasConcrete_setter() async {
     Source source = addSource('''
 abstract class A {
   void set m(int v) {}
@@ -133,12 +134,12 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_ambiguousExport() {
+  test_ambiguousExport() async {
     Source source = addSource(r'''
 library L;
 export 'lib1.dart';
@@ -153,12 +154,12 @@
         r'''
 library lib2;
 class N {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_ambiguousExport_combinators_hide() {
+  test_ambiguousExport_combinators_hide() async {
     Source source = addSource(r'''
 library L;
 export 'lib1.dart';
@@ -175,12 +176,12 @@
 library L2;
 class B {}
 class C {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_ambiguousExport_combinators_show() {
+  test_ambiguousExport_combinators_show() async {
     Source source = addSource(r'''
 library L;
 export 'lib1.dart';
@@ -197,12 +198,12 @@
 library L2;
 class B {}
 class C {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_ambiguousExport_sameDeclaration() {
+  test_ambiguousExport_sameDeclaration() async {
     Source source = addSource(r'''
 library L;
 export 'lib.dart';
@@ -212,12 +213,12 @@
         r'''
 library lib;
 class N {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_ambiguousImport_hideCombinator() {
+  test_ambiguousImport_hideCombinator() async {
     Source source = addSource(r'''
 import 'lib1.dart';
 import 'lib2.dart';
@@ -245,11 +246,11 @@
 library lib3;
 class N {}
 class N3 {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_ambiguousImport_showCombinator() {
+  test_ambiguousImport_showCombinator() async {
     Source source = addSource(r'''
 import 'lib1.dart';
 import 'lib2.dart' show N, N2;
@@ -269,19 +270,19 @@
 library lib2;
 class N {}
 class N2 {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]);
   }
 
-  void test_annotated_partOfDeclaration() {
+  test_annotated_partOfDeclaration() async {
     Source source = addSource('library L; part "part.dart";');
     addNamedSource('/part.dart', '@deprecated part of L;');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_classWithCall_Function() {
+  test_argumentTypeNotAssignable_classWithCall_Function() async {
     Source source = addSource(r'''
   caller(Function callee) {
     callee();
@@ -294,12 +295,12 @@
   main() {
     caller(new CallMeBack());
   }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_fieldFormalParameterElement_member() {
+  test_argumentTypeNotAssignable_fieldFormalParameterElement_member() async {
     Source source = addSource(r'''
 class ObjectSink<T> {
   void sink(T object) {
@@ -310,46 +311,46 @@
   E object2;
   TimestampedObject(this.object2);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_invocation_functionParameter_generic() {
+  test_argumentTypeNotAssignable_invocation_functionParameter_generic() async {
     Source source = addSource(r'''
 class A<K> {
   m(f(K k), K v) {
     f(v);
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_invocation_typedef_generic() {
+  test_argumentTypeNotAssignable_invocation_typedef_generic() async {
     Source source = addSource(r'''
 typedef A<T>(T p);
 f(A<int> a) {
   a(1);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_Object_Function() {
+  test_argumentTypeNotAssignable_Object_Function() async {
     Source source = addSource(r'''
 main() {
   process(() {});
 }
 process(Object x) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_typedef_local() {
+  test_argumentTypeNotAssignable_typedef_local() async {
     Source source = addSource(r'''
 typedef A(int p1, String p2);
 A getA() => null;
@@ -357,23 +358,23 @@
   A a = getA();
   a(1, '2');
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_typedef_parameter() {
+  test_argumentTypeNotAssignable_typedef_parameter() async {
     Source source = addSource(r'''
 typedef A(int p1, String p2);
 f(A a) {
   a(1, '2');
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_assert_with_message_await() {
+  test_assert_with_message_await() async {
     Source source = addSource('''
 import 'dart:async';
 f() async {
@@ -381,69 +382,69 @@
 }
 Future<String> g() => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_assert_with_message_dynamic() {
+  test_assert_with_message_dynamic() async {
     Source source = addSource('''
 f() {
   assert(false, g());
 }
 g() => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_assert_with_message_non_string() {
+  test_assert_with_message_non_string() async {
     Source source = addSource('''
 f() {
   assert(false, 3);
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_assert_with_message_null() {
+  test_assert_with_message_null() async {
     Source source = addSource('''
 f() {
   assert(false, null);
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_assert_with_message_string() {
+  test_assert_with_message_string() async {
     Source source = addSource('''
 f() {
   assert(false, 'message');
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_assert_with_message_suppresses_unused_var_hint() {
+  test_assert_with_message_suppresses_unused_var_hint() async {
     Source source = addSource('''
 f() {
   String message = 'msg';
   assert(true, message);
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_assignability_function_expr_rettype_from_typedef_cls() {
+  test_assignability_function_expr_rettype_from_typedef_cls() async {
     // In the code below, the type of (() => f()) has a return type which is
     // a class, and that class is inferred from the return type of the typedef
     // F.
@@ -455,12 +456,12 @@
   F f2 = (() => f());
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_assignability_function_expr_rettype_from_typedef_typedef() {
+  test_assignability_function_expr_rettype_from_typedef_typedef() async {
     // In the code below, the type of (() => f()) has a return type which is
     // a typedef, and that typedef is inferred from the return type of the
     // typedef F.
@@ -472,23 +473,23 @@
   F f2 = (() => f());
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_assignmentToFinal_prefixNegate() {
+  test_assignmentToFinal_prefixNegate() async {
     Source source = addSource(r'''
 f() {
   final x = 0;
   -x;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_assignmentToFinalNoSetter_prefixedIdentifier() {
+  test_assignmentToFinalNoSetter_prefixedIdentifier() async {
     Source source = addSource(r'''
 class A {
   int get x => 0;
@@ -498,12 +499,12 @@
   A a = new A();
   a.x = 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_assignmentToFinalNoSetter_propertyAccess() {
+  test_assignmentToFinalNoSetter_propertyAccess() async {
     Source source = addSource(r'''
 class A {
   int get x => 0;
@@ -515,12 +516,12 @@
 main() {
   B.a.x = 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_assignmentToFinals_importWithPrefix() {
+  test_assignmentToFinals_importWithPrefix() async {
     Source source = addSource(r'''
 library lib;
 import 'lib1.dart' as foo;
@@ -532,43 +533,43 @@
         r'''
 library lib1;
 bool x = false;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_dynamic_with_return() {
+  test_async_dynamic_with_return() async {
     Source source = addSource('''
 dynamic f() async {
   return;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_dynamic_with_return_value() {
+  test_async_dynamic_with_return_value() async {
     Source source = addSource('''
 dynamic f() async {
   return 5;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_dynamic_without_return() {
+  test_async_dynamic_without_return() async {
     Source source = addSource('''
 dynamic f() async {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_expression_function_type() {
+  test_async_expression_function_type() async {
     Source source = addSource('''
 import 'dart:async';
 typedef Future<int> F(int i);
@@ -576,12 +577,12 @@
   F f = (int i) async => i;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_flattened() {
+  test_async_flattened() async {
     Source source = addSource('''
 import 'dart:async';
 typedef Future<int> CreatesFutureInt();
@@ -592,160 +593,160 @@
 }
 Future<int> f() => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_future_dynamic_with_return() {
+  test_async_future_dynamic_with_return() async {
     Source source = addSource('''
 import 'dart:async';
 Future<dynamic> f() async {
   return;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_future_dynamic_with_return_value() {
+  test_async_future_dynamic_with_return_value() async {
     Source source = addSource('''
 import 'dart:async';
 Future<dynamic> f() async {
   return 5;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_future_dynamic_without_return() {
+  test_async_future_dynamic_without_return() async {
     Source source = addSource('''
 import 'dart:async';
 Future<dynamic> f() async {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_future_int_with_return_future_int() {
+  test_async_future_int_with_return_future_int() async {
     Source source = addSource('''
 import 'dart:async';
 Future<int> f() async {
   return new Future<int>.value(5);
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_future_int_with_return_value() {
+  test_async_future_int_with_return_value() async {
     Source source = addSource('''
 import 'dart:async';
 Future<int> f() async {
   return 5;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_future_null_with_return() {
+  test_async_future_null_with_return() async {
     Source source = addSource('''
 import 'dart:async';
 Future<Null> f() async {
   return;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_future_null_without_return() {
+  test_async_future_null_without_return() async {
     Source source = addSource('''
 import 'dart:async';
 Future<Null> f() async {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_future_object_with_return() {
+  test_async_future_object_with_return() async {
     Source source = addSource('''
 import 'dart:async';
 Future<Object> f() async {
   return;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_future_object_with_return_value() {
+  test_async_future_object_with_return_value() async {
     Source source = addSource('''
 import 'dart:async';
 Future<Object> f() async {
   return 5;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_future_object_without_return() {
+  test_async_future_object_without_return() async {
     Source source = addSource('''
 import 'dart:async';
 Future<Object> f() async {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_future_with_return() {
+  test_async_future_with_return() async {
     Source source = addSource('''
 import 'dart:async';
 Future f() async {
   return;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_future_with_return_value() {
+  test_async_future_with_return_value() async {
     Source source = addSource('''
 import 'dart:async';
 Future f() async {
   return 5;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_future_without_return() {
+  test_async_future_without_return() async {
     Source source = addSource('''
 import 'dart:async';
 Future f() async {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_return_flattens_futures() {
+  test_async_return_flattens_futures() async {
     Source source = addSource('''
 import 'dart:async';
 Future<int> f() async {
@@ -753,65 +754,65 @@
 }
 Future<Future<int>> g() => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_with_return() {
+  test_async_with_return() async {
     Source source = addSource('''
 f() async {
   return;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_with_return_value() {
+  test_async_with_return_value() async {
     Source source = addSource('''
 f() async {
   return 5;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_async_without_return() {
+  test_async_without_return() async {
     Source source = addSource('''
 f() async {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_asyncForInWrongContext_async() {
+  test_asyncForInWrongContext_async() async {
     Source source = addSource(r'''
 f(list) async {
   await for (var e in list) {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_asyncForInWrongContext_asyncStar() {
+  test_asyncForInWrongContext_asyncStar() async {
     Source source = addSource(r'''
 f(list) async* {
   await for (var e in list) {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_await_flattened() {
+  test_await_flattened() async {
     Source source = addSource('''
 import 'dart:async';
 Future<Future<int>> ffi() => null;
@@ -819,12 +820,12 @@
   int b = await ffi();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_await_simple() {
+  test_await_simple() async {
     Source source = addSource('''
 import 'dart:async';
 Future<int> fi() => null;
@@ -832,32 +833,32 @@
   int a = await fi();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_awaitInWrongContext_async() {
+  test_awaitInWrongContext_async() async {
     Source source = addSource(r'''
 f(x, y) async {
   return await x + await y;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_awaitInWrongContext_asyncStar() {
+  test_awaitInWrongContext_asyncStar() async {
     Source source = addSource(r'''
 f(x, y) async* {
   yield await x + await y;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_breakWithoutLabelInSwitch() {
+  test_breakWithoutLabelInSwitch() async {
     Source source = addSource(r'''
 class A {
   void m(int i) {
@@ -867,12 +868,12 @@
     }
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_bug_24539_getter() {
+  test_bug_24539_getter() async {
     Source source = addSource('''
 class C<T> {
   List<Foo> get x => null;
@@ -880,12 +881,12 @@
 
 typedef Foo(param);
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_bug_24539_setter() {
+  test_bug_24539_setter() async {
     Source source = addSource('''
 class C<T> {
   void set x(List<Foo> value) {}
@@ -893,22 +894,22 @@
 
 typedef Foo(param);
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_builtInIdentifierAsType_dynamic() {
+  test_builtInIdentifierAsType_dynamic() async {
     Source source = addSource(r'''
 f() {
   dynamic x;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_caseBlockNotTerminated() {
+  test_caseBlockNotTerminated() async {
     Source source = addSource(r'''
 f(int p) {
   for (int i = 0; i < 10; i++) {
@@ -930,12 +931,12 @@
     }
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_caseBlockNotTerminated_lastCase() {
+  test_caseBlockNotTerminated_lastCase() async {
     Source source = addSource(r'''
 f(int p) {
   switch (p) {
@@ -943,12 +944,12 @@
       p = p + 1;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_caseExpressionTypeImplementsEquals() {
+  test_caseExpressionTypeImplementsEquals() async {
     Source source = addSource(r'''
 print(p) {}
 
@@ -970,12 +971,12 @@
   case const C(1): print('Switch: 1'); break;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_caseExpressionTypeImplementsEquals_int() {
+  test_caseExpressionTypeImplementsEquals_int() async {
     Source source = addSource(r'''
 f(int i) {
   switch(i) {
@@ -983,12 +984,12 @@
     default: return 0;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_caseExpressionTypeImplementsEquals_Object() {
+  test_caseExpressionTypeImplementsEquals_Object() async {
     Source source = addSource(r'''
 class IntWrapper {
   final int value;
@@ -1001,12 +1002,12 @@
     default: return 0;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_caseExpressionTypeImplementsEquals_String() {
+  test_caseExpressionTypeImplementsEquals_String() async {
     Source source = addSource(r'''
 f(String s) {
   switch(s) {
@@ -1014,12 +1015,12 @@
     default: return 0;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_class_type_alias_documentationComment() {
+  test_class_type_alias_documentationComment() async {
     Source source = addSource('''
 /**
  * Documentation
@@ -1028,27 +1029,26 @@
 
 class D {}
 class E {}''');
-    computeLibrarySourceErrors(source);
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
-    CompilationUnit unit = _getResolvedLibraryUnit(source);
+    CompilationUnit unit = await _getResolvedLibraryUnit(source);
     ClassElement classC =
         resolutionMap.elementDeclaredByCompilationUnit(unit).getType('C');
     expect(classC.documentationComment, isNotNull);
   }
 
-  void test_commentReference_beforeConstructor() {
+  test_commentReference_beforeConstructor() async {
     String code = r'''
 abstract class A {
   /// [p]
   A(int p) {}
 }''';
     Source source = addSource(code);
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
-    CompilationUnit unit = _getResolvedLibraryUnit(source);
+    CompilationUnit unit = await _getResolvedLibraryUnit(source);
     {
       SimpleIdentifier ref =
           EngineTestCase.findSimpleIdentifier(unit, code, "p]");
@@ -1056,7 +1056,7 @@
     }
   }
 
-  void test_commentReference_beforeEnum() {
+  test_commentReference_beforeEnum() async {
     String code = r'''
 /// This is the [Samurai] kind.
 enum Samurai {
@@ -1066,10 +1066,10 @@
   WITHOUT_SWORD
 }''';
     Source source = addSource(code);
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
-    CompilationUnit unit = _getResolvedLibraryUnit(source);
+    CompilationUnit unit = await _getResolvedLibraryUnit(source);
     {
       SimpleIdentifier ref =
           EngineTestCase.findSimpleIdentifier(unit, code, 'Samurai]');
@@ -1093,61 +1093,61 @@
     }
   }
 
-  void test_commentReference_beforeFunction_blockBody() {
+  test_commentReference_beforeFunction_blockBody() async {
     String code = r'''
 /// [p]
 foo(int p) {
 }''';
     Source source = addSource(code);
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
-    CompilationUnit unit = _getResolvedLibraryUnit(source);
+    CompilationUnit unit = await _getResolvedLibraryUnit(source);
     SimpleIdentifier ref =
         EngineTestCase.findSimpleIdentifier(unit, code, 'p]');
     expect(ref.staticElement, new isInstanceOf<ParameterElement>());
   }
 
-  void test_commentReference_beforeFunction_expressionBody() {
+  test_commentReference_beforeFunction_expressionBody() async {
     String code = r'''
 /// [p]
 foo(int p) => null;''';
     Source source = addSource(code);
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
-    CompilationUnit unit = _getResolvedLibraryUnit(source);
+    CompilationUnit unit = await _getResolvedLibraryUnit(source);
     SimpleIdentifier ref =
         EngineTestCase.findSimpleIdentifier(unit, code, 'p]');
     expect(ref.staticElement, new isInstanceOf<ParameterElement>());
   }
 
-  void test_commentReference_beforeFunctionTypeAlias() {
+  test_commentReference_beforeFunctionTypeAlias() async {
     String code = r'''
 /// [p]
 typedef Foo(int p);
 ''';
     Source source = addSource(code);
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
-    CompilationUnit unit = _getResolvedLibraryUnit(source);
+    CompilationUnit unit = await _getResolvedLibraryUnit(source);
     SimpleIdentifier ref =
         EngineTestCase.findSimpleIdentifier(unit, code, 'p]');
     expect(ref.staticElement, new isInstanceOf<ParameterElement>());
   }
 
-  void test_commentReference_beforeGetter() {
+  test_commentReference_beforeGetter() async {
     String code = r'''
 abstract class A {
   /// [int]
   get g => null;
 }''';
     Source source = addSource(code);
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
-    CompilationUnit unit = _getResolvedLibraryUnit(source);
+    CompilationUnit unit = await _getResolvedLibraryUnit(source);
     {
       SimpleIdentifier ref =
           EngineTestCase.findSimpleIdentifier(unit, code, 'int]');
@@ -1155,7 +1155,7 @@
     }
   }
 
-  void test_commentReference_beforeMethod() {
+  test_commentReference_beforeMethod() async {
     String code = r'''
 abstract class A {
   /// [p1]
@@ -1168,10 +1168,10 @@
   md(int p5, {int p6});
 }''';
     Source source = addSource(code);
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
-    CompilationUnit unit = _getResolvedLibraryUnit(source);
+    CompilationUnit unit = await _getResolvedLibraryUnit(source);
     assertIsParameter(String search) {
       SimpleIdentifier ref =
           EngineTestCase.findSimpleIdentifier(unit, code, search);
@@ -1186,23 +1186,23 @@
     assertIsParameter('p6');
   }
 
-  void test_commentReference_class() {
+  test_commentReference_class() async {
     String code = r'''
 /// [foo]
 class A {
   foo() {}
 }''';
     Source source = addSource(code);
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
-    CompilationUnit unit = _getResolvedLibraryUnit(source);
+    CompilationUnit unit = await _getResolvedLibraryUnit(source);
     SimpleIdentifier ref =
         EngineTestCase.findSimpleIdentifier(unit, code, 'foo]');
     expect(ref.staticElement, new isInstanceOf<MethodElement>());
   }
 
-  void test_commentReference_setter() {
+  test_commentReference_setter() async {
     String code = r'''
 class A {
   /// [x] in A
@@ -1215,10 +1215,10 @@
 }
 ''';
     Source source = addSource(code);
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
-    CompilationUnit unit = _getResolvedLibraryUnit(source);
+    CompilationUnit unit = await _getResolvedLibraryUnit(source);
     {
       SimpleIdentifier ref =
           EngineTestCase.findSimpleIdentifier(unit, code, "x] in A");
@@ -1231,17 +1231,17 @@
     }
   }
 
-  void test_concreteClassWithAbstractMember() {
+  test_concreteClassWithAbstractMember() async {
     Source source = addSource(r'''
 abstract class A {
   m();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_concreteClassWithAbstractMember_inherited() {
+  test_concreteClassWithAbstractMember_inherited() async {
     Source source = addSource(r'''
 class A {
   m() {}
@@ -1249,12 +1249,12 @@
 class B extends A {
   m();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_conflictingInstanceGetterAndSuperclassMember_instance() {
+  test_conflictingInstanceGetterAndSuperclassMember_instance() async {
     Source source = addSource(r'''
 class A {
   get v => 0;
@@ -1262,55 +1262,55 @@
 class B extends A {
   get v => 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_conflictingStaticGetterAndInstanceSetter_thisClass() {
+  test_conflictingStaticGetterAndInstanceSetter_thisClass() async {
     Source source = addSource(r'''
 class A {
   static get x => 0;
   static set x(int p) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_conflictingStaticSetterAndInstanceMember_thisClass_method() {
+  test_conflictingStaticSetterAndInstanceMember_thisClass_method() async {
     Source source = addSource(r'''
 class A {
   static x() {}
   static set x(int p) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_const_constructor_with_named_generic_parameter() {
+  test_const_constructor_with_named_generic_parameter() async {
     Source source = addSource('''
 class C<T> {
   const C({T t});
 }
 const c = const C(t: 1);
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_const_dynamic() {
+  test_const_dynamic() async {
     Source source = addSource('''
 const Type d = dynamic;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constConstructorWithNonConstSuper_explicit() {
+  test_constConstructorWithNonConstSuper_explicit() async {
     Source source = addSource(r'''
 class A {
   const A();
@@ -1318,12 +1318,12 @@
 class B extends A {
   const B(): super();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constConstructorWithNonConstSuper_redirectingFactory() {
+  test_constConstructorWithNonConstSuper_redirectingFactory() async {
     Source source = addSource(r'''
 class A {
   A();
@@ -1334,12 +1334,12 @@
 class C extends A {
   const factory C() = B;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constConstructorWithNonConstSuper_unresolved() {
+  test_constConstructorWithNonConstSuper_unresolved() async {
     Source source = addSource(r'''
 class A {
   A.a();
@@ -1347,24 +1347,24 @@
 class B extends A {
   const B(): super();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
     verify([source]);
   }
 
-  void test_constConstructorWithNonFinalField_finalInstanceVar() {
+  test_constConstructorWithNonFinalField_finalInstanceVar() async {
     Source source = addSource(r'''
 class A {
   final int x = 0;
   const A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constConstructorWithNonFinalField_mixin() {
+  test_constConstructorWithNonFinalField_mixin() async {
     Source source = addSource(r'''
 class A {
   a() {}
@@ -1372,36 +1372,36 @@
 class B extends Object with A {
   const B();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN]);
     verify([source]);
   }
 
-  void test_constConstructorWithNonFinalField_static() {
+  test_constConstructorWithNonFinalField_static() async {
     Source source = addSource(r'''
 class A {
   static int x;
   const A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constConstructorWithNonFinalField_syntheticField() {
+  test_constConstructorWithNonFinalField_syntheticField() async {
     Source source = addSource(r'''
 class A {
   const A();
   set x(value) {}
   get x {return 0;}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constDeferredClass_new() {
-    resolveWithErrors(<String>[
+  test_constDeferredClass_new() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {
@@ -1416,16 +1416,16 @@
     ], <ErrorCode>[]);
   }
 
-  void test_constEval_functionTypeLiteral() {
+  test_constEval_functionTypeLiteral() async {
     Source source = addSource(r'''
 typedef F();
 const C = F;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constEval_propertyExtraction_fieldStatic_targetType() {
+  test_constEval_propertyExtraction_fieldStatic_targetType() async {
     addNamedSource(
         "/math.dart",
         r'''
@@ -1434,24 +1434,24 @@
     Source source = addSource(r'''
 import 'math.dart' as math;
 const C = math.PI;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constEval_propertyExtraction_methodStatic_targetType() {
+  test_constEval_propertyExtraction_methodStatic_targetType() async {
     Source source = addSource(r'''
 class A {
   const A();
   static m() {}
 }
 const C = A.m;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constEval_symbol() {
+  test_constEval_symbol() async {
     addNamedSource(
         "/math.dart",
         r'''
@@ -1460,12 +1460,12 @@
     Source source = addSource(r'''
 const C = #foo;
 foo() {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constEvalTypeBoolNumString_equal() {
+  test_constEvalTypeBoolNumString_equal() async {
     Source source = addSource(r'''
 class A {
   const A();
@@ -1490,11 +1490,11 @@
   const B.n1(num p) : v = p == null;
   const B.n2(num p) : v = null == p;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_constEvalTypeBoolNumString_notEqual() {
+  test_constEvalTypeBoolNumString_notEqual() async {
     Source source = addSource(r'''
 class A {
   const A();
@@ -1519,22 +1519,22 @@
   const B.n1(num p) : v = p != null;
   const B.n2(num p) : v = null != p;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constEvelTypeNum_String() {
+  test_constEvelTypeNum_String() async {
     Source source = addSource(r'''
 const String A = 'a';
 const String B = A + 'b';
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constMapKeyExpressionTypeImplementsEquals_abstract() {
+  test_constMapKeyExpressionTypeImplementsEquals_abstract() async {
     Source source = addSource(r'''
 abstract class B {
   final id;
@@ -1551,32 +1551,32 @@
 Map getMap() {
   return const { const C(0): 'Map: 0' };
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constNotInitialized_field() {
+  test_constNotInitialized_field() async {
     Source source = addSource(r'''
 class A {
   static const int x = 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constNotInitialized_local() {
+  test_constNotInitialized_local() async {
     Source source = addSource(r'''
 main() {
   const int x = 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constRedirectSkipsSupertype() {
+  test_constRedirectSkipsSupertype() async {
     // Since C redirects to C.named, it doesn't implicitly refer to B's
     // unnamed constructor.  Therefore there is no cycle.
     Source source = addSource('''
@@ -1591,23 +1591,23 @@
 }
 const y = const C();
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constructorDeclaration_scope_signature() {
+  test_constructorDeclaration_scope_signature() async {
     Source source = addSource(r'''
 const app = 0;
 class A {
   A(@app int app) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constWithNonConstantArgument_constField() {
+  test_constWithNonConstantArgument_constField() async {
     Source source = addSource(r'''
 class A {
   const A(x);
@@ -1615,34 +1615,34 @@
 main() {
   const A(double.INFINITY);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constWithNonConstantArgument_literals() {
+  test_constWithNonConstantArgument_literals() async {
     Source source = addSource(r'''
 class A {
   const A(a, b, c, d);
 }
 f() { return const A(true, 0, 1.0, '2'); }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constWithTypeParameters_direct() {
+  test_constWithTypeParameters_direct() async {
     Source source = addSource(r'''
 class A<T> {
   static const V = const A<int>();
   const A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constWithUndefinedConstructor() {
+  test_constWithUndefinedConstructor() async {
     Source source = addSource(r'''
 class A {
   const A.name();
@@ -1650,12 +1650,12 @@
 f() {
   return const A.name();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_constWithUndefinedConstructorDefault() {
+  test_constWithUndefinedConstructorDefault() async {
     Source source = addSource(r'''
 class A {
   const A();
@@ -1663,33 +1663,33 @@
 f() {
   return const A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_defaultValueInFunctionTypeAlias() {
+  test_defaultValueInFunctionTypeAlias() async {
     Source source = addSource("typedef F([x]);");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_defaultValueInFunctionTypedParameter_named() {
+  test_defaultValueInFunctionTypedParameter_named() async {
     Source source = addSource("f(g({p})) {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_defaultValueInFunctionTypedParameter_optional() {
+  test_defaultValueInFunctionTypedParameter_optional() async {
     Source source = addSource("f(g([p])) {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deprecatedMemberUse_hide() {
+  test_deprecatedMemberUse_hide() async {
     Source source = addSource(r'''
 library lib;
 import 'lib1.dart' hide B;
@@ -1701,12 +1701,12 @@
 class A {}
 @deprecated
 class B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_duplicateDefinition_emptyName() {
+  test_duplicateDefinition_emptyName() async {
     // Note: This code has two FunctionElements '() {}' with an empty name,
     // this tests that the empty string is not put into the scope
     // (more than once).
@@ -1715,19 +1715,19 @@
   'a' : () {},
   'b' : () {}
 };''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_duplicateDefinition_getter() {
+  test_duplicateDefinition_getter() async {
     Source source = addSource("bool get a => true;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_duplicatePart() {
+  test_duplicatePart() async {
     addNamedSource('/part1.dart', 'part of lib;');
     addNamedSource('/part2.dart', 'part of lib;');
     Source source = addSource(r'''
@@ -1735,116 +1735,116 @@
 part 'part1.dart';
 part 'part2.dart';
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_dynamicIdentifier() {
+  test_dynamicIdentifier() async {
     Source source = addSource(r'''
 main() {
   var v = dynamic;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_empty_generator_async() {
+  test_empty_generator_async() async {
     Source source = addSource('''
 import 'dart:async';
 Stream<int> f() async* {
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_empty_generator_sync() {
+  test_empty_generator_sync() async {
     Source source = addSource('''
 Iterable<int> f() sync* {
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_expectedOneListTypeArgument() {
+  test_expectedOneListTypeArgument() async {
     Source source = addSource(r'''
 main() {
   <int> [];
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_expectedTwoMapTypeArguments() {
+  test_expectedTwoMapTypeArguments() async {
     Source source = addSource(r'''
 main() {
   <int, int> {};
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_exportDuplicatedLibraryUnnamed() {
+  test_exportDuplicatedLibraryUnnamed() async {
     Source source = addSource(r'''
 library test;
 export 'lib1.dart';
 export 'lib2.dart';''');
     addNamedSource("/lib1.dart", "");
     addNamedSource("/lib2.dart", "");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_exportOfNonLibrary_libraryDeclared() {
+  test_exportOfNonLibrary_libraryDeclared() async {
     Source source = addSource(r'''
 library L;
 export 'lib1.dart';''');
     addNamedSource("/lib1.dart", "library lib1;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_exportOfNonLibrary_libraryNotDeclared() {
+  test_exportOfNonLibrary_libraryNotDeclared() async {
     Source source = addSource(r'''
 library L;
 export 'lib1.dart';''');
     addNamedSource("/lib1.dart", "");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_extraPositionalArguments_function() {
+  test_extraPositionalArguments_function() async {
     Source source = addSource(r'''
 f(p1, p2) {}
 main() {
   f(1, 2);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_extraPositionalArguments_Function() {
+  test_extraPositionalArguments_Function() async {
     Source source = addSource(r'''
 f(Function a) {
   a(1, 2);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_extraPositionalArguments_implicitConstructor() {
+  test_extraPositionalArguments_implicitConstructor() async {
     Source source = addSource(r'''
 class A<E extends num> {
   A(E x, E y);
@@ -1854,12 +1854,12 @@
 void main() {
    B<int> x = new B<int>(0,0);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_extraPositionalArguments_typedef_local() {
+  test_extraPositionalArguments_typedef_local() async {
     Source source = addSource(r'''
 typedef A(p1, p2);
 A getA() => null;
@@ -1867,79 +1867,79 @@
   A a = getA();
   a(1, 2);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_extraPositionalArguments_typedef_parameter() {
+  test_extraPositionalArguments_typedef_parameter() async {
     Source source = addSource(r'''
 typedef A(p1, p2);
 f(A a) {
   a(1, 2);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldInitializedByMultipleInitializers() {
+  test_fieldInitializedByMultipleInitializers() async {
     Source source = addSource(r'''
 class A {
   int x;
   int y;
   A() : x = 0, y = 0 {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldInitializedInInitializerAndDeclaration_fieldNotFinal() {
+  test_fieldInitializedInInitializerAndDeclaration_fieldNotFinal() async {
     Source source = addSource(r'''
 class A {
   int x = 0;
   A() : x = 1 {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldInitializedInInitializerAndDeclaration_finalFieldNotSet() {
+  test_fieldInitializedInInitializerAndDeclaration_finalFieldNotSet() async {
     Source source = addSource(r'''
 class A {
   final int x;
   A() : x = 1 {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldInitializerOutsideConstructor() {
+  test_fieldInitializerOutsideConstructor() async {
     Source source = addSource(r'''
 class A {
   int x;
   A(this.x) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldInitializerOutsideConstructor_defaultParameters() {
+  test_fieldInitializerOutsideConstructor_defaultParameters() async {
     Source source = addSource(r'''
 class A {
   int x;
   A([this.x]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldInitializerRedirectingConstructor_super() {
+  test_fieldInitializerRedirectingConstructor_super() async {
     Source source = addSource(r'''
 class A {
   A() {}
@@ -1948,143 +1948,143 @@
   int x;
   B(this.x) : super();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_finalInitializedInDeclarationAndConstructor_initializer() {
+  test_finalInitializedInDeclarationAndConstructor_initializer() async {
     Source source = addSource(r'''
 class A {
   final x;
   A() : x = 1 {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_finalInitializedInDeclarationAndConstructor_initializingFormal() {
+  test_finalInitializedInDeclarationAndConstructor_initializingFormal() async {
     Source source = addSource(r'''
 class A {
   final x;
   A(this.x) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_finalNotInitialized_atDeclaration() {
+  test_finalNotInitialized_atDeclaration() async {
     Source source = addSource(r'''
 class A {
   final int x = 0;
   A() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_finalNotInitialized_fieldFormal() {
+  test_finalNotInitialized_fieldFormal() async {
     Source source = addSource(r'''
 class A {
   final int x = 0;
   A() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_finalNotInitialized_functionTypedFieldFormal() {
+  test_finalNotInitialized_functionTypedFieldFormal() async {
     Source source = addSource(r'''
 class A {
   final Function x;
   A(int this.x(int p)) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_finalNotInitialized_hasNativeClause_hasConstructor() {
+  test_finalNotInitialized_hasNativeClause_hasConstructor() async {
     Source source = addSource(r'''
 class A native 'something' {
   final int x;
   A() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.NATIVE_CLAUSE_IN_NON_SDK_CODE]);
     verify([source]);
   }
 
-  void test_finalNotInitialized_hasNativeClause_noConstructor() {
+  test_finalNotInitialized_hasNativeClause_noConstructor() async {
     Source source = addSource(r'''
 class A native 'something' {
   final int x;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.NATIVE_CLAUSE_IN_NON_SDK_CODE]);
     verify([source]);
   }
 
-  void test_finalNotInitialized_initializer() {
+  test_finalNotInitialized_initializer() async {
     Source source = addSource(r'''
 class A {
   final int x;
   A() : x = 0 {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_finalNotInitialized_redirectingConstructor() {
+  test_finalNotInitialized_redirectingConstructor() async {
     Source source = addSource(r'''
 class A {
   final int x;
   A(this.x);
   A.named() : this (42);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_functionDeclaration_scope_returnType() {
+  test_functionDeclaration_scope_returnType() async {
     Source source = addSource("int f(int) { return 0; }");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_functionDeclaration_scope_signature() {
+  test_functionDeclaration_scope_signature() async {
     Source source = addSource(r'''
 const app = 0;
 f(@app int app) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_functionTypeAlias_scope_returnType() {
+  test_functionTypeAlias_scope_returnType() async {
     Source source = addSource("typedef int f(int);");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_functionTypeAlias_scope_signature() {
+  test_functionTypeAlias_scope_signature() async {
     Source source = addSource(r'''
 const app = 0;
 typedef int f(@app int app);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_functionWithoutCall() {
+  test_functionWithoutCall() async {
     Source source = addSource(r'''
 abstract class A implements Function {
 }
@@ -2096,31 +2096,31 @@
 }
 class D extends C {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_functionWithoutCall_doesNotImplementFunction() {
+  test_functionWithoutCall_doesNotImplementFunction() async {
     Source source = addSource("class A {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_functionWithoutCall_staticCallMethod() {
+  test_functionWithoutCall_staticCallMethod() async {
     Source source = addSource(r'''
 class A { }
 class B extends A {
   static call() { }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_functionWithoutCall_withNoSuchMethod() {
+  test_functionWithoutCall_withNoSuchMethod() async {
     // 16078
     Source source = addSource(r'''
 class A implements Function {
@@ -2128,36 +2128,36 @@
     return 42;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_functionWithoutCall_withNoSuchMethod_mixin() {
+  test_functionWithoutCall_withNoSuchMethod_mixin() async {
     Source source = addSource(r'''
 class A {
   noSuchMethod(inv) {}
 }
 class B extends Object with A implements Function {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_functionWithoutCall_withNoSuchMethod_superclass() {
+  test_functionWithoutCall_withNoSuchMethod_superclass() async {
     Source source = addSource(r'''
 class A {
   noSuchMethod(inv) {}
 }
 class B extends A implements Function {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_implicitConstructorDependencies() {
+  test_implicitConstructorDependencies() async {
     // No warning should be generated for the code below; this requires that
     // implicit constructors are generated for C1 before C2, even though C1
     // follows C2 in the file.  See dartbug.com/21600.
@@ -2175,12 +2175,12 @@
   new C2(5);
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_implicitThisReferenceInInitializer_constructorName() {
+  test_implicitThisReferenceInInitializer_constructorName() async {
     Source source = addSource(r'''
 class A {
   A.named() {}
@@ -2189,23 +2189,23 @@
   var v;
   B() : v = new A.named();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_implicitThisReferenceInInitializer_importPrefix() {
+  test_implicitThisReferenceInInitializer_importPrefix() async {
     Source source = addSource(r'''
 import 'dart:async' as abstract;
 class A {
   var v = new abstract.Completer();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_implicitThisReferenceInInitializer_prefixedIdentifier() {
+  test_implicitThisReferenceInInitializer_prefixedIdentifier() async {
     Source source = addSource(r'''
 class A {
   var f;
@@ -2214,12 +2214,12 @@
   var v;
   B(A a) : v = a.f;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_implicitThisReferenceInInitializer_qualifiedMethodInvocation() {
+  test_implicitThisReferenceInInitializer_qualifiedMethodInvocation() async {
     Source source = addSource(r'''
 class A {
   f() {}
@@ -2228,12 +2228,12 @@
   var v;
   B() : v = new A().f();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_implicitThisReferenceInInitializer_qualifiedPropertyAccess() {
+  test_implicitThisReferenceInInitializer_qualifiedPropertyAccess() async {
     Source source = addSource(r'''
 class A {
   var f;
@@ -2242,101 +2242,101 @@
   var v;
   B() : v = new A().f;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_implicitThisReferenceInInitializer_staticField_thisClass() {
+  test_implicitThisReferenceInInitializer_staticField_thisClass() async {
     Source source = addSource(r'''
 class A {
   var v;
   A() : v = f;
   static var f;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_implicitThisReferenceInInitializer_staticGetter() {
+  test_implicitThisReferenceInInitializer_staticGetter() async {
     Source source = addSource(r'''
 class A {
   var v;
   A() : v = f;
   static get f => 42;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_implicitThisReferenceInInitializer_staticMethod() {
+  test_implicitThisReferenceInInitializer_staticMethod() async {
     Source source = addSource(r'''
 class A {
   var v;
   A() : v = f();
   static f() => 42;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_implicitThisReferenceInInitializer_topLevelField() {
+  test_implicitThisReferenceInInitializer_topLevelField() async {
     Source source = addSource(r'''
 class A {
   var v;
   A() : v = f;
 }
 var f = 42;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_implicitThisReferenceInInitializer_topLevelFunction() {
+  test_implicitThisReferenceInInitializer_topLevelFunction() async {
     Source source = addSource(r'''
 class A {
   var v;
   A() : v = f();
 }
 f() => 42;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_implicitThisReferenceInInitializer_topLevelGetter() {
+  test_implicitThisReferenceInInitializer_topLevelGetter() async {
     Source source = addSource(r'''
 class A {
   var v;
   A() : v = f;
 }
 get f => 42;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_implicitThisReferenceInInitializer_typeParameter() {
+  test_implicitThisReferenceInInitializer_typeParameter() async {
     Source source = addSource(r'''
 class A<T> {
   var v;
   A(p) : v = (p is T);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_importDuplicatedLibraryName() {
+  test_importDuplicatedLibraryName() async {
     Source source = addSource(r'''
 library test;
 import 'lib.dart';
 import 'lib.dart';''');
     addNamedSource("/lib.dart", "library lib;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       HintCode.UNUSED_IMPORT,
       HintCode.UNUSED_IMPORT,
@@ -2345,14 +2345,14 @@
     verify([source]);
   }
 
-  void test_importDuplicatedLibraryUnnamed() {
+  test_importDuplicatedLibraryUnnamed() async {
     Source source = addSource(r'''
 library test;
 import 'lib1.dart';
 import 'lib2.dart';''');
     addNamedSource("/lib1.dart", "");
     addNamedSource("/lib2.dart", "");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       // No warning on duplicate import (https://github.com/dart-lang/sdk/issues/24156)
       HintCode.UNUSED_IMPORT,
@@ -2361,7 +2361,7 @@
     verify([source]);
   }
 
-  void test_importOfNonLibrary_libraryDeclared() {
+  test_importOfNonLibrary_libraryDeclared() async {
     Source source = addSource(r'''
 library lib;
 import 'part.dart';
@@ -2371,23 +2371,23 @@
         r'''
 library lib1;
 class A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_importOfNonLibrary_libraryNotDeclared() {
+  test_importOfNonLibrary_libraryNotDeclared() async {
     Source source = addSource(r'''
 library lib;
 import 'part.dart';
 A a;''');
     addNamedSource("/part.dart", "class A {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_importPrefixes_withFirstLetterDifference() {
+  test_importPrefixes_withFirstLetterDifference() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart' as math;
@@ -2406,12 +2406,12 @@
         r'''
 library lib2;
 test2() {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_inconsistentCaseExpressionTypes() {
+  test_inconsistentCaseExpressionTypes() async {
     Source source = addSource(r'''
 f(var p) {
   switch (p) {
@@ -2421,12 +2421,12 @@
       break;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_inconsistentMethodInheritance_accessors_typeParameter2() {
+  test_inconsistentMethodInheritance_accessors_typeParameter2() async {
     Source source = addSource(r'''
 abstract class A<E> {
   E get x {return null;}
@@ -2435,12 +2435,12 @@
   E get x {return null;}
 }
 class C<E> extends A<E> implements B<E> {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_inconsistentMethodInheritance_accessors_typeParameters1() {
+  test_inconsistentMethodInheritance_accessors_typeParameters1() async {
     Source source = addSource(r'''
 abstract class A<E> {
   E get x;
@@ -2451,12 +2451,12 @@
 class C<E> implements A<E>, B<E> {
   E get x => null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_inconsistentMethodInheritance_accessors_typeParameters_diamond() {
+  test_inconsistentMethodInheritance_accessors_typeParameters_diamond() async {
     Source source = addSource(r'''
 abstract class F<E> extends B<E> {}
 class D<E> extends F<E> {
@@ -2470,12 +2470,12 @@
 }
 class A<E> extends B<E> implements D<E> {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_inconsistentMethodInheritance_methods_typeParameter2() {
+  test_inconsistentMethodInheritance_methods_typeParameter2() async {
     Source source = addSource(r'''
 class A<E> {
   x(E e) {}
@@ -2486,12 +2486,12 @@
 class C<E> extends A<E> implements B<E> {
   x(E e) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_inconsistentMethodInheritance_methods_typeParameters1() {
+  test_inconsistentMethodInheritance_methods_typeParameters1() async {
     Source source = addSource(r'''
 class A<E> {
   x(E e) {}
@@ -2502,12 +2502,12 @@
 class C<E> implements A<E>, B<E> {
   x(E e) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_inconsistentMethodInheritance_overrideTrumpsInherits_getter() {
+  test_inconsistentMethodInheritance_overrideTrumpsInherits_getter() async {
     // 16134
     Source source = addSource(r'''
 class B<S> {
@@ -2519,12 +2519,12 @@
 class C extends B<double> implements I<int> {
   num get g => null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_inconsistentMethodInheritance_overrideTrumpsInherits_method() {
+  test_inconsistentMethodInheritance_overrideTrumpsInherits_method() async {
     // 16134
     Source source = addSource(r'''
 class B<S> {
@@ -2536,12 +2536,12 @@
 class C extends B<double> implements I<int> {
   m(num n) => null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_inconsistentMethodInheritance_overrideTrumpsInherits_setter() {
+  test_inconsistentMethodInheritance_overrideTrumpsInherits_setter() async {
     // 16134
     Source source = addSource(r'''
 class B<S> {
@@ -2553,12 +2553,12 @@
 class C extends B<double> implements I<int> {
   set t(num n) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_inconsistentMethodInheritance_simple() {
+  test_inconsistentMethodInheritance_simple() async {
     Source source = addSource(r'''
 abstract class A {
   x();
@@ -2569,23 +2569,23 @@
 class C implements A, B {
   x() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_initializingFormalForNonExistentField() {
+  test_initializingFormalForNonExistentField() async {
     Source source = addSource(r'''
 class A {
   int x;
   A(this.x) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_instance_creation_inside_annotation() {
+  test_instance_creation_inside_annotation() async {
     Source source = addSource('''
 class C {
   const C();
@@ -2597,12 +2597,12 @@
 @D(const C())
 f() {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_instanceAccessToStaticMember_fromComment() {
+  test_instanceAccessToStaticMember_fromComment() async {
     Source source = addSource(r'''
 class A {
   static m() {}
@@ -2610,23 +2610,23 @@
 /// [A.m]
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_instanceAccessToStaticMember_topLevel() {
+  test_instanceAccessToStaticMember_topLevel() async {
     Source source = addSource(r'''
 m() {}
 main() {
   m();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_instanceMemberAccessFromStatic_fromComment() {
+  test_instanceMemberAccessFromStatic_fromComment() async {
     Source source = addSource(r'''
 class A {
   m() {}
@@ -2634,12 +2634,12 @@
   static foo() {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_instanceMethodNameCollidesWithSuperclassStatic_field() {
+  test_instanceMethodNameCollidesWithSuperclassStatic_field() async {
     Source source = addSource(r'''
 import 'lib.dart';
 class B extends A {
@@ -2652,12 +2652,12 @@
 class A {
   static var _m;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_instanceMethodNameCollidesWithSuperclassStatic_method() {
+  test_instanceMethodNameCollidesWithSuperclassStatic_method() async {
     Source source = addSource(r'''
 import 'lib.dart';
 class B extends A {
@@ -2670,23 +2670,23 @@
 class A {
   static _m() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidAnnotation_constantVariable_field() {
+  test_invalidAnnotation_constantVariable_field() async {
     Source source = addSource(r'''
 @A.C
 class A {
   static const C = 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidAnnotation_constantVariable_field_importWithPrefix() {
+  test_invalidAnnotation_constantVariable_field_importWithPrefix() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -2699,23 +2699,23 @@
 @p.A.C
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidAnnotation_constantVariable_topLevel() {
+  test_invalidAnnotation_constantVariable_topLevel() async {
     Source source = addSource(r'''
 const C = 0;
 @C
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidAnnotation_constantVariable_topLevel_importWithPrefix() {
+  test_invalidAnnotation_constantVariable_topLevel_importWithPrefix() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -2726,12 +2726,12 @@
 @p.C
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidAnnotation_constConstructor_importWithPrefix() {
+  test_invalidAnnotation_constConstructor_importWithPrefix() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -2744,12 +2744,12 @@
 @p.A(42)
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidAnnotation_constConstructor_named_importWithPrefix() {
+  test_invalidAnnotation_constConstructor_named_importWithPrefix() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -2762,24 +2762,24 @@
 @p.A.named(42)
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidAssignment() {
+  test_invalidAssignment() async {
     Source source = addSource(r'''
 f() {
   var x;
   var y;
   x = y;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidAssignment_compoundAssignment() {
+  test_invalidAssignment_compoundAssignment() async {
     Source source = addSource(r'''
 class byte {
   int _value;
@@ -2791,54 +2791,54 @@
   byte b = new byte(52);
   b += 3;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidAssignment_defaultValue_named() {
+  test_invalidAssignment_defaultValue_named() async {
     Source source = addSource(r'''
 f({String x: '0'}) {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidAssignment_defaultValue_optional() {
+  test_invalidAssignment_defaultValue_optional() async {
     Source source = addSource(r'''
 f([String x = '0']) {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidAssignment_ifNullAssignment_compatibleType() {
+  test_invalidAssignment_ifNullAssignment_compatibleType() async {
     Source source = addSource('''
 void f(int i) {
   num n;
   n ??= i;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidAssignment_ifNullAssignment_sameType() {
+  test_invalidAssignment_ifNullAssignment_sameType() async {
     Source source = addSource('''
 void f(int i) {
   int j;
   j ??= i;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidAssignment_implicitlyImplementFunctionViaCall_1() {
+  test_invalidAssignment_implicitlyImplementFunctionViaCall_1() async {
     // 18341
     //
     // This test and
@@ -2854,12 +2854,12 @@
 }
 typedef int IntToInt(int x);
 IntToInt f = new I();''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidAssignment_implicitlyImplementFunctionViaCall_2() {
+  test_invalidAssignment_implicitlyImplementFunctionViaCall_2() async {
     // 18341
     //
     // Here 'C' checks as a subtype of 'I', but 'C' does not
@@ -2875,12 +2875,12 @@
 }
 typedef int IntToInt(int x);
 IntToInt f = new C();''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidAssignment_implicitlyImplementFunctionViaCall_3() {
+  test_invalidAssignment_implicitlyImplementFunctionViaCall_3() async {
     // 18341
     //
     // Like 'test_invalidAssignment_implicitlyImplementFunctionViaCall_2()',
@@ -2894,12 +2894,12 @@
 }
 typedef int IntToInt(int x);
 Function f = new C();''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidAssignment_implicitlyImplementFunctionViaCall_4() {
+  test_invalidAssignment_implicitlyImplementFunctionViaCall_4() async {
     // 18341
     //
     // Like 'test_invalidAssignment_implicitlyImplementFunctionViaCall_2()',
@@ -2920,33 +2920,33 @@
 }
 typedef int VoidToInt();
 VoidToInt f = new C();''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidAssignment_toDynamic() {
+  test_invalidAssignment_toDynamic() async {
     Source source = addSource(r'''
 f() {
   var g;
   g = () => 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidFactoryNameNotAClass() {
+  test_invalidFactoryNameNotAClass() async {
     Source source = addSource(r'''
 class A {
   factory A() => null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidIdentifierInAsync() {
+  test_invalidIdentifierInAsync() async {
     Source source = addSource(r'''
 class A {
   m() {
@@ -2955,12 +2955,12 @@
     int yield;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidMethodOverrideNamedParamType() {
+  test_invalidMethodOverrideNamedParamType() async {
     Source source = addSource(r'''
 class A {
   m({int a}) {}
@@ -2968,12 +2968,12 @@
 class B implements A {
   m({int a, int b}) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverrideDifferentDefaultValues_named() {
+  test_invalidOverrideDifferentDefaultValues_named() async {
     Source source = addSource(r'''
 class A {
   m({int p : 0}) {}
@@ -2981,12 +2981,12 @@
 class B extends A {
   m({int p : 0}) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverrideDifferentDefaultValues_named_function() {
+  test_invalidOverrideDifferentDefaultValues_named_function() async {
     Source source = addSource(r'''
 nothing() => 'nothing';
 class A {
@@ -2995,12 +2995,12 @@
 class B extends A {
   thing(String a, {orElse : nothing}) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverrideDifferentDefaultValues_positional() {
+  test_invalidOverrideDifferentDefaultValues_positional() async {
     Source source = addSource(r'''
 class A {
   m([int p = 0]) {}
@@ -3008,12 +3008,12 @@
 class B extends A {
   m([int p = 0]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverrideDifferentDefaultValues_positional_changedOrder() {
+  test_invalidOverrideDifferentDefaultValues_positional_changedOrder() async {
     Source source = addSource(r'''
 class A {
   m([int a = 0, String b = '0']) {}
@@ -3021,12 +3021,12 @@
 class B extends A {
   m([int b = 0, String a = '0']) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverrideDifferentDefaultValues_positional_function() {
+  test_invalidOverrideDifferentDefaultValues_positional_function() async {
     Source source = addSource(r'''
 nothing() => 'nothing';
 class A {
@@ -3035,12 +3035,12 @@
 class B extends A {
   thing(String a, [orElse = nothing]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverrideNamed_unorderedNamedParameter() {
+  test_invalidOverrideNamed_unorderedNamedParameter() async {
     Source source = addSource(r'''
 class A {
   m({a, b}) {}
@@ -3048,12 +3048,12 @@
 class B extends A {
   m({b, a}) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverrideRequired_less() {
+  test_invalidOverrideRequired_less() async {
     Source source = addSource(r'''
 class A {
   m(a, b) {}
@@ -3061,12 +3061,12 @@
 class B extends A {
   m(a, [b]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverrideRequired_same() {
+  test_invalidOverrideRequired_same() async {
     Source source = addSource(r'''
 class A {
   m(a) {}
@@ -3074,12 +3074,12 @@
 class B extends A {
   m(a) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverrideReturnType_returnType_interface() {
+  test_invalidOverrideReturnType_returnType_interface() async {
     Source source = addNamedSource(
         "/test.dart",
         r'''
@@ -3089,12 +3089,12 @@
 class B implements A {
   int m() { return 1; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverrideReturnType_returnType_interface2() {
+  test_invalidOverrideReturnType_returnType_interface2() async {
     Source source = addNamedSource(
         "/test.dart",
         r'''
@@ -3106,12 +3106,12 @@
 class C implements B {
   int m() { return 1; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverrideReturnType_returnType_mixin() {
+  test_invalidOverrideReturnType_returnType_mixin() async {
     Source source = addNamedSource(
         "/test.dart",
         r'''
@@ -3121,12 +3121,12 @@
 class B extends Object with A {
   int m() { return 1; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverrideReturnType_returnType_parameterizedTypes() {
+  test_invalidOverrideReturnType_returnType_parameterizedTypes() async {
     Source source = addSource(r'''
 abstract class A<E> {
   List<E> m();
@@ -3134,12 +3134,12 @@
 class B extends A<dynamic> {
   List<dynamic> m() { return new List<dynamic>(); }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverrideReturnType_returnType_sameType() {
+  test_invalidOverrideReturnType_returnType_sameType() async {
     Source source = addNamedSource(
         "/test.dart",
         r'''
@@ -3149,12 +3149,12 @@
 class B extends A {
   int m() { return 1; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverrideReturnType_returnType_superclass() {
+  test_invalidOverrideReturnType_returnType_superclass() async {
     Source source = addNamedSource(
         "/test.dart",
         r'''
@@ -3164,12 +3164,12 @@
 class B extends A {
   int m() { return 1; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverrideReturnType_returnType_superclass2() {
+  test_invalidOverrideReturnType_returnType_superclass2() async {
     Source source = addNamedSource(
         "/test.dart",
         r'''
@@ -3181,12 +3181,12 @@
 class C extends B {
   int m() { return 1; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverrideReturnType_returnType_void() {
+  test_invalidOverrideReturnType_returnType_void() async {
     Source source = addSource(r'''
 class A {
   void m() {}
@@ -3194,72 +3194,72 @@
 class B extends A {
   int m() { return 0; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidReferenceToThis_constructor() {
+  test_invalidReferenceToThis_constructor() async {
     Source source = addSource(r'''
 class A {
   A() {
     var v = this;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidReferenceToThis_instanceMethod() {
+  test_invalidReferenceToThis_instanceMethod() async {
     Source source = addSource(r'''
 class A {
   m() {
     var v = this;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidTypeArgumentForKey() {
+  test_invalidTypeArgumentForKey() async {
     Source source = addSource(r'''
 class A {
   m() {
     return const <int, int>{};
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidTypeArgumentInConstList() {
+  test_invalidTypeArgumentInConstList() async {
     Source source = addSource(r'''
 class A<E> {
   m() {
     return <E>[];
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidTypeArgumentInConstMap() {
+  test_invalidTypeArgumentInConstMap() async {
     Source source = addSource(r'''
 class A<E> {
   m() {
     return <String, E>{};
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invocationOfNonFunction_dynamic() {
+  test_invocationOfNonFunction_dynamic() async {
     Source source = addSource(r'''
 class A {
   var f;
@@ -3269,12 +3269,12 @@
     f();
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invocationOfNonFunction_functionTypeTypeParameter() {
+  test_invocationOfNonFunction_functionTypeTypeParameter() async {
     Source source = addSource(r'''
 typedef void Action<T>(T x);
 class C<T, U extends Action<T>> {
@@ -3286,12 +3286,12 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invocationOfNonFunction_getter() {
+  test_invocationOfNonFunction_getter() async {
     Source source = addSource(r'''
 class A {
   var g;
@@ -3300,35 +3300,35 @@
   A a;
   a.g();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invocationOfNonFunction_localVariable() {
+  test_invocationOfNonFunction_localVariable() async {
     Source source = addSource(r'''
 f() {
   var g;
   g();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invocationOfNonFunction_localVariable_dynamic() {
+  test_invocationOfNonFunction_localVariable_dynamic() async {
     Source source = addSource(r'''
 f() {}
 main() {
   var v = f;
   v();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invocationOfNonFunction_localVariable_dynamic2() {
+  test_invocationOfNonFunction_localVariable_dynamic2() async {
     Source source = addSource(r'''
 f() {}
 main() {
@@ -3336,23 +3336,23 @@
   v = 1;
   v();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invocationOfNonFunction_Object() {
+  test_invocationOfNonFunction_Object() async {
     Source source = addSource(r'''
 main() {
   Object v = null;
   v();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invocationOfNonFunction_proxyOnFunctionClass() {
+  test_invocationOfNonFunction_proxyOnFunctionClass() async {
     // 16078
     Source source = addSource(r'''
 @proxy
@@ -3365,12 +3365,12 @@
   Functor f = new Functor();
   f();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_issue_24191() {
+  test_issue_24191() async {
     Source source = addSource('''
 import 'dart:async';
 
@@ -3381,22 +3381,22 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_listElementTypeNotAssignable() {
+  test_listElementTypeNotAssignable() async {
     Source source = addSource(r'''
 var v1 = <int> [42];
 var v2 = const <int> [42];''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_loadLibraryDefined() {
-    resolveWithErrors(<String>[
+  test_loadLibraryDefined() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 foo() => 22;''',
@@ -3408,117 +3408,117 @@
     ], <ErrorCode>[]);
   }
 
-  void test_local_generator_async() {
+  test_local_generator_async() async {
     Source source = addSource('''
 f() {
   return () async* { yield 0; };
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_local_generator_sync() {
+  test_local_generator_sync() async {
     Source source = addSource('''
 f() {
   return () sync* { yield 0; };
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_mapKeyTypeNotAssignable() {
+  test_mapKeyTypeNotAssignable() async {
     Source source = addSource("var v = <String, int > {'a' : 1};");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_memberWithClassName_setter() {
+  test_memberWithClassName_setter() async {
     Source source = addSource(r'''
 class A {
   set A(v) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_methodDeclaration_scope_signature() {
+  test_methodDeclaration_scope_signature() async {
     Source source = addSource(r'''
 const app = 0;
 class A {
   foo(@app int app) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_misMatchedGetterAndSetterTypes_instance_sameTypes() {
+  test_misMatchedGetterAndSetterTypes_instance_sameTypes() async {
     Source source = addSource(r'''
 class C {
   int get x => 0;
   set x(int v) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_misMatchedGetterAndSetterTypes_instance_unspecifiedGetter() {
+  test_misMatchedGetterAndSetterTypes_instance_unspecifiedGetter() async {
     Source source = addSource(r'''
 class C {
   get x => 0;
   set x(String v) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_misMatchedGetterAndSetterTypes_instance_unspecifiedSetter() {
+  test_misMatchedGetterAndSetterTypes_instance_unspecifiedSetter() async {
     Source source = addSource(r'''
 class C {
   int get x => 0;
   set x(v) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_misMatchedGetterAndSetterTypes_topLevel_sameTypes() {
+  test_misMatchedGetterAndSetterTypes_topLevel_sameTypes() async {
     Source source = addSource(r'''
 int get x => 0;
 set x(int v) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_misMatchedGetterAndSetterTypes_topLevel_unspecifiedGetter() {
+  test_misMatchedGetterAndSetterTypes_topLevel_unspecifiedGetter() async {
     Source source = addSource(r'''
 get x => 0;
 set x(String v) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_misMatchedGetterAndSetterTypes_topLevel_unspecifiedSetter() {
+  test_misMatchedGetterAndSetterTypes_topLevel_unspecifiedSetter() async {
     Source source = addSource(r'''
 int get x => 0;
 set x(v) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_missingEnumConstantInSwitch_all() {
+  test_missingEnumConstantInSwitch_all() async {
     Source source = addSource(r'''
 enum E { A, B, C }
 
@@ -3529,12 +3529,12 @@
     case E.C: break;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_missingEnumConstantInSwitch_default() {
+  test_missingEnumConstantInSwitch_default() async {
     Source source = addSource(r'''
 enum E { A, B, C }
 
@@ -3544,12 +3544,12 @@
     default: break;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_mixedReturnTypes_differentScopes() {
+  test_mixedReturnTypes_differentScopes() async {
     Source source = addSource(r'''
 class C {
   m(int x) {
@@ -3560,23 +3560,23 @@
     return 0;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_mixedReturnTypes_ignoreImplicit() {
+  test_mixedReturnTypes_ignoreImplicit() async {
     Source source = addSource(r'''
 f(bool p) {
   if (p) return 42;
   // implicit 'return;' is ignored
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_mixedReturnTypes_ignoreImplicit2() {
+  test_mixedReturnTypes_ignoreImplicit2() async {
     Source source = addSource(r'''
 f(bool p) {
   if (p) {
@@ -3586,12 +3586,12 @@
   }
   // implicit 'return;' is ignored
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_mixedReturnTypes_sameKind() {
+  test_mixedReturnTypes_sameKind() async {
     Source source = addSource(r'''
 class C {
   m(int x) {
@@ -3601,163 +3601,163 @@
     return 0;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_mixinDeclaresConstructor() {
+  test_mixinDeclaresConstructor() async {
     Source source = addSource(r'''
 class A {
   m() {}
 }
 class B extends Object with A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_mixinDeclaresConstructor_factory() {
+  test_mixinDeclaresConstructor_factory() async {
     Source source = addSource(r'''
 class A {
   factory A() => null;
 }
 class B extends Object with A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_mixinInheritsFromNotObject_classDeclaration_extends() {
+  test_mixinInheritsFromNotObject_classDeclaration_extends() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
-    resetWithOptions(options);
+    resetWith(options: options);
     Source source = addSource(r'''
 class A {}
 class B extends A {}
 class C extends Object with B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_mixinInheritsFromNotObject_classDeclaration_mixTypeAlias() {
+  test_mixinInheritsFromNotObject_classDeclaration_mixTypeAlias() async {
     Source source = addSource(r'''
 class A {}
 class B = Object with A;
 class C extends Object with B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_mixinInheritsFromNotObject_classDeclaration_with() {
+  test_mixinInheritsFromNotObject_classDeclaration_with() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
-    resetWithOptions(options);
+    resetWith(options: options);
     Source source = addSource(r'''
 class A {}
 class B extends Object with A {}
 class C extends Object with B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_mixinInheritsFromNotObject_typeAlias_extends() {
+  test_mixinInheritsFromNotObject_typeAlias_extends() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
-    resetWithOptions(options);
+    resetWith(options: options);
     Source source = addSource(r'''
 class A {}
 class B extends A {}
 class C = Object with B;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_mixinInheritsFromNotObject_typeAlias_with() {
+  test_mixinInheritsFromNotObject_typeAlias_with() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
-    resetWithOptions(options);
+    resetWith(options: options);
     Source source = addSource(r'''
 class A {}
 class B extends Object with A {}
 class C = Object with B;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_mixinInheritsFromNotObject_typedef_mixTypeAlias() {
+  test_mixinInheritsFromNotObject_typedef_mixTypeAlias() async {
     Source source = addSource(r'''
 class A {}
 class B = Object with A;
 class C = Object with B;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_mixinReferencesSuper() {
+  test_mixinReferencesSuper() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
-    resetWithOptions(options);
+    resetWith(options: options);
     Source source = addSource(r'''
 class A {
   toString() => super.toString();
 }
 class B extends Object with A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_multipleSuperInitializers_no() {
+  test_multipleSuperInitializers_no() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {
   B() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_multipleSuperInitializers_single() {
+  test_multipleSuperInitializers_single() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {
   B() : super() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nativeConstConstructor() {
+  test_nativeConstConstructor() async {
     Source source = addSource(r'''
 import 'dart-ext:x';
 class Foo {
   const Foo() native 'Foo_Foo';
   const factory Foo.foo() native 'Foo_Foo_foo';
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     // Cannot verify the AST because the import's URI cannot be resolved.
   }
 
-  void test_nativeFunctionBodyInNonSDKCode_function() {
+  test_nativeFunctionBodyInNonSDKCode_function() async {
     Source source = addSource(r'''
 import 'dart-ext:x';
 int m(a) native 'string';''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     // Cannot verify the AST because the import's URI cannot be resolved.
   }
 
-  void test_newWithAbstractClass_factory() {
+  test_newWithAbstractClass_factory() async {
     Source source = addSource(r'''
 abstract class A {
   factory A() { return new B(); }
@@ -3768,12 +3768,12 @@
 A f() {
   return new A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_newWithUndefinedConstructor() {
+  test_newWithUndefinedConstructor() async {
     Source source = addSource(r'''
 class A {
   A.name() {}
@@ -3781,12 +3781,12 @@
 f() {
   new A.name();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_newWithUndefinedConstructorDefault() {
+  test_newWithUndefinedConstructorDefault() async {
     Source source = addSource(r'''
 class A {
   A() {}
@@ -3794,13 +3794,12 @@
 f() {
   new A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void
-      test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcretes_getter() {
+  test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcretes_getter() async {
     Source source = addSource(r'''
 class A {
   int get g => 0;
@@ -3809,13 +3808,12 @@
   int get g;
 }
 class C extends B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void
-      test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcretes_method() {
+  test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcretes_method() async {
     Source source = addSource(r'''
 class A {
   m(p) {}
@@ -3824,13 +3822,12 @@
   m(p);
 }
 class C extends B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void
-      test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcretes_setter() {
+  test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcretes_setter() async {
     Source source = addSource(r'''
 class A {
   set s(v) {}
@@ -3839,13 +3836,12 @@
   set s(v);
 }
 class C extends B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void
-      test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_interface() {
+  test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_interface() async {
     // 15979
     Source source = addSource(r'''
 abstract class M {}
@@ -3854,12 +3850,12 @@
   m();
 }
 abstract class B = A with M implements I;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_mixin() {
+  test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_mixin() async {
     // 15979
     Source source = addSource(r'''
 abstract class M {
@@ -3867,13 +3863,12 @@
 }
 abstract class A {}
 abstract class B = A with M;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void
-      test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_superclass() {
+  test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_superclass() async {
     // 15979
     Source source = addSource(r'''
 class M {}
@@ -3881,12 +3876,12 @@
   m();
 }
 abstract class B = A with M;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_mixin_getter() {
+  test_nonAbstractClassInheritsAbstractMemberOne_mixin_getter() async {
     // 17034
     Source source = addSource(r'''
 class A {
@@ -3897,12 +3892,12 @@
 }
 class B extends A with M {}
 class C extends B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_mixin_method() {
+  test_nonAbstractClassInheritsAbstractMemberOne_mixin_method() async {
     Source source = addSource(r'''
 class A {
   m() {}
@@ -3912,12 +3907,12 @@
 }
 class B extends A with M {}
 class C extends B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_mixin_setter() {
+  test_nonAbstractClassInheritsAbstractMemberOne_mixin_setter() async {
     Source source = addSource(r'''
 class A {
   var a;
@@ -3927,12 +3922,12 @@
 }
 class B extends A with M {}
 class C extends B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_accessor() {
+  test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_accessor() async {
     Source source = addSource(r'''
 abstract class A {
   int get g;
@@ -3940,12 +3935,12 @@
 class B extends A {
   noSuchMethod(v) => '';
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_method() {
+  test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_method() async {
     Source source = addSource(r'''
 abstract class A {
   m(p);
@@ -3953,12 +3948,12 @@
 class B extends A {
   noSuchMethod(v) => '';
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_mixin() {
+  test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_mixin() async {
     Source source = addSource(r'''
 class A {
   noSuchMethod(v) => '';
@@ -3966,13 +3961,12 @@
 class B extends Object with A {
   m(p);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void
-      test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_superclass() {
+  test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_superclass() async {
     Source source = addSource(r'''
 class A {
   noSuchMethod(v) => '';
@@ -3980,46 +3974,45 @@
 class B extends A {
   m(p);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void
-      test_nonAbstractClassInheritsAbstractMemberOne_overridesMethodInObject() {
+  test_nonAbstractClassInheritsAbstractMemberOne_overridesMethodInObject() async {
     Source source = addSource(r'''
 class A {
   String toString([String prefix = '']) => '${prefix}Hello';
 }
 class C {}
 class B extends A with C {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonBoolExpression_functionType() {
+  test_nonBoolExpression_functionType() async {
     Source source = addSource(r'''
 bool makeAssertion() => true;
 f() {
   assert(makeAssertion);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonBoolExpression_interfaceType() {
+  test_nonBoolExpression_interfaceType() async {
     Source source = addSource(r'''
 f() {
   assert(true);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonBoolNegationExpression() {
+  test_nonBoolNegationExpression() async {
     Source source = addSource(r'''
 f(bool pb, pd) {
   !true;
@@ -4027,12 +4020,12 @@
   !pb;
   !pd;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonBoolNegationExpression_dynamic() {
+  test_nonBoolNegationExpression_dynamic() async {
     Source source = addSource(r'''
 f1(bool dynamic) {
   !dynamic;
@@ -4042,115 +4035,115 @@
   !dynamic;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonBoolOperand_and_bool() {
+  test_nonBoolOperand_and_bool() async {
     Source source = addSource(r'''
 bool f(bool left, bool right) {
   return left && right;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonBoolOperand_and_dynamic() {
+  test_nonBoolOperand_and_dynamic() async {
     Source source = addSource(r'''
 bool f(left, dynamic right) {
   return left && right;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonBoolOperand_or_bool() {
+  test_nonBoolOperand_or_bool() async {
     Source source = addSource(r'''
 bool f(bool left, bool right) {
   return left || right;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonBoolOperand_or_dynamic() {
+  test_nonBoolOperand_or_dynamic() async {
     Source source = addSource(r'''
 bool f(dynamic left, right) {
   return left || right;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstantDefaultValue_constField() {
+  test_nonConstantDefaultValue_constField() async {
     Source source = addSource(r'''
 f([a = double.INFINITY]) {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstantDefaultValue_function_named() {
+  test_nonConstantDefaultValue_function_named() async {
     Source source = addSource("f({x : 2 + 3}) {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstantDefaultValue_function_positional() {
+  test_nonConstantDefaultValue_function_positional() async {
     Source source = addSource("f([x = 2 + 3]) {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstantDefaultValue_inConstructor_named() {
+  test_nonConstantDefaultValue_inConstructor_named() async {
     Source source = addSource(r'''
 class A {
   A({x : 2 + 3}) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstantDefaultValue_inConstructor_positional() {
+  test_nonConstantDefaultValue_inConstructor_positional() async {
     Source source = addSource(r'''
 class A {
   A([x = 2 + 3]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstantDefaultValue_method_named() {
+  test_nonConstantDefaultValue_method_named() async {
     Source source = addSource(r'''
 class A {
   m({x : 2 + 3}) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstantDefaultValue_method_positional() {
+  test_nonConstantDefaultValue_method_positional() async {
     Source source = addSource(r'''
 class A {
   m([x = 2 + 3]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstantDefaultValue_typedConstList() {
+  test_nonConstantDefaultValue_typedConstList() async {
     Source source = addSource(r'''
 class A {
   m([p111 = const <String>[]]) {}
@@ -4158,12 +4151,12 @@
 class B extends A {
   m([p222 = const <String>[]]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstantValueInInitializer_namedArgument() {
+  test_nonConstantValueInInitializer_namedArgument() async {
     Source source = addSource(r'''
 class A {
   final a;
@@ -4172,12 +4165,12 @@
 class B extends A {
   const B({b}) : super(a: b);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstCaseExpression_constField() {
+  test_nonConstCaseExpression_constField() async {
     Source source = addSource(r'''
 f(double p) {
   switch (p) {
@@ -4187,13 +4180,13 @@
       return false;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS]);
     verify([source]);
   }
 
-  void test_nonConstCaseExpression_typeLiteral() {
+  test_nonConstCaseExpression_typeLiteral() async {
     Source source = addSource(r'''
 f(Type t) {
   switch (t) {
@@ -4204,73 +4197,73 @@
       return false;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstListElement_constField() {
+  test_nonConstListElement_constField() async {
     Source source = addSource(r'''
 main() {
   const [double.INFINITY];
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstMapAsExpressionStatement_const() {
+  test_nonConstMapAsExpressionStatement_const() async {
     Source source = addSource(r'''
 f() {
   const {'a' : 0, 'b' : 1};
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstMapAsExpressionStatement_notExpressionStatement() {
+  test_nonConstMapAsExpressionStatement_notExpressionStatement() async {
     Source source = addSource(r'''
 f() {
   var m = {'a' : 0, 'b' : 1};
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstMapAsExpressionStatement_typeArguments() {
+  test_nonConstMapAsExpressionStatement_typeArguments() async {
     Source source = addSource(r'''
 f() {
   <String, int> {'a' : 0, 'b' : 1};
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstMapKey_constField() {
+  test_nonConstMapKey_constField() async {
     Source source = addSource(r'''
 main() {
   const {double.INFINITY: 0};
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [CompileTimeErrorCode.CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS]);
     verify([source]);
   }
 
-  void test_nonConstMapValue_constField() {
+  test_nonConstMapValue_constField() async {
     Source source = addSource(r'''
 main() {
   const {0: double.INFINITY};
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstValueInInitializer_binary_bool() {
+  test_nonConstValueInInitializer_binary_bool() async {
     Source source = addSource(r'''
 class A {
   final v;
@@ -4279,12 +4272,12 @@
   const A.b1(bool p) : v = p || true;
   const A.b2(bool p) : v = true || p;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.DEAD_CODE]);
     verify([source]);
   }
 
-  void test_nonConstValueInInitializer_binary_dynamic() {
+  test_nonConstValueInInitializer_binary_dynamic() async {
     Source source = addSource(r'''
 class A {
   final v;
@@ -4309,12 +4302,12 @@
   const A.j1(p) : v = p % 5;
   const A.j2(p) : v = 5 % p;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     // operations on "p" are not resolved
   }
 
-  void test_nonConstValueInInitializer_binary_int() {
+  test_nonConstValueInInitializer_binary_int() async {
     Source source = addSource(r'''
 class A {
   final v;
@@ -4329,12 +4322,12 @@
   const A.e1(int p) : v = p << 5;
   const A.e2(int p) : v = 5 << p;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstValueInInitializer_binary_num() {
+  test_nonConstValueInInitializer_binary_num() async {
     Source source = addSource(r'''
 class A {
   final v;
@@ -4359,34 +4352,34 @@
   const A.j1(num p) : v = p % 5;
   const A.j2(num p) : v = 5 % p;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstValueInInitializer_field() {
+  test_nonConstValueInInitializer_field() async {
     Source source = addSource(r'''
 class A {
   final int a;
   const A() : a = 5;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstValueInInitializer_redirecting() {
+  test_nonConstValueInInitializer_redirecting() async {
     Source source = addSource(r'''
 class A {
   const A.named(p);
   const A() : this.named(42);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstValueInInitializer_super() {
+  test_nonConstValueInInitializer_super() async {
     Source source = addSource(r'''
 class A {
   const A(p);
@@ -4394,12 +4387,12 @@
 class B extends A {
   const B() : super(42);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonConstValueInInitializer_unary() {
+  test_nonConstValueInInitializer_unary() async {
     Source source = addSource(r'''
 class A {
   final v;
@@ -4407,12 +4400,12 @@
   const A.b(int p) : v = ~p;
   const A.c(num p) : v = -p;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonGenerativeConstructor() {
+  test_nonGenerativeConstructor() async {
     Source source = addSource(r'''
 class A {
   A.named() {}
@@ -4421,24 +4414,24 @@
 class B extends A {
   B() : super.named();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonTypeInCatchClause_isClass() {
+  test_nonTypeInCatchClause_isClass() async {
     Source source = addSource(r'''
 f() {
   try {
   } on String catch (e) {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonTypeInCatchClause_isFunctionTypeAlias() {
+  test_nonTypeInCatchClause_isFunctionTypeAlias() async {
     Source source = addSource(r'''
 typedef F();
 f() {
@@ -4446,12 +4439,12 @@
   } on F catch (e) {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonTypeInCatchClause_isTypeParameter() {
+  test_nonTypeInCatchClause_isTypeParameter() async {
     Source source = addSource(r'''
 class A<T> {
   f() {
@@ -4460,117 +4453,117 @@
     }
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonTypeInCatchClause_noType() {
+  test_nonTypeInCatchClause_noType() async {
     Source source = addSource(r'''
 f() {
   try {
   } catch (e) {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonVoidReturnForOperator_no() {
+  test_nonVoidReturnForOperator_no() async {
     Source source = addSource(r'''
 class A {
   operator []=(a, b) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonVoidReturnForOperator_void() {
+  test_nonVoidReturnForOperator_void() async {
     Source source = addSource(r'''
 class A {
   void operator []=(a, b) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonVoidReturnForSetter_function_no() {
+  test_nonVoidReturnForSetter_function_no() async {
     Source source = addSource("set x(v) {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonVoidReturnForSetter_function_void() {
+  test_nonVoidReturnForSetter_function_void() async {
     Source source = addSource("void set x(v) {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonVoidReturnForSetter_method_no() {
+  test_nonVoidReturnForSetter_method_no() async {
     Source source = addSource(r'''
 class A {
   set x(v) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nonVoidReturnForSetter_method_void() {
+  test_nonVoidReturnForSetter_method_void() async {
     Source source = addSource(r'''
 class A {
   void set x(v) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_null_callMethod() {
+  test_null_callMethod() async {
     Source source = addSource(r'''
 main() {
   null.m();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_null_callOperator() {
+  test_null_callOperator() async {
     Source source = addSource(r'''
 main() {
   null + 5;
   null == 5;
   null[0];
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_optionalParameterInOperator_required() {
+  test_optionalParameterInOperator_required() async {
     Source source = addSource(r'''
 class A {
   operator +(p) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_parameterDefaultDoesNotReferToParameterName() {
+  test_parameterDefaultDoesNotReferToParameterName() async {
     // The final "f" should refer to the toplevel function "f", not to the
     // parameter called "f".  See dartbug.com/13179.
     Source source = addSource('void f([void f([x]) = f]) {}');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_parameterScope_local() {
+  test_parameterScope_local() async {
     // Parameter names shouldn't conflict with the name of the function they
     // are enclosed in.
     Source source = addSource(r'''
@@ -4581,12 +4574,12 @@
 }
 h(x) {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_parameterScope_method() {
+  test_parameterScope_method() async {
     // Parameter names shouldn't conflict with the name of the function they
     // are enclosed in.
     Source source = addSource(r'''
@@ -4597,12 +4590,12 @@
 }
 h(x) {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_parameterScope_toplevel() {
+  test_parameterScope_toplevel() async {
     // Parameter names shouldn't conflict with the name of the function they
     // are enclosed in.
     Source source = addSource(r'''
@@ -4611,12 +4604,12 @@
 }
 h(x) {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_prefixCollidesWithTopLevelMembers() {
+  test_prefixCollidesWithTopLevelMembers() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -4629,23 +4622,23 @@
 var p3;
 class p4 {}
 p.A a;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_propagateTypeArgs_intoBounds() {
+  test_propagateTypeArgs_intoBounds() async {
     Source source = addSource(r'''
 abstract class A<E> {}
 abstract class B<F> implements A<F>{}
 abstract class C<G, H extends A<G>> {}
 class D<I> extends C<I, B<I>> {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_propagateTypeArgs_intoSupertype() {
+  test_propagateTypeArgs_intoSupertype() async {
     Source source = addSource(r'''
 class A<T> {
   A(T p);
@@ -4655,12 +4648,12 @@
   B(S p) : super(p);
   B.named(S p) : super.named(p);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_proxy_annotation_prefixed() {
+  test_proxy_annotation_prefixed() async {
     Source source = addSource(r'''
 library L;
 @proxy
@@ -4673,11 +4666,11 @@
   a++;
   ++a;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_proxy_annotation_prefixed2() {
+  test_proxy_annotation_prefixed2() async {
     Source source = addSource(r'''
 library L;
 @proxy
@@ -4692,11 +4685,11 @@
     ++a;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_proxy_annotation_prefixed3() {
+  test_proxy_annotation_prefixed3() async {
     Source source = addSource(r'''
 library L;
 class B {
@@ -4711,11 +4704,11 @@
 }
 @proxy
 class A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_proxy_annotation_proxyHasPrefixedIdentifier() {
+  test_proxy_annotation_proxyHasPrefixedIdentifier() async {
     Source source = addSource(r'''
 library L;
 import 'dart:core' as core;
@@ -4724,11 +4717,11 @@
   new PrefixProxy().foo;
   new PrefixProxy().foo();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_proxy_annotation_simple() {
+  test_proxy_annotation_simple() async {
     Source source = addSource(r'''
 library L;
 @proxy
@@ -4740,11 +4733,11 @@
     var y = this + this;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_proxy_annotation_superclass() {
+  test_proxy_annotation_superclass() async {
     Source source = addSource(r'''
 library L;
 class B extends A {
@@ -4757,11 +4750,11 @@
 }
 @proxy
 class A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_proxy_annotation_superclass_mixin() {
+  test_proxy_annotation_superclass_mixin() async {
     Source source = addSource(r'''
 library L;
 class B extends Object with A {
@@ -4774,11 +4767,11 @@
 }
 @proxy
 class A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_proxy_annotation_superinterface() {
+  test_proxy_annotation_superinterface() async {
     Source source = addSource(r'''
 library L;
 class B implements A {
@@ -4791,12 +4784,12 @@
 }
 @proxy
 class A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_proxy_annotation_superinterface_infiniteLoop() {
-    Source source = addSource(r'''
+  test_proxy_annotation_superinterface_infiniteLoop() async {
+    addSource(r'''
 library L;
 class C implements A {
   m() {
@@ -4808,24 +4801,23 @@
 }
 class B implements A{}
 class A implements B{}''');
-    computeLibrarySourceErrors(source);
     // Test is that a stack overflow isn't reached in resolution
     // (previous line), no need to assert error set.
   }
 
-  void test_recursiveConstructorRedirect() {
+  test_recursiveConstructorRedirect() async {
     Source source = addSource(r'''
 class A {
   A.a() : this.b();
   A.b() : this.c();
   A.c() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_recursiveFactoryRedirect() {
+  test_recursiveFactoryRedirect() async {
     Source source = addSource(r'''
 class A {
   factory A() = B;
@@ -4836,12 +4828,12 @@
 class C implements B {
   factory C() => null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_redirectToInvalidFunctionType() {
+  test_redirectToInvalidFunctionType() async {
     Source source = addSource(r'''
 class A implements B {
   A(int p) {}
@@ -4849,12 +4841,12 @@
 class B {
   factory B(int p) = A;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_redirectToInvalidReturnType() {
+  test_redirectToInvalidReturnType() async {
     Source source = addSource(r'''
 class A {
   A() {}
@@ -4862,23 +4854,23 @@
 class B extends A {
   factory B() = A;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_redirectToNonConstConstructor() {
+  test_redirectToNonConstConstructor() async {
     Source source = addSource(r'''
 class A {
   const A.a();
   const factory A.b() = A.a;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_referencedBeforeDeclaration_cascade() {
+  test_referencedBeforeDeclaration_cascade() async {
     Source source = addSource(r'''
 testRequestHandler() {}
 
@@ -4889,12 +4881,12 @@
   var stream = 123;
   print(stream);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_referenceToDeclaredVariableInInitializer_constructorName() {
+  test_referenceToDeclaredVariableInInitializer_constructorName() async {
     Source source = addSource(r'''
 class A {
   A.x() {}
@@ -4902,12 +4894,12 @@
 f() {
   var x = new A.x();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_referenceToDeclaredVariableInInitializer_methodName() {
+  test_referenceToDeclaredVariableInInitializer_methodName() async {
     Source source = addSource(r'''
 class A {
   x() {}
@@ -4915,12 +4907,12 @@
 f(A a) {
   var x = a.x();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_referenceToDeclaredVariableInInitializer_propertyName() {
+  test_referenceToDeclaredVariableInInitializer_propertyName() async {
     Source source = addSource(r'''
 class A {
   var x;
@@ -4928,77 +4920,77 @@
 f(A a) {
   var x = a.x;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_rethrowOutsideCatch() {
+  test_rethrowOutsideCatch() async {
     Source source = addSource(r'''
 class A {
   void m() {
     try {} catch (e) {rethrow;}
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_return_in_generator_async() {
+  test_return_in_generator_async() async {
     Source source = addSource('''
 import 'dart:async';
 Stream<int> f() async* {
   return;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_return_in_generator_sync() {
+  test_return_in_generator_sync() async {
     Source source = addSource('''
 Iterable<int> f() sync* {
   return;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_returnInGenerativeConstructor() {
+  test_returnInGenerativeConstructor() async {
     Source source = addSource(r'''
 class A {
   A() { return; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_returnInGenerator_async() {
+  test_returnInGenerator_async() async {
     Source source = addSource(r'''
 f() async {
   return 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_returnInGenerator_sync() {
+  test_returnInGenerator_sync() async {
     Source source = addSource(r'''
 f() {
   return 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_returnOfInvalidType_async() {
+  test_returnOfInvalidType_async() async {
     Source source = addSource(r'''
 import 'dart:async';
 class A {
@@ -5006,12 +4998,12 @@
     return 0;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_returnOfInvalidType_dynamic() {
+  test_returnOfInvalidType_dynamic() async {
     Source source = addSource(r'''
 class TypeError {}
 class A {
@@ -5025,44 +5017,44 @@
     }
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_returnOfInvalidType_dynamicAsTypeArgument() {
+  test_returnOfInvalidType_dynamicAsTypeArgument() async {
     Source source = addSource(r'''
 class I<T> {
   factory I() => new A<T>();
 }
 class A<T> implements I {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_returnOfInvalidType_subtype() {
+  test_returnOfInvalidType_subtype() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {}
 A f(B b) { return b; }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_returnOfInvalidType_supertype() {
+  test_returnOfInvalidType_supertype() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {}
 B f(A a) { return a; }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_returnOfInvalidType_typeParameter_18468() {
+  test_returnOfInvalidType_typeParameter_18468() async {
     // https://code.google.com/p/dart/issues/detail?id=18468
     //
     // This test verifies that the type of T is more specific than Type,
@@ -5077,12 +5069,12 @@
 class Foo<T> {
   Type get t => T;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source);
     verify([source]);
   }
 
-  void test_returnOfInvalidType_void() {
+  test_returnOfInvalidType_void() async {
     Source source = addSource(r'''
 void f1() {}
 void f2() { return; }
@@ -5092,26 +5084,26 @@
 g1() {}
 void g2() {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_returnWithoutValue_noReturnType() {
+  test_returnWithoutValue_noReturnType() async {
     Source source = addSource("f() { return; }");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_returnWithoutValue_void() {
+  test_returnWithoutValue_void() async {
     Source source = addSource("void f() { return; }");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_reversedTypeArguments() {
+  test_reversedTypeArguments() async {
     Source source = addSource(r'''
 class Codec<S1, T1> {
   Codec<T1, S1> get inverted => new _InvertedCodec<T1, S1>(this);
@@ -5119,13 +5111,13 @@
 class _InvertedCodec<T2, S2> extends Codec<T2, S2> {
   _InvertedCodec(Codec<S2, T2> codec);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_sharedDeferredPrefix() {
-    resolveWithErrors(<String>[
+  test_sharedDeferredPrefix() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 f1() {}''',
@@ -5144,7 +5136,7 @@
     ], <ErrorCode>[]);
   }
 
-  void test_staticAccessToInstanceMember_annotation() {
+  test_staticAccessToInstanceMember_annotation() async {
     Source source = addSource(r'''
 class A {
   const A.name();
@@ -5152,12 +5144,12 @@
 @A.name()
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_staticAccessToInstanceMember_method() {
+  test_staticAccessToInstanceMember_method() async {
     Source source = addSource(r'''
 class A {
   static m() {}
@@ -5166,12 +5158,12 @@
   A.m;
   A.m();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_staticAccessToInstanceMember_propertyAccess_field() {
+  test_staticAccessToInstanceMember_propertyAccess_field() async {
     Source source = addSource(r'''
 class A {
   static var f;
@@ -5180,12 +5172,12 @@
   A.f;
   A.f = 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_staticAccessToInstanceMember_propertyAccess_propertyAccessor() {
+  test_staticAccessToInstanceMember_propertyAccess_propertyAccessor() async {
     Source source = addSource(r'''
 class A {
   static get f => 42;
@@ -5195,12 +5187,12 @@
   A.f;
   A.f = 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_superInInvalidContext() {
+  test_superInInvalidContext() async {
     Source source = addSource(r'''
 class A {
   m() {}
@@ -5213,23 +5205,23 @@
     var v = super.m();
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typeAliasCannotReferenceItself_returnClass_withTypeAlias() {
+  test_typeAliasCannotReferenceItself_returnClass_withTypeAlias() async {
     Source source = addSource(r'''
 typedef B A();
 class B {
   A a;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typeArgumentNotMatchingBounds_const() {
+  test_typeArgumentNotMatchingBounds_const() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {}
@@ -5237,23 +5229,23 @@
   const G();
 }
 f() { return const G<B>(); }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typeArgumentNotMatchingBounds_new() {
+  test_typeArgumentNotMatchingBounds_new() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {}
 class G<E extends A> {}
 f() { return new G<B>(); }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typeArgumentNotMatchingBounds_ofFunctionTypeAlias_hasBound() {
+  test_typeArgumentNotMatchingBounds_ofFunctionTypeAlias_hasBound() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {}
@@ -5261,12 +5253,12 @@
 F<A> fa;
 F<B> fb;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typeArgumentNotMatchingBounds_ofFunctionTypeAlias_hasBound2() {
+  test_typeArgumentNotMatchingBounds_ofFunctionTypeAlias_hasBound2() async {
     Source source = addSource(r'''
 class MyClass<T> {}
 typedef MyFunction<T, P extends MyClass<T>>();
@@ -5274,67 +5266,66 @@
   MyFunction<T, P> f;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typeArgumentNotMatchingBounds_ofFunctionTypeAlias_noBound() {
+  test_typeArgumentNotMatchingBounds_ofFunctionTypeAlias_noBound() async {
     Source source = addSource(r'''
 typedef F<T>();
 F<int> f1;
 F<String> f2;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typeArgumentNotMatchingBounds_typeArgumentList_0() {
+  test_typeArgumentNotMatchingBounds_typeArgumentList_0() async {
     Source source = addSource("abstract class A<T extends A>{}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typeArgumentNotMatchingBounds_typeArgumentList_1() {
+  test_typeArgumentNotMatchingBounds_typeArgumentList_1() async {
     Source source = addSource("abstract class A<T extends A<A>>{}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typeArgumentNotMatchingBounds_typeArgumentList_20() {
+  test_typeArgumentNotMatchingBounds_typeArgumentList_20() async {
     Source source = addSource(
         "abstract class A<T extends A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A>>>>>>>>>>>>>>>>>>>>>{}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_booleanAnd_useInRight() {
+  test_typePromotion_booleanAnd_useInRight() async {
     Source source = addSource(r'''
 main(Object p) {
   p is String && p.length != 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void
-      test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_noAssignment() {
+  test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_noAssignment() async {
     Source source = addSource(r'''
 callMe(f()) { f(); }
 main(Object p) {
   (p is String) && callMe(() { p.length; });
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_conditional_issue14655() {
+  test_typePromotion_conditional_issue14655() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {}
@@ -5345,34 +5336,33 @@
 main(A p) {
   (p is C) && (print(() => p) && (p is B)) ? p.mc() : p = null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_conditional_useInThen() {
+  test_typePromotion_conditional_useInThen() async {
     Source source = addSource(r'''
 main(Object p) {
   p is String ? p.length : 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void
-      test_typePromotion_conditional_useInThen_accessedInClosure_noAssignment() {
+  test_typePromotion_conditional_useInThen_accessedInClosure_noAssignment() async {
     Source source = addSource(r'''
 callMe(f()) { f(); }
 main(Object p) {
   p is String ? callMe(() { p.length; }) : 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_functionType_arg_ignoreIfNotMoreSpecific() {
+  test_typePromotion_functionType_arg_ignoreIfNotMoreSpecific() async {
     Source source = addSource(r'''
 typedef FuncB(B b);
 typedef FuncA(A a);
@@ -5383,12 +5373,12 @@
     f(new A());
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_functionType_return_ignoreIfNotMoreSpecific() {
+  test_typePromotion_functionType_return_ignoreIfNotMoreSpecific() async {
     Source source = addSource(r'''
 class A {}
 typedef FuncAtoDyn(A a);
@@ -5398,12 +5388,12 @@
     A a = f(new A());
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_functionType_return_voidToDynamic() {
+  test_typePromotion_functionType_return_voidToDynamic() async {
     Source source = addSource(r'''
 typedef FuncDynToDyn(x);
 typedef void FuncDynToVoid(x);
@@ -5413,12 +5403,12 @@
     A a = f(null);
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_if_accessedInClosure_noAssignment() {
+  test_typePromotion_if_accessedInClosure_noAssignment() async {
     Source source = addSource(r'''
 callMe(f()) { f(); }
 main(Object p) {
@@ -5428,12 +5418,12 @@
     });
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_if_extends_moreSpecific() {
+  test_typePromotion_if_extends_moreSpecific() async {
     Source source = addSource(r'''
 class V {}
 class VP extends V {}
@@ -5447,12 +5437,12 @@
     p.b;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_if_hasAssignment_outsideAfter() {
+  test_typePromotion_if_hasAssignment_outsideAfter() async {
     Source source = addSource(r'''
 main(Object p) {
   if (p is String) {
@@ -5460,12 +5450,12 @@
   }
   p = 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_if_hasAssignment_outsideBefore() {
+  test_typePromotion_if_hasAssignment_outsideBefore() async {
     Source source = addSource(r'''
 main(Object p, Object p2) {
   p = p2;
@@ -5473,12 +5463,12 @@
     p.length;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_if_implements_moreSpecific() {
+  test_typePromotion_if_implements_moreSpecific() async {
     Source source = addSource(r'''
 class V {}
 class VP extends V {}
@@ -5492,12 +5482,12 @@
     p.b;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_if_inClosure_assignedAfter_inSameFunction() {
+  test_typePromotion_if_inClosure_assignedAfter_inSameFunction() async {
     Source source = addSource(r'''
 main() {
   f(Object p) {
@@ -5507,12 +5497,12 @@
     p = 0;
   };
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_if_is_and_left() {
+  test_typePromotion_if_is_and_left() async {
     Source source = addSource(r'''
 bool tt() => true;
 main(Object p) {
@@ -5520,12 +5510,12 @@
     p.length;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_if_is_and_right() {
+  test_typePromotion_if_is_and_right() async {
     Source source = addSource(r'''
 bool tt() => true;
 main(Object p) {
@@ -5533,12 +5523,12 @@
     p.length;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_if_is_and_subThenSuper() {
+  test_typePromotion_if_is_and_subThenSuper() async {
     Source source = addSource(r'''
 class A {
   var a;
@@ -5552,36 +5542,36 @@
     p.b;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_if_is_parenthesized() {
+  test_typePromotion_if_is_parenthesized() async {
     Source source = addSource(r'''
 main(Object p) {
   if ((p is String)) {
     p.length;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_if_is_single() {
+  test_typePromotion_if_is_single() async {
     Source source = addSource(r'''
 main(Object p) {
   if (p is String) {
     p.length;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typePromotion_parentheses() {
+  test_typePromotion_parentheses() async {
     Source source = addSource(r'''
 main(Object p) {
   (p is String) ? p.length : 0;
@@ -5589,24 +5579,24 @@
   ((p)) is String ? p.length : 0;
   ((p) is String) ? p.length : 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typeType_class() {
+  test_typeType_class() async {
     Source source = addSource(r'''
 class C {}
 f(Type t) {}
 main() {
   f(C);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typeType_class_prefixed() {
+  test_typeType_class_prefixed() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -5618,24 +5608,24 @@
 main() {
   f(p.C);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typeType_functionTypeAlias() {
+  test_typeType_functionTypeAlias() async {
     Source source = addSource(r'''
 typedef F();
 f(Type t) {}
 main() {
   f(F);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_typeType_functionTypeAlias_prefixed() {
+  test_typeType_functionTypeAlias_prefixed() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -5647,12 +5637,12 @@
 main() {
   f(p.F);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_undefinedConstructorInInitializer_explicit_named() {
+  test_undefinedConstructorInInitializer_explicit_named() async {
     Source source = addSource(r'''
 class A {
   A.named() {}
@@ -5660,12 +5650,12 @@
 class B extends A {
   B() : super.named();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_undefinedConstructorInInitializer_explicit_unnamed() {
+  test_undefinedConstructorInInitializer_explicit_unnamed() async {
     Source source = addSource(r'''
 class A {
   A() {}
@@ -5673,12 +5663,12 @@
 class B extends A {
   B() : super();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_undefinedConstructorInInitializer_hasOptionalParameters() {
+  test_undefinedConstructorInInitializer_hasOptionalParameters() async {
     Source source = addSource(r'''
 class A {
   A([p]) {}
@@ -5686,12 +5676,12 @@
 class B extends A {
   B();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_undefinedConstructorInInitializer_implicit() {
+  test_undefinedConstructorInInitializer_implicit() async {
     Source source = addSource(r'''
 class A {
   A() {}
@@ -5699,24 +5689,24 @@
 class B extends A {
   B();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_undefinedConstructorInInitializer_implicit_typeAlias() {
+  test_undefinedConstructorInInitializer_implicit_typeAlias() async {
     Source source = addSource(r'''
 class M {}
 class A = Object with M;
 class B extends A {
   B();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_undefinedConstructorInInitializer_redirecting() {
+  test_undefinedConstructorInInitializer_redirecting() async {
     Source source = addSource(r'''
 class Foo {
   Foo.ctor();
@@ -5725,12 +5715,12 @@
   Bar() : this.ctor();
   Bar.ctor() : super.ctor();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_undefinedGetter_static_conditionalAccess() {
+  test_undefinedGetter_static_conditionalAccess() async {
     // The conditional access operator '?.' can be used to access static
     // fields.
     Source source = addSource('''
@@ -5739,12 +5729,12 @@
 }
 var a = A?.x;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_undefinedGetter_typeSubstitution() {
+  test_undefinedGetter_typeSubstitution() async {
     Source source = addSource(r'''
 class A<E> {
   E element;
@@ -5754,52 +5744,52 @@
     element.last;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_undefinedIdentifier_synthetic_whenExpression() {
+  test_undefinedIdentifier_synthetic_whenExpression() async {
     Source source = addSource(r'''
 print(x) {}
 main() {
   print(is String);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.MISSING_IDENTIFIER]);
   }
 
-  void test_undefinedIdentifier_synthetic_whenMethodName() {
+  test_undefinedIdentifier_synthetic_whenMethodName() async {
     Source source = addSource(r'''
 print(x) {}
 main(int p) {
   p.();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.MISSING_IDENTIFIER]);
   }
 
-  void test_undefinedMethod_functionExpression_callMethod() {
+  test_undefinedMethod_functionExpression_callMethod() async {
     Source source = addSource(r'''
 main() {
   (() => null).call();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     // A call to verify(source) fails as '.call()' isn't resolved.
   }
 
-  void test_undefinedMethod_functionExpression_directCall() {
+  test_undefinedMethod_functionExpression_directCall() async {
     Source source = addSource(r'''
 main() {
   (() => null)();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     // A call to verify(source) fails as '(() => null)()' isn't resolved.
   }
 
-  void test_undefinedMethod_static_conditionalAccess() {
+  test_undefinedMethod_static_conditionalAccess() async {
     // The conditional access operator '?.' can be used to access static
     // methods.
     Source source = addSource('''
@@ -5808,12 +5798,12 @@
 }
 f() { A?.m(); }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_undefinedOperator_index() {
+  test_undefinedOperator_index() async {
     Source source = addSource(r'''
 class A {
   operator [](a) {}
@@ -5823,21 +5813,21 @@
   a[0];
   a[0] = 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_undefinedOperator_tilde() {
+  test_undefinedOperator_tilde() async {
     Source source = addSource(r'''
 const A = 3;
 const B = ~((1 << A) - 1);''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_undefinedSetter_importWithPrefix() {
+  test_undefinedSetter_importWithPrefix() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -5848,12 +5838,12 @@
 main() {
   x.y = 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_undefinedSetter_static_conditionalAccess() {
+  test_undefinedSetter_static_conditionalAccess() async {
     // The conditional access operator '?.' can be used to access static
     // fields.
     Source source = addSource('''
@@ -5862,12 +5852,12 @@
 }
 f() { A?.x = 1; }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_undefinedSuperMethod_field() {
+  test_undefinedSuperMethod_field() async {
     Source source = addSource(r'''
 class A {
   var m;
@@ -5877,12 +5867,12 @@
     super.m();
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_undefinedSuperMethod_method() {
+  test_undefinedSuperMethod_method() async {
     Source source = addSource(r'''
 class A {
   m() {}
@@ -5892,12 +5882,12 @@
     super.m();
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unqualifiedReferenceToNonLocalStaticMember_fromComment_new() {
+  test_unqualifiedReferenceToNonLocalStaticMember_fromComment_new() async {
     Source source = addSource(r'''
 class A {
   A() {}
@@ -5906,145 +5896,145 @@
 /// [new A] or [new A.named]
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedShownName_unresolved() {
+  test_unusedShownName_unresolved() async {
     Source source = addSource(r'''
 import 'dart:math' show max, FooBar;
 main() {
   print(max(1, 2));
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [HintCode.UNDEFINED_SHOWN_NAME]);
   }
 
-  void test_uriDoesNotExist_dll() {
+  test_uriDoesNotExist_dll() async {
     addNamedSource("/lib.dll", "");
     Source source = addSource("import 'dart-ext:lib';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_uriDoesNotExist_dylib() {
+  test_uriDoesNotExist_dylib() async {
     addNamedSource("/lib.dylib", "");
     Source source = addSource("import 'dart-ext:lib';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_uriDoesNotExist_so() {
+  test_uriDoesNotExist_so() async {
     addNamedSource("/lib.so", "");
     Source source = addSource("import 'dart-ext:lib';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_wrongNumberOfParametersForOperator1() {
-    _check_wrongNumberOfParametersForOperator1("<");
-    _check_wrongNumberOfParametersForOperator1(">");
-    _check_wrongNumberOfParametersForOperator1("<=");
-    _check_wrongNumberOfParametersForOperator1(">=");
-    _check_wrongNumberOfParametersForOperator1("+");
-    _check_wrongNumberOfParametersForOperator1("/");
-    _check_wrongNumberOfParametersForOperator1("~/");
-    _check_wrongNumberOfParametersForOperator1("*");
-    _check_wrongNumberOfParametersForOperator1("%");
-    _check_wrongNumberOfParametersForOperator1("|");
-    _check_wrongNumberOfParametersForOperator1("^");
-    _check_wrongNumberOfParametersForOperator1("&");
-    _check_wrongNumberOfParametersForOperator1("<<");
-    _check_wrongNumberOfParametersForOperator1(">>");
-    _check_wrongNumberOfParametersForOperator1("[]");
+  test_wrongNumberOfParametersForOperator1() async {
+    await _check_wrongNumberOfParametersForOperator1("<");
+    await _check_wrongNumberOfParametersForOperator1(">");
+    await _check_wrongNumberOfParametersForOperator1("<=");
+    await _check_wrongNumberOfParametersForOperator1(">=");
+    await _check_wrongNumberOfParametersForOperator1("+");
+    await _check_wrongNumberOfParametersForOperator1("/");
+    await _check_wrongNumberOfParametersForOperator1("~/");
+    await _check_wrongNumberOfParametersForOperator1("*");
+    await _check_wrongNumberOfParametersForOperator1("%");
+    await _check_wrongNumberOfParametersForOperator1("|");
+    await _check_wrongNumberOfParametersForOperator1("^");
+    await _check_wrongNumberOfParametersForOperator1("&");
+    await _check_wrongNumberOfParametersForOperator1("<<");
+    await _check_wrongNumberOfParametersForOperator1(">>");
+    await _check_wrongNumberOfParametersForOperator1("[]");
   }
 
-  void test_wrongNumberOfParametersForOperator_index() {
+  test_wrongNumberOfParametersForOperator_index() async {
     Source source = addSource(r'''
 class A {
   operator []=(a, b) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_wrongNumberOfParametersForOperator_minus() {
-    _check_wrongNumberOfParametersForOperator("-", "");
-    _check_wrongNumberOfParametersForOperator("-", "a");
+  test_wrongNumberOfParametersForOperator_minus() async {
+    await _check_wrongNumberOfParametersForOperator("-", "");
+    await _check_wrongNumberOfParametersForOperator("-", "a");
   }
 
-  void test_wrongNumberOfParametersForSetter() {
+  test_wrongNumberOfParametersForSetter() async {
     Source source = addSource(r'''
 class A {
   set x(a) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_async_to_dynamic_type() {
+  test_yield_async_to_dynamic_type() async {
     Source source = addSource('''
 dynamic f() async* {
   yield 3;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_async_to_generic_type() {
+  test_yield_async_to_generic_type() async {
     Source source = addSource('''
 import 'dart:async';
 Stream f() async* {
   yield 3;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_async_to_parameterized_type() {
+  test_yield_async_to_parameterized_type() async {
     Source source = addSource('''
 import 'dart:async';
 Stream<int> f() async* {
   yield 3;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_async_to_untyped() {
+  test_yield_async_to_untyped() async {
     Source source = addSource('''
 f() async* {
   yield 3;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_each_async_dynamic_to_dynamic() {
+  test_yield_each_async_dynamic_to_dynamic() async {
     Source source = addSource('''
 f() async* {
   yield* g();
 }
 g() => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_each_async_dynamic_to_stream() {
+  test_yield_each_async_dynamic_to_stream() async {
     Source source = addSource('''
 import 'dart:async';
 Stream f() async* {
@@ -6052,12 +6042,12 @@
 }
 g() => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_each_async_dynamic_to_typed_stream() {
+  test_yield_each_async_dynamic_to_typed_stream() async {
     Source source = addSource('''
 import 'dart:async';
 Stream<int> f() async* {
@@ -6065,12 +6055,12 @@
 }
 g() => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_each_async_stream_to_dynamic() {
+  test_yield_each_async_stream_to_dynamic() async {
     Source source = addSource('''
 import 'dart:async';
 f() async* {
@@ -6078,12 +6068,12 @@
 }
 Stream g() => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_each_async_typed_stream_to_dynamic() {
+  test_yield_each_async_typed_stream_to_dynamic() async {
     Source source = addSource('''
 import 'dart:async';
 f() async* {
@@ -6091,12 +6081,12 @@
 }
 Stream<int> g() => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_each_async_typed_stream_to_typed_stream() {
+  test_yield_each_async_typed_stream_to_typed_stream() async {
     Source source = addSource('''
 import 'dart:async';
 Stream<int> f() async* {
@@ -6104,163 +6094,164 @@
 }
 Stream<int> g() => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_each_sync_dynamic_to_dynamic() {
+  test_yield_each_sync_dynamic_to_dynamic() async {
     Source source = addSource('''
 f() sync* {
   yield* g();
 }
 g() => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_each_sync_dynamic_to_iterable() {
+  test_yield_each_sync_dynamic_to_iterable() async {
     Source source = addSource('''
 Iterable f() sync* {
   yield* g();
 }
 g() => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_each_sync_dynamic_to_typed_iterable() {
+  test_yield_each_sync_dynamic_to_typed_iterable() async {
     Source source = addSource('''
 Iterable<int> f() sync* {
   yield* g();
 }
 g() => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_each_sync_iterable_to_dynamic() {
+  test_yield_each_sync_iterable_to_dynamic() async {
     Source source = addSource('''
 f() sync* {
   yield* g();
 }
 Iterable g() => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_each_sync_typed_iterable_to_dynamic() {
+  test_yield_each_sync_typed_iterable_to_dynamic() async {
     Source source = addSource('''
 f() sync* {
   yield* g();
 }
 Iterable<int> g() => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_each_sync_typed_iterable_to_typed_iterable() {
+  test_yield_each_sync_typed_iterable_to_typed_iterable() async {
     Source source = addSource('''
 Iterable<int> f() sync* {
   yield* g();
 }
 Iterable<int> g() => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_sync_to_dynamic_type() {
+  test_yield_sync_to_dynamic_type() async {
     Source source = addSource('''
 dynamic f() sync* {
   yield 3;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_sync_to_generic_type() {
+  test_yield_sync_to_generic_type() async {
     Source source = addSource('''
 Iterable f() sync* {
   yield 3;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_sync_to_parameterized_type() {
+  test_yield_sync_to_parameterized_type() async {
     Source source = addSource('''
 Iterable<int> f() sync* {
   yield 3;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yield_sync_to_untyped() {
+  test_yield_sync_to_untyped() async {
     Source source = addSource('''
 f() sync* {
   yield 3;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yieldInNonGenerator_asyncStar() {
+  test_yieldInNonGenerator_asyncStar() async {
     Source source = addSource(r'''
 f() async* {
   yield 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_yieldInNonGenerator_syncStar() {
+  test_yieldInNonGenerator_syncStar() async {
     Source source = addSource(r'''
 f() sync* {
   yield 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void _check_wrongNumberOfParametersForOperator(
-      String name, String parameters) {
+  Future<Null> _check_wrongNumberOfParametersForOperator(
+      String name, String parameters) async {
     Source source = addSource("""
 class A {
   operator $name($parameters) {}
 }""");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
     reset();
   }
 
-  void _check_wrongNumberOfParametersForOperator1(String name) {
-    _check_wrongNumberOfParametersForOperator(name, "a");
+  Future<Null> _check_wrongNumberOfParametersForOperator1(String name) async {
+    await _check_wrongNumberOfParametersForOperator(name, "a");
   }
 
-  CompilationUnit _getResolvedLibraryUnit(Source source) =>
-      analysisContext.getResolvedCompilationUnit2(source, source);
+  Future<CompilationUnit> _getResolvedLibraryUnit(Source source) async {
+    return analysisContext.getResolvedCompilationUnit2(source, source);
+  }
 }
diff --git a/pkg/analyzer/test/generated/non_hint_code_test.dart b/pkg/analyzer/test/generated/non_hint_code_test.dart
index 2ef678b..04a5623 100644
--- a/pkg/analyzer/test/generated/non_hint_code_test.dart
+++ b/pkg/analyzer/test/generated/non_hint_code_test.dart
@@ -15,29 +15,13 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NonHintCodeTest);
+    defineReflectiveTests(NonHintCodeTest_Driver);
   });
 }
 
 @reflectiveTest
 class NonHintCodeTest extends ResolverTestCase {
-  void test_() {
-    resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
-    Source source = addSource(r'''
-abstract class A {
-  void test();
-}
-class B extends A {
-  void test() {
-    super.test;
-  }
-}
-''');
-    computeLibrarySourceErrors(source);
-    assertNoErrors(source);
-    verify([source]);
-  }
-
-  void test_deadCode_afterTryCatch() {
+  test_deadCode_afterTryCatch() async {
     Source source = addSource('''
 main() {
   try {
@@ -51,45 +35,45 @@
   throw 'foo';
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_conditionalElse_debugConst() {
+  test_deadCode_deadBlock_conditionalElse_debugConst() async {
     Source source = addSource(r'''
 const bool DEBUG = true;
 f() {
   DEBUG ? 1 : 2;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_conditionalIf_debugConst() {
+  test_deadCode_deadBlock_conditionalIf_debugConst() async {
     Source source = addSource(r'''
 const bool DEBUG = false;
 f() {
   DEBUG ? 1 : 2;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_else() {
+  test_deadCode_deadBlock_else() async {
     Source source = addSource(r'''
 const bool DEBUG = true;
 f() {
   if(DEBUG) {} else {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_if_debugConst_prefixedIdentifier() {
+  test_deadCode_deadBlock_if_debugConst_prefixedIdentifier() async {
     Source source = addSource(r'''
 class A {
   static const bool DEBUG = false;
@@ -97,12 +81,12 @@
 f() {
   if(A.DEBUG) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_if_debugConst_prefixedIdentifier2() {
+  test_deadCode_deadBlock_if_debugConst_prefixedIdentifier2() async {
     Source source = addSource(r'''
 library L;
 import 'lib2.dart';
@@ -116,12 +100,12 @@
 class A {
   static const bool DEBUG = false;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_if_debugConst_propertyAccessor() {
+  test_deadCode_deadBlock_if_debugConst_propertyAccessor() async {
     Source source = addSource(r'''
 library L;
 import 'lib2.dart' as LIB;
@@ -135,46 +119,46 @@
 class A {
   static const bool DEBUG = false;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_if_debugConst_simpleIdentifier() {
+  test_deadCode_deadBlock_if_debugConst_simpleIdentifier() async {
     Source source = addSource(r'''
 const bool DEBUG = false;
 f() {
   if(DEBUG) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deadCode_deadBlock_while_debugConst() {
+  test_deadCode_deadBlock_while_debugConst() async {
     Source source = addSource(r'''
 const bool DEBUG = false;
 f() {
   while(DEBUG) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deadCode_deadCatch_onCatchSubtype() {
+  test_deadCode_deadCatch_onCatchSubtype() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {}
 f() {
   try {} on B catch (e) {} on A catch (e) {} catch (e) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deadCode_deadFinalBreakInCase() {
+  test_deadCode_deadFinalBreakInCase() async {
     Source source = addSource(r'''
 f() {
   switch (true) {
@@ -189,34 +173,34 @@
     break;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deadCode_deadOperandLHS_and_debugConst() {
+  test_deadCode_deadOperandLHS_and_debugConst() async {
     Source source = addSource(r'''
 const bool DEBUG = false;
 f() {
   bool b = DEBUG && false;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deadCode_deadOperandLHS_or_debugConst() {
+  test_deadCode_deadOperandLHS_or_debugConst() async {
     Source source = addSource(r'''
 const bool DEBUG = true;
 f() {
   bool b = DEBUG || true;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deadCode_statementAfterIfWithoutElse() {
+  test_deadCode_statementAfterIfWithoutElse() async {
     Source source = addSource(r'''
 f() {
   if (1 < 0) {
@@ -224,12 +208,12 @@
   }
   int a = 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deprecatedMemberUse_inDeprecatedClass() {
+  test_deprecatedMemberUse_inDeprecatedClass() async {
     Source source = addSource(r'''
 @deprecated
 f() {}
@@ -241,12 +225,12 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deprecatedMemberUse_inDeprecatedFunction() {
+  test_deprecatedMemberUse_inDeprecatedFunction() async {
     Source source = addSource(r'''
 @deprecated
 f() {}
@@ -256,12 +240,12 @@
   f();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deprecatedMemberUse_inDeprecatedLibrary() {
+  test_deprecatedMemberUse_inDeprecatedLibrary() async {
     Source source = addSource(r'''
 @deprecated
 library lib;
@@ -275,12 +259,12 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deprecatedMemberUse_inDeprecatedMethod() {
+  test_deprecatedMemberUse_inDeprecatedMethod() async {
     Source source = addSource(r'''
 @deprecated
 f() {}
@@ -292,12 +276,12 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_deprecatedMemberUse_inDeprecatedMethod_inDeprecatedClass() {
+  test_deprecatedMemberUse_inDeprecatedMethod_inDeprecatedClass() async {
     Source source = addSource(r'''
 @deprecated
 f() {}
@@ -310,32 +294,32 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_divisionOptimization() {
+  test_divisionOptimization() async {
     Source source = addSource(r'''
 f(int x, int y) {
   var v = x / y.toInt();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_divisionOptimization_supressIfDivisionNotDefinedInCore() {
+  test_divisionOptimization_supressIfDivisionNotDefinedInCore() async {
     Source source = addSource(r'''
 f(x, y) {
   var v = (x / y).toInt();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_divisionOptimization_supressIfDivisionOverridden() {
+  test_divisionOptimization_supressIfDivisionOverridden() async {
     Source source = addSource(r'''
 class A {
   num operator /(x) { return x; }
@@ -343,12 +327,12 @@
 f(A x, A y) {
   var v = (x / y).toInt();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_duplicateImport_as() {
+  test_duplicateImport_as() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart';
@@ -360,12 +344,12 @@
         r'''
 library lib1;
 class A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_duplicateImport_hide() {
+  test_duplicateImport_hide() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart';
@@ -378,12 +362,12 @@
 library lib1;
 class A {}
 class B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_duplicateImport_show() {
+  test_duplicateImport_show() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart';
@@ -396,13 +380,13 @@
 library lib1;
 class A {}
 class B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_importDeferredLibraryWithLoadFunction() {
-    resolveWithErrors(<String>[
+  test_importDeferredLibraryWithLoadFunction() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 f() {}''',
@@ -413,7 +397,7 @@
     ], const <ErrorCode>[]);
   }
 
-  void test_issue20904BuggyTypePromotionAtIfJoin_1() {
+  test_issue20904BuggyTypePromotionAtIfJoin_1() async {
     // https://code.google.com/p/dart/issues/detail?id=20904
     Source source = addSource(r'''
 f(var message, var dynamic_) {
@@ -422,12 +406,12 @@
   }
   int s = message;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_issue20904BuggyTypePromotionAtIfJoin_3() {
+  test_issue20904BuggyTypePromotionAtIfJoin_3() async {
     // https://code.google.com/p/dart/issues/detail?id=20904
     Source source = addSource(r'''
 f(var message) {
@@ -439,12 +423,12 @@
   }
   int s = message;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_issue20904BuggyTypePromotionAtIfJoin_4() {
+  test_issue20904BuggyTypePromotionAtIfJoin_4() async {
     // https://code.google.com/p/dart/issues/detail?id=20904
     Source source = addSource(r'''
 f(var message) {
@@ -455,76 +439,76 @@
   }
   String s = message;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_missingReturn_emptyFunctionBody() {
+  test_missingReturn_emptyFunctionBody() async {
     Source source = addSource(r'''
 abstract class A {
   int m();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_missingReturn_expressionFunctionBody() {
+  test_missingReturn_expressionFunctionBody() async {
     Source source = addSource("int f() => 0;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_missingReturn_noReturnType() {
+  test_missingReturn_noReturnType() async {
     Source source = addSource("f() {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_missingReturn_voidReturnType() {
+  test_missingReturn_voidReturnType() async {
     Source source = addSource("void f() {}");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nullAwareInCondition_for_noCondition() {
+  test_nullAwareInCondition_for_noCondition() async {
     Source source = addSource(r'''
 m(x) {
   for (var v = x; ; v++) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_nullAwareInCondition_if_notTopLevel() {
+  test_nullAwareInCondition_if_notTopLevel() async {
     Source source = addSource(r'''
 m(x) {
   if (x?.y == null) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_overrideEqualsButNotHashCode() {
+  test_overrideEqualsButNotHashCode() async {
     Source source = addSource(r'''
 class A {
   bool operator ==(x) { return x; }
   get hashCode => 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_overrideOnNonOverridingField_inInterface() {
+  test_overrideOnNonOverridingField_inInterface() async {
     Source source = addSource(r'''
 class A {
   int get a => 0;
@@ -539,12 +523,12 @@
   @override
   int c;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_overrideOnNonOverridingField_inSuperclass() {
+  test_overrideOnNonOverridingField_inSuperclass() async {
     Source source = addSource(r'''
 class A {
   int get a => 0;
@@ -559,12 +543,12 @@
   @override
   int c;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_overrideOnNonOverridingGetter_inInterface() {
+  test_overrideOnNonOverridingGetter_inInterface() async {
     Source source = addSource(r'''
 class A {
   int get m => 0;
@@ -573,12 +557,12 @@
   @override
   int get m => 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_overrideOnNonOverridingGetter_inSuperclass() {
+  test_overrideOnNonOverridingGetter_inSuperclass() async {
     Source source = addSource(r'''
 class A {
   int get m => 0;
@@ -587,12 +571,12 @@
   @override
   int get m => 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_overrideOnNonOverridingMethod_inInterface() {
+  test_overrideOnNonOverridingMethod_inInterface() async {
     Source source = addSource(r'''
 class A {
   int m() => 0;
@@ -601,12 +585,12 @@
   @override
   int m() => 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_overrideOnNonOverridingMethod_inSuperclass() {
+  test_overrideOnNonOverridingMethod_inSuperclass() async {
     Source source = addSource(r'''
 class A {
   int m() => 0;
@@ -615,12 +599,12 @@
   @override
   int m() => 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_overrideOnNonOverridingMethod_inSuperclass_abstract() {
+  test_overrideOnNonOverridingMethod_inSuperclass_abstract() async {
     Source source = addSource(r'''
 abstract class A {
   int m();
@@ -629,12 +613,12 @@
   @override
   int m() => 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_overrideOnNonOverridingSetter_inInterface() {
+  test_overrideOnNonOverridingSetter_inInterface() async {
     Source source = addSource(r'''
 class A {
   set m(int x) {}
@@ -643,12 +627,12 @@
   @override
   set m(int x) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_overrideOnNonOverridingSetter_inSuperclass() {
+  test_overrideOnNonOverridingSetter_inSuperclass() async {
     Source source = addSource(r'''
 class A {
   set m(int x) {}
@@ -657,12 +641,12 @@
   @override
   set m(int x) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_propagatedFieldType() {
+  test_propagatedFieldType() async {
     Source source = addSource(r'''
 class A { }
 class X<T> {
@@ -674,12 +658,12 @@
     y.x.add(new A());
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_proxy_annotation_prefixed() {
+  test_proxy_annotation_prefixed() async {
     Source source = addSource(r'''
 library L;
 @proxy
@@ -693,11 +677,11 @@
   a++;
   ++a;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_proxy_annotation_prefixed2() {
+  test_proxy_annotation_prefixed2() async {
     Source source = addSource(r'''
 library L;
 @proxy
@@ -713,11 +697,11 @@
     ++a;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_proxy_annotation_prefixed3() {
+  test_proxy_annotation_prefixed3() async {
     Source source = addSource(r'''
 library L;
 class B {
@@ -733,11 +717,11 @@
 }
 @proxy
 class A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_undefinedGetter_inSubtype() {
+  test_undefinedGetter_inSubtype() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {
@@ -748,11 +732,11 @@
     return a.b;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_undefinedMethod_assignmentExpression_inSubtype() {
+  test_undefinedMethod_assignmentExpression_inSubtype() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {
@@ -763,21 +747,21 @@
   a2 = new A();
   a += a2;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_undefinedMethod_dynamic() {
+  test_undefinedMethod_dynamic() async {
     Source source = addSource(r'''
 class D<T extends dynamic> {
   fieldAccess(T t) => t.abc;
   methodAccess(T t) => t.xyz(1, 2, 'three');
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_undefinedMethod_inSubtype() {
+  test_undefinedMethod_inSubtype() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {
@@ -787,11 +771,11 @@
   var a = new A();
   a.b();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_undefinedMethod_unionType_all() {
+  test_undefinedMethod_unionType_all() async {
     Source source = addSource(r'''
 class A {
   int m(int x) => 0;
@@ -808,11 +792,11 @@
   }
   ab.m();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_undefinedMethod_unionType_some() {
+  test_undefinedMethod_unionType_some() async {
     Source source = addSource(r'''
 class A {
   int m(int x) => 0;
@@ -827,11 +811,11 @@
   }
   ab.m(0);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_undefinedOperator_binaryExpression_inSubtype() {
+  test_undefinedOperator_binaryExpression_inSubtype() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {
@@ -842,11 +826,11 @@
     a + 1;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_undefinedOperator_indexBoth_inSubtype() {
+  test_undefinedOperator_indexBoth_inSubtype() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {
@@ -857,11 +841,11 @@
     a[0]++;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_undefinedOperator_indexGetter_inSubtype() {
+  test_undefinedOperator_indexGetter_inSubtype() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {
@@ -872,11 +856,11 @@
     a[0];
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_undefinedOperator_indexSetter_inSubtype() {
+  test_undefinedOperator_indexSetter_inSubtype() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {
@@ -887,11 +871,11 @@
     a[0] = 1;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_undefinedOperator_postfixExpression() {
+  test_undefinedOperator_postfixExpression() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {
@@ -902,11 +886,11 @@
     a++;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_undefinedOperator_prefixExpression() {
+  test_undefinedOperator_prefixExpression() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {
@@ -917,11 +901,11 @@
     ++a;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_undefinedSetter_inSubtype() {
+  test_undefinedSetter_inSubtype() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {
@@ -932,11 +916,11 @@
     a.b = 0;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_unnecessaryCast_13855_parameter_A() {
+  test_unnecessaryCast_13855_parameter_A() async {
     // dartbug.com/13855, dartbug.com/13732
     Source source = addSource(r'''
 class A{
@@ -948,12 +932,12 @@
     (e as A).a();
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unnecessaryCast_conditionalExpression() {
+  test_unnecessaryCast_conditionalExpression() async {
     Source source = addSource(r'''
 abstract class I {}
 class A implements I {}
@@ -961,22 +945,22 @@
 I m(A a, B b) {
   return a == null ? b as I : a as I;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unnecessaryCast_dynamic_type() {
+  test_unnecessaryCast_dynamic_type() async {
     Source source = addSource(r'''
 m(v) {
   var b = v as Object;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unnecessaryCast_generics() {
+  test_unnecessaryCast_generics() async {
     // dartbug.com/18953
     Source source = addSource(r'''
 import 'dart:async';
@@ -984,22 +968,22 @@
 void g(bool c) {
   (c ? f(): new Future.value(0) as Future<int>).then((int value) {});
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unnecessaryCast_type_dynamic() {
+  test_unnecessaryCast_type_dynamic() async {
     Source source = addSource(r'''
 m(v) {
   var b = Object as dynamic;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unnecessaryNoSuchMethod_blockBody_notReturnStatement() {
+  test_unnecessaryNoSuchMethod_blockBody_notReturnStatement() async {
     Source source = addSource(r'''
 class A {
   noSuchMethod(x) => super.noSuchMethod(x);
@@ -1010,12 +994,12 @@
     print(y);
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unnecessaryNoSuchMethod_blockBody_notSingleStatement() {
+  test_unnecessaryNoSuchMethod_blockBody_notSingleStatement() async {
     Source source = addSource(r'''
 class A {
   noSuchMethod(x) => super.noSuchMethod(x);
@@ -1027,12 +1011,12 @@
     return super.noSuchMethod(y);
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unnecessaryNoSuchMethod_expressionBody_notNoSuchMethod() {
+  test_unnecessaryNoSuchMethod_expressionBody_notNoSuchMethod() async {
     Source source = addSource(r'''
 class A {
   noSuchMethod(x) => super.noSuchMethod(x);
@@ -1041,12 +1025,12 @@
   mmm();
   noSuchMethod(y) => super.hashCode;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unnecessaryNoSuchMethod_expressionBody_notSuper() {
+  test_unnecessaryNoSuchMethod_expressionBody_notSuper() async {
     Source source = addSource(r'''
 class A {
   noSuchMethod(x) => super.noSuchMethod(x);
@@ -1055,12 +1039,12 @@
   mmm();
   noSuchMethod(y) => 42;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedImport_annotationOnDirective() {
+  test_unusedImport_annotationOnDirective() async {
     Source source = addSource(r'''
 library L;
 @A()
@@ -1072,12 +1056,13 @@
 class A {
   const A() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
     assertErrors(source);
     verify([source, source2]);
   }
 
-  void test_unusedImport_as_equalPrefixes() {
+  test_unusedImport_as_equalPrefixes() async {
     // 18818
     Source source = addSource(r'''
 library L;
@@ -1095,23 +1080,25 @@
         r'''
 library lib2;
 class B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
+    await computeAnalysisResult(source3);
     assertErrors(source);
     assertNoErrors(source2);
     assertNoErrors(source3);
     verify([source, source2, source3]);
   }
 
-  void test_unusedImport_core_library() {
+  test_unusedImport_core_library() async {
     Source source = addSource(r'''
 library L;
 import 'dart:core';''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedImport_export() {
+  test_unusedImport_export() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart';
@@ -1127,12 +1114,12 @@
         r'''
 library lib2;
 class Two {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedImport_export2() {
+  test_unusedImport_export2() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart';
@@ -1154,12 +1141,12 @@
         r'''
 library lib3;
 class Three {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedImport_export_infiniteLoop() {
+  test_unusedImport_export_infiniteLoop() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart';
@@ -1182,12 +1169,12 @@
 library lib3;
 export 'lib2.dart';
 class Three {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedImport_metadata() {
+  test_unusedImport_metadata() async {
     Source source = addSource(r'''
 library L;
 @A(x)
@@ -1201,12 +1188,12 @@
         r'''
 library lib1;
 const x = 0;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedImport_prefix_topLevelFunction() {
+  test_unusedImport_prefix_topLevelFunction() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart' hide topLevelFunction;
@@ -1223,12 +1210,12 @@
 library lib1;
 class One {}
 topLevelFunction() {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_unusedImport_prefix_topLevelFunction2() {
+  test_unusedImport_prefix_topLevelFunction2() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart' hide topLevelFunction;
@@ -1247,12 +1234,12 @@
 library lib1;
 class One {}
 topLevelFunction() {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_useOfVoidResult_implicitReturnValue() {
+  test_useOfVoidResult_implicitReturnValue() async {
     Source source = addSource(r'''
 f() {}
 class A {
@@ -1260,108 +1247,131 @@
     var a = f();
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_useOfVoidResult_nonVoidReturnValue() {
+  test_useOfVoidResult_nonVoidReturnValue() async {
     Source source = addSource(r'''
 int f() => 1;
 g() {
   var a = f();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_withSuperMixin() async {
+    resetWith(options: new AnalysisOptionsImpl()..enableSuperMixins = true);
+    Source source = addSource(r'''
+abstract class A {
+  void test();
+}
+class B extends A {
+  void test() {
+    super.test;
+  }
+}
+''');
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 }
 
+@reflectiveTest
+class NonHintCodeTest_Driver extends NonHintCodeTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
+
 class PubSuggestionCodeTest extends ResolverTestCase {
-  void test_import_package() {
+  test_import_package() async {
     Source source = addSource("import 'package:somepackage/other.dart';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.URI_DOES_NOT_EXIST]);
   }
 
-  void test_import_packageWithDotDot() {
+  test_import_packageWithDotDot() async {
     Source source = addSource("import 'package:somepackage/../other.dart';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.URI_DOES_NOT_EXIST,
       HintCode.PACKAGE_IMPORT_CONTAINS_DOT_DOT
     ]);
   }
 
-  void test_import_packageWithLeadingDotDot() {
+  test_import_packageWithLeadingDotDot() async {
     Source source = addSource("import 'package:../other.dart';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       CompileTimeErrorCode.URI_DOES_NOT_EXIST,
       HintCode.PACKAGE_IMPORT_CONTAINS_DOT_DOT
     ]);
   }
 
-  void test_import_referenceIntoLibDirectory() {
-    cacheSource("/myproj/pubspec.yaml", "");
-    cacheSource("/myproj/lib/other.dart", "");
+  test_import_referenceIntoLibDirectory() async {
+    addNamedSource("/myproj/pubspec.yaml", "");
+    addNamedSource("/myproj/lib/other.dart", "");
     Source source =
         addNamedSource("/myproj/web/test.dart", "import '../lib/other.dart';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [HintCode.FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE]);
   }
 
-  void test_import_referenceIntoLibDirectory_no_pubspec() {
-    cacheSource("/myproj/lib/other.dart", "");
+  test_import_referenceIntoLibDirectory_no_pubspec() async {
+    addNamedSource("/myproj/lib/other.dart", "");
     Source source =
         addNamedSource("/myproj/web/test.dart", "import '../lib/other.dart';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_import_referenceOutOfLibDirectory() {
-    cacheSource("/myproj/pubspec.yaml", "");
-    cacheSource("/myproj/web/other.dart", "");
+  test_import_referenceOutOfLibDirectory() async {
+    addNamedSource("/myproj/pubspec.yaml", "");
+    addNamedSource("/myproj/web/other.dart", "");
     Source source =
         addNamedSource("/myproj/lib/test.dart", "import '../web/other.dart';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [HintCode.FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE]);
   }
 
-  void test_import_referenceOutOfLibDirectory_no_pubspec() {
-    cacheSource("/myproj/web/other.dart", "");
+  test_import_referenceOutOfLibDirectory_no_pubspec() async {
+    addNamedSource("/myproj/web/other.dart", "");
     Source source =
         addNamedSource("/myproj/lib/test.dart", "import '../web/other.dart';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_import_valid_inside_lib1() {
-    cacheSource("/myproj/pubspec.yaml", "");
-    cacheSource("/myproj/lib/other.dart", "");
+  test_import_valid_inside_lib1() async {
+    addNamedSource("/myproj/pubspec.yaml", "");
+    addNamedSource("/myproj/lib/other.dart", "");
     Source source =
         addNamedSource("/myproj/lib/test.dart", "import 'other.dart';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_import_valid_inside_lib2() {
-    cacheSource("/myproj/pubspec.yaml", "");
-    cacheSource("/myproj/lib/bar/other.dart", "");
+  test_import_valid_inside_lib2() async {
+    addNamedSource("/myproj/pubspec.yaml", "");
+    addNamedSource("/myproj/lib/bar/other.dart", "");
     Source source = addNamedSource(
         "/myproj/lib/foo/test.dart", "import '../bar/other.dart';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_import_valid_outside_lib() {
-    cacheSource("/myproj/pubspec.yaml", "");
-    cacheSource("/myproj/web/other.dart", "");
+  test_import_valid_outside_lib() async {
+    addNamedSource("/myproj/pubspec.yaml", "");
+    addNamedSource("/myproj/web/other.dart", "");
     Source source =
         addNamedSource("/myproj/lib2/test.dart", "import '../web/other.dart';");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 }
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index d85fc09..9a2611f 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -3822,7 +3822,7 @@
     VariableDeclaration field = fields[0];
     expect(field.name.name, 'f');
     // validate the type
-    TypeArgumentList typeArguments = fieldList.type.typeArguments;
+    TypeArgumentList typeArguments = (fieldList.type as TypeName).typeArguments;
     expect(typeArguments.arguments, hasLength(1));
     // synthetic '>'
     Token token = typeArguments.endToken;
@@ -3869,9 +3869,9 @@
     expect(expression.expression, isNotNull);
     expect(expression.isOperator, isNotNull);
     expect(expression.notOperator, isNotNull);
-    TypeName type = expression.type;
+    TypeAnnotation type = expression.type;
     expect(type, isNotNull);
-    expect(type.name.isSynthetic, isTrue);
+    expect(type is TypeName && type.name.isSynthetic, isTrue);
     EngineTestCase.assertInstanceOf((obj) => obj is EmptyStatement,
         EmptyStatement, ifStatement.thenStatement);
   }
@@ -6042,7 +6042,7 @@
     expect(method.externalKeyword, isNull);
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
-    expect(method.returnType.name.name, 'T');
+    expect((method.returnType as TypeName).name.name, 'T');
     expect(method.name, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNotNull);
@@ -6062,14 +6062,14 @@
     expect(method.externalKeyword, isNull);
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
-    expect(method.returnType.name.name, 'T');
+    expect((method.returnType as TypeName).name.name, 'T');
     expect(method.name, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNotNull);
     TypeParameter tp = method.typeParameters.typeParameters[0];
     expect(tp.name.name, 'T');
     expect(tp.extendsKeyword, isNotNull);
-    expect(tp.bound.name.name, 'num');
+    expect((tp.bound as TypeName).name.name, 'num');
     expect(method.parameters, isNotNull);
     expect(method.body, isNotNull);
   }
@@ -10150,9 +10150,9 @@
     expect(name.period, isNull);
     expect(name.name, isNull);
     expect(expression.argumentList, isNotNull);
-    NodeList<TypeName> arguments = type.typeArguments.arguments;
+    NodeList<TypeAnnotation> arguments = type.typeArguments.arguments;
     expect(arguments, hasLength(1));
-    expect(arguments[0].question, isNotNull);
+    expect((arguments[0] as TypeName).question, isNotNull);
   }
 
   void test_parseLibraryDirective() {
@@ -13073,7 +13073,7 @@
         .parseVariableDeclarationListAfterMetadata(emptyCommentAndMetadata());
     expectNotNullIfNoErrors(declarationList);
     listener.assertNoErrors();
-    expect(declarationList.type.name.name, 'T');
+    expect((declarationList.type as TypeName).name.name, 'T');
     expect(declarationList.isFinal, true);
   }
 
@@ -13128,7 +13128,7 @@
         .parseVariableDeclarationListAfterMetadata(emptyCommentAndMetadata());
     expectNotNullIfNoErrors(declarationList);
     listener.assertNoErrors();
-    expect(declarationList.type.name.name, 'T');
+    expect((declarationList.type as TypeName).name.name, 'T');
     expect(declarationList.keyword, isNull);
   }
 
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 0a01df5..d559010 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -4,11 +4,12 @@
 
 library analyzer.test.generated.resolver_test;
 
+import 'dart:async';
 import 'dart:collection';
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/standard_ast_factory.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -51,6 +52,8 @@
     defineReflectiveTests(TypePropagationTest);
     defineReflectiveTests(TypeProviderImplTest);
     defineReflectiveTests(TypeResolverVisitorTest);
+    defineReflectiveTests(StrictModeTest_Driver);
+    defineReflectiveTests(TypePropagationTest_Driver);
   });
 }
 
@@ -146,7 +149,7 @@
 
 @reflectiveTest
 class EnclosedScopeTest extends ResolverTestCase {
-  void test_define_duplicate() {
+  test_define_duplicate() async {
     Scope rootScope = new _RootScope();
     EnclosedScope scope = new EnclosedScope(rootScope);
     SimpleIdentifier identifier = AstTestFactory.identifier3('v');
@@ -160,7 +163,7 @@
 
 @reflectiveTest
 class ErrorResolverTest extends ResolverTestCase {
-  void test_breakLabelOnSwitchMember() {
+  test_breakLabelOnSwitchMember() async {
     Source source = addSource(r'''
 class A {
   void m(int i) {
@@ -172,12 +175,12 @@
     }
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ResolverErrorCode.BREAK_LABEL_ON_SWITCH_MEMBER]);
     verify([source]);
   }
 
-  void test_continueLabelOnSwitch() {
+  test_continueLabelOnSwitch() async {
     Source source = addSource(r'''
 class A {
   void m(int i) {
@@ -187,12 +190,12 @@
     }
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [ResolverErrorCode.CONTINUE_LABEL_ON_SWITCH]);
     verify([source]);
   }
 
-  void test_enclosingElement_invalidLocalFunction() {
+  test_enclosingElement_invalidLocalFunction() async {
     Source source = addSource(r'''
 class C {
   C() {
@@ -217,6 +220,7 @@
     expect(functions, isNotNull);
     expect(functions, hasLength(1));
     expect(functions[0].enclosingElement, constructor);
+    await computeAnalysisResult(source);
     assertErrors(source, [ParserErrorCode.GETTER_IN_FUNCTION]);
   }
 }
@@ -226,7 +230,7 @@
  */
 @reflectiveTest
 class GenericMethodResolverTest extends StaticTypeAnalyzer2TestShared {
-  void test_genericMethod_propagatedType_promotion() {
+  test_genericMethod_propagatedType_promotion() async {
     // Regression test for:
     // https://github.com/dart-lang/sdk/issues/25340
     //
@@ -235,7 +239,7 @@
     // therefore discard the propagated type.
     //
     // So this test does not use strong mode.
-    resolveTestUnit(r'''
+    await resolveTestUnit(r'''
 abstract class Iter {
   List<S> map<S>(S f(x));
 }
@@ -409,9 +413,9 @@
   List<Expression> _invalidlyPropagatedExpressions = new List<Expression>();
 
   /**
-   * A list containing all of the AST TypeName nodes that were not resolved.
+   * The TypeAnnotation nodes that were not resolved.
    */
-  List<TypeName> _unresolvedTypes = new List<TypeName>();
+  List<TypeAnnotation> _unresolvedTypes = new List<TypeAnnotation>();
 
   /**
    * Counter for the number of Expression nodes visited that are resolved.
@@ -441,7 +445,7 @@
         buffer.write(" of ");
         buffer.write(_resolvedTypeCount + unresolvedTypeCount);
         buffer.writeln(" type names:");
-        for (TypeName identifier in _unresolvedTypes) {
+        for (TypeAnnotation identifier in _unresolvedTypes) {
           buffer.write("  ");
           buffer.write(identifier.toString());
           buffer.write(" (");
@@ -575,9 +579,21 @@
   }
 
   @override
+  Object visitTypeAnnotation(TypeAnnotation node) {
+    if (node.type == null) {
+      _unresolvedTypes.add(node);
+    } else {
+      _resolvedTypeCount++;
+    }
+    return super.visitTypeAnnotation(node);
+  }
+
+  @override
   Object visitTypeName(TypeName node) {
     // Note: do not visit children from this node, the child SimpleIdentifier in
     // TypeName (i.e. "String") does not have a static type defined.
+    // TODO(brianwilkerson) Not visiting the children means that we won't catch
+    // type arguments that were not resolved.
     if (node.type == null) {
       _unresolvedTypes.add(node);
     } else {
@@ -615,7 +631,7 @@
  */
 @reflectiveTest
 class StrictModeTest extends ResolverTestCase {
-  void fail_for() {
+  fail_for() async {
     Source source = addSource(r'''
 int f(List<int> list) {
   num sum = 0;
@@ -623,7 +639,7 @@
     sum += list[i];
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
@@ -631,56 +647,56 @@
   void setUp() {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.hint = false;
-    resetWithOptions(options);
+    resetWith(options: options);
   }
 
-  void test_assert_is() {
+  test_assert_is() async {
     Source source = addSource(r'''
 int f(num n) {
   assert (n is int);
   return n & 0x0F;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_conditional_and_is() {
+  test_conditional_and_is() async {
     Source source = addSource(r'''
 int f(num n) {
   return (n is int && n > 0) ? n & 0x0F : 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_conditional_is() {
+  test_conditional_is() async {
     Source source = addSource(r'''
 int f(num n) {
   return (n is int) ? n & 0x0F : 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_conditional_isNot() {
+  test_conditional_isNot() async {
     Source source = addSource(r'''
 int f(num n) {
   return (n is! int) ? 0 : n & 0x0F;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_conditional_or_is() {
+  test_conditional_or_is() async {
     Source source = addSource(r'''
 int f(num n) {
   return (n is! int || n < 0) ? 0 : n & 0x0F;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_forEach() {
+  test_forEach() async {
     Source source = addSource(r'''
 int f(List<int> list) {
   num sum = 0;
@@ -688,11 +704,11 @@
     sum += n & 0x0F;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_if_and_is() {
+  test_if_and_is() async {
     Source source = addSource(r'''
 int f(num n) {
   if (n is int && n > 0) {
@@ -700,11 +716,11 @@
   }
   return 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_if_is() {
+  test_if_is() async {
     Source source = addSource(r'''
 int f(num n) {
   if (n is int) {
@@ -712,11 +728,11 @@
   }
   return 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_if_isNot() {
+  test_if_isNot() async {
     Source source = addSource(r'''
 int f(num n) {
   if (n is! int) {
@@ -725,11 +741,11 @@
     return n & 0x0F;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_if_isNot_abrupt() {
+  test_if_isNot_abrupt() async {
     Source source = addSource(r'''
 int f(num n) {
   if (n is! int) {
@@ -737,11 +753,11 @@
   }
   return n & 0x0F;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_if_or_is() {
+  test_if_or_is() async {
     Source source = addSource(r'''
 int f(num n) {
   if (n is! int || n < 0) {
@@ -750,22 +766,28 @@
     return n & 0x0F;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_localVar() {
+  test_localVar() async {
     Source source = addSource(r'''
 int f() {
   num n = 1234;
   return n & 0x0F;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 }
 
 @reflectiveTest
+class StrictModeTest_Driver extends StrictModeTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
+
+@reflectiveTest
 class SubtypeManagerTest {
   /**
    * The inheritance manager being tested.
@@ -930,9 +952,9 @@
 
 @reflectiveTest
 class TypePropagationTest extends ResolverTestCase {
-  void fail_mergePropagatedTypesAtJoinPoint_1() {
+  fail_mergePropagatedTypesAtJoinPoint_1() async {
     // https://code.google.com/p/dart/issues/detail?id=19929
-    assertTypeOfMarkedExpression(
+    await assertTypeOfMarkedExpression(
         r'''
 f1(x) {
   var y = [];
@@ -949,9 +971,9 @@
         typeProvider.dynamicType);
   }
 
-  void fail_mergePropagatedTypesAtJoinPoint_2() {
+  fail_mergePropagatedTypesAtJoinPoint_2() async {
     // https://code.google.com/p/dart/issues/detail?id=19929
-    assertTypeOfMarkedExpression(
+    await assertTypeOfMarkedExpression(
         r'''
 f2(x) {
   var y = [];
@@ -967,9 +989,9 @@
         typeProvider.dynamicType);
   }
 
-  void fail_mergePropagatedTypesAtJoinPoint_3() {
+  fail_mergePropagatedTypesAtJoinPoint_3() async {
     // https://code.google.com/p/dart/issues/detail?id=19929
-    assertTypeOfMarkedExpression(
+    await assertTypeOfMarkedExpression(
         r'''
 f4(x) {
   var y = [];
@@ -987,9 +1009,9 @@
         typeProvider.numType);
   }
 
-  void fail_mergePropagatedTypesAtJoinPoint_5() {
+  fail_mergePropagatedTypesAtJoinPoint_5() async {
     // https://code.google.com/p/dart/issues/detail?id=19929
-    assertTypeOfMarkedExpression(
+    await assertTypeOfMarkedExpression(
         r'''
 f6(x,y) {
   var z = [];
@@ -1005,7 +1027,7 @@
         typeProvider.dynamicType);
   }
 
-  void fail_mergePropagatedTypesAtJoinPoint_7() {
+  fail_mergePropagatedTypesAtJoinPoint_7() async {
     // https://code.google.com/p/dart/issues/detail?id=19929
     //
     // In general [continue]s are unsafe for the purposes of
@@ -1029,12 +1051,13 @@
     x; // marker
   }
 }''';
-    DartType t = findMarkedIdentifier(code, "; // marker").propagatedType;
+    DartType t =
+        (await findMarkedIdentifier(code, "; // marker")).propagatedType;
     expect(typeProvider.intType.isSubtypeOf(t), isTrue);
     expect(typeProvider.stringType.isSubtypeOf(t), isTrue);
   }
 
-  void fail_mergePropagatedTypesAtJoinPoint_8() {
+  fail_mergePropagatedTypesAtJoinPoint_8() async {
     // https://code.google.com/p/dart/issues/detail?id=19929
     //
     // In nested loops [breaks]s are unsafe for the purposes of
@@ -1061,22 +1084,23 @@
     }
   }
 }''';
-    DartType t = findMarkedIdentifier(code, "; // marker").propagatedType;
+    DartType t =
+        (await findMarkedIdentifier(code, "; // marker")).propagatedType;
     expect(typeProvider.intType.isSubtypeOf(t), isTrue);
     expect(typeProvider.stringType.isSubtypeOf(t), isTrue);
   }
 
-  void fail_propagatedReturnType_functionExpression() {
+  fail_propagatedReturnType_functionExpression() async {
     // TODO(scheglov) disabled because we don't resolve function expression
     String code = r'''
 main() {
   var v = (() {return 42;})();
 }''';
-    assertPropagatedAssignedType(
+    await assertPropagatedAssignedType(
         code, typeProvider.dynamicType, typeProvider.intType);
   }
 
-  void test_as() {
+  test_as() async {
     Source source = addSource(r'''
 class A {
   bool get g => true;
@@ -1088,10 +1112,7 @@
     return null;
   }
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA =
         resolutionMap.elementDeclaredByClassDeclaration(classA).type;
@@ -1105,17 +1126,14 @@
     expect(variableName.propagatedType, same(typeA));
   }
 
-  void test_assert() {
+  test_assert() async {
     Source source = addSource(r'''
 class A {}
 A f(var p) {
   assert (p is A);
   return p;
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA =
         resolutionMap.elementDeclaredByClassDeclaration(classA).type;
@@ -1127,17 +1145,14 @@
     expect(variableName.propagatedType, same(typeA));
   }
 
-  void test_assignment() {
+  test_assignment() async {
     Source source = addSource(r'''
 f() {
   var v;
   v = 0;
   return v;
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1146,17 +1161,14 @@
     expect(variableName.propagatedType, same(typeProvider.intType));
   }
 
-  void test_assignment_afterInitializer() {
+  test_assignment_afterInitializer() async {
     Source source = addSource(r'''
 f() {
   var v = 0;
   v = 1.0;
   return v;
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1165,7 +1177,7 @@
     expect(variableName.propagatedType, same(typeProvider.doubleType));
   }
 
-  void test_assignment_null() {
+  test_assignment_null() async {
     String code = r'''
 main() {
   int v; // declare
@@ -1175,10 +1187,10 @@
     CompilationUnit unit;
     {
       Source source = addSource(code);
-      LibraryElement library = resolve2(source);
+      TestAnalysisResult analysisResult = await computeAnalysisResult(source);
       assertNoErrors(source);
       verify([source]);
-      unit = resolveCompilationUnit(source, library);
+      unit = analysisResult.unit;
     }
     {
       SimpleIdentifier identifier = EngineTestCase.findNode(
@@ -1200,24 +1212,21 @@
     }
   }
 
-  void test_CanvasElement_getContext() {
+  test_CanvasElement_getContext() async {
     String code = r'''
 import 'dart:html';
 main(CanvasElement canvas) {
   var context = canvas.getContext('2d');
 }''';
     Source source = addSource(code);
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     SimpleIdentifier identifier = EngineTestCase.findNode(
         unit, code, "context", (node) => node is SimpleIdentifier);
     expect(resolutionMap.propagatedTypeForExpression(identifier).name,
         "CanvasRenderingContext2D");
   }
 
-  void test_forEach() {
+  test_forEach() async {
     String code = r'''
 main() {
   var list = <String> [];
@@ -1226,10 +1235,7 @@
   }
 }''';
     Source source = addSource(code);
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     InterfaceType stringType = typeProvider.stringType;
     // in the declaration
     {
@@ -1245,7 +1251,7 @@
     }
   }
 
-  void test_forEach_async() {
+  test_forEach_async() async {
     String code = r'''
 import 'dart:async';
 f(Stream<String> stream) async {
@@ -1254,10 +1260,7 @@
   }
 }''';
     Source source = addSource(code);
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     InterfaceType stringType = typeProvider.stringType;
     // in the declaration
     {
@@ -1273,7 +1276,7 @@
     }
   }
 
-  void test_forEach_async_inheritedStream() {
+  test_forEach_async_inheritedStream() async {
     // From https://github.com/dart-lang/sdk/issues/24191, this ensures that
     // `await for` works for types where the generic parameter doesn't
     // correspond to the type of the Stream's data.
@@ -1286,10 +1289,7 @@
   }
 }''';
     Source source = addSource(code);
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     InterfaceType listOfStringType =
         typeProvider.listType.instantiate([typeProvider.stringType]);
     // in the declaration
@@ -1306,7 +1306,7 @@
     }
   }
 
-  void test_functionExpression_asInvocationArgument() {
+  test_functionExpression_asInvocationArgument() async {
     String code = r'''
 class MyMap<K, V> {
   forEach(f(K key, V value)) {}
@@ -1318,10 +1318,7 @@
   });
 }''';
     Source source = addSource(code);
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     // k
     DartType intType = typeProvider.intType;
     FormalParameter kParameter = EngineTestCase.findNode(
@@ -1342,7 +1339,7 @@
     expect(vIdentifier.staticType, same(typeProvider.dynamicType));
   }
 
-  void test_functionExpression_asInvocationArgument_fromInferredInvocation() {
+  test_functionExpression_asInvocationArgument_fromInferredInvocation() async {
     String code = r'''
 class MyMap<K, V> {
   forEach(f(K key, V value)) {}
@@ -1352,10 +1349,7 @@
   m2.forEach((k, v) {});
 }''';
     Source source = addSource(code);
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     // k
     DartType intType = typeProvider.intType;
     FormalParameter kParameter = EngineTestCase.findNode(
@@ -1368,8 +1362,7 @@
     expect(vParameter.identifier.propagatedType, same(stringType));
   }
 
-  void
-      test_functionExpression_asInvocationArgument_functionExpressionInvocation() {
+  test_functionExpression_asInvocationArgument_functionExpressionInvocation() async {
     String code = r'''
 main() {
   (f(String value)) {} ((v) {
@@ -1377,10 +1370,7 @@
   });
 }''';
     Source source = addSource(code);
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     // v
     DartType dynamicType = typeProvider.dynamicType;
     DartType stringType = typeProvider.stringType;
@@ -1394,7 +1384,7 @@
     expect(vIdentifier.staticType, same(dynamicType));
   }
 
-  void test_functionExpression_asInvocationArgument_keepIfLessSpecific() {
+  test_functionExpression_asInvocationArgument_keepIfLessSpecific() async {
     String code = r'''
 class MyList {
   forEach(f(Object value)) {}
@@ -1405,10 +1395,7 @@
   });
 }''';
     Source source = addSource(code);
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     // v
     DartType intType = typeProvider.intType;
     FormalParameter vParameter = EngineTestCase.findNode(
@@ -1421,7 +1408,7 @@
     expect(vIdentifier.propagatedType, same(null));
   }
 
-  void test_functionExpression_asInvocationArgument_notSubtypeOfStaticType() {
+  test_functionExpression_asInvocationArgument_notSubtypeOfStaticType() async {
     String code = r'''
 class A {
   m(void f(int i)) {}
@@ -1431,10 +1418,8 @@
   a.m(() => 0);
 }''';
     Source source = addSource(code);
-    LibraryElement library = resolve2(source);
+    CompilationUnit unit = await _computeResolvedUnit(source, noErrors: false);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
     // () => 0
     FunctionExpression functionExpression = EngineTestCase.findNode(
         unit, code, "() => 0)", (node) => node is FunctionExpression);
@@ -1443,7 +1428,7 @@
     expect(functionExpression.propagatedType, same(null));
   }
 
-  void test_functionExpression_asInvocationArgument_replaceIfMoreSpecific() {
+  test_functionExpression_asInvocationArgument_replaceIfMoreSpecific() async {
     String code = r'''
 class MyList<E> {
   forEach(f(E value)) {}
@@ -1454,10 +1439,7 @@
   });
 }''';
     Source source = addSource(code);
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     // v
     DartType stringType = typeProvider.stringType;
     FormalParameter vParameter = EngineTestCase.findNode(
@@ -1469,7 +1451,7 @@
     expect(vIdentifier.propagatedType, same(stringType));
   }
 
-  void test_Future_then() {
+  test_Future_then() async {
     String code = r'''
 import 'dart:async';
 main(Future<int> firstFuture) {
@@ -1481,10 +1463,7 @@
   });
 }''';
     Source source = addSource(code);
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     // p1
     FormalParameter p1 = EngineTestCase.findNode(
         unit, code, "p1) {", (node) => node is SimpleFormalParameter);
@@ -1499,16 +1478,13 @@
     expect(p3.identifier.propagatedType, same(typeProvider.stringType));
   }
 
-  void test_initializer() {
+  test_initializer() async {
     Source source = addSource(r'''
 f() {
   var v = 0;
   return v;
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1529,14 +1505,13 @@
     }
   }
 
-  void test_initializer_dereference() {
+  test_initializer_dereference() async {
     Source source = addSource(r'''
 f() {
   var v = 'String';
   v.
 }''');
-    LibraryElement library = resolve2(source);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source, noErrors: false);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1547,16 +1522,13 @@
     expect(variableName.propagatedType, same(typeProvider.stringType));
   }
 
-  void test_initializer_hasStaticType() {
+  test_initializer_hasStaticType() async {
     Source source = addSource(r'''
 f() {
   int v = 0;
   return v;
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1578,16 +1550,13 @@
     }
   }
 
-  void test_initializer_hasStaticType_parameterized() {
+  test_initializer_hasStaticType_parameterized() async {
     Source source = addSource(r'''
 f() {
   List<int> v = <int>[];
   return v;
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1609,7 +1578,7 @@
     }
   }
 
-  void test_initializer_null() {
+  test_initializer_null() async {
     String code = r'''
 main() {
   int v = null;
@@ -1618,10 +1587,7 @@
     CompilationUnit unit;
     {
       Source source = addSource(code);
-      LibraryElement library = resolve2(source);
-      assertNoErrors(source);
-      verify([source]);
-      unit = resolveCompilationUnit(source, library);
+      unit = await _computeResolvedUnit(source);
     }
     {
       SimpleIdentifier identifier = EngineTestCase.findNode(
@@ -1637,7 +1603,7 @@
     }
   }
 
-  void test_invocation_target_prefixed() {
+  test_invocation_target_prefixed() async {
     addNamedSource(
         '/helper.dart',
         '''
@@ -1650,22 +1616,19 @@
   helper.max(10, 10); // marker
 }''';
     SimpleIdentifier methodName =
-        findMarkedIdentifier(code, "(10, 10); // marker");
+        await findMarkedIdentifier(code, "(10, 10); // marker");
     MethodInvocation methodInvoke = methodName.parent;
     expect(methodInvoke.methodName.staticElement, isNotNull);
     expect(methodInvoke.methodName.propagatedElement, isNull);
   }
 
-  void test_is_conditional() {
+  test_is_conditional() async {
     Source source = addSource(r'''
 class A {}
 A f(var p) {
   return (p is A) ? p : null;
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA =
         resolutionMap.elementDeclaredByClassDeclaration(classA).type;
@@ -1680,7 +1643,7 @@
     expect(variableName.propagatedType, same(typeA));
   }
 
-  void test_is_if() {
+  test_is_if() async {
     Source source = addSource(r'''
 class A {}
 A f(var p) {
@@ -1690,10 +1653,7 @@
     return null;
   }
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     // prepare A
     InterfaceType typeA;
     {
@@ -1720,7 +1680,7 @@
     }
   }
 
-  void test_is_if_lessSpecific() {
+  test_is_if_lessSpecific() async {
     Source source = addSource(r'''
 class A {}
 A f(A p) {
@@ -1730,12 +1690,7 @@
     return null;
   }
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
-//    ClassDeclaration classA = (ClassDeclaration) unit.getDeclarations().get(0);
-//    InterfaceType typeA = classA.getElement().getType();
+    CompilationUnit unit = await _computeResolvedUnit(source);
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1746,7 +1701,7 @@
     expect(variableName.propagatedType, same(null));
   }
 
-  void test_is_if_logicalAnd() {
+  test_is_if_logicalAnd() async {
     Source source = addSource(r'''
 class A {}
 A f(var p) {
@@ -1756,10 +1711,7 @@
     return null;
   }
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA =
         resolutionMap.elementDeclaredByClassDeclaration(classA).type;
@@ -1773,17 +1725,14 @@
     expect(variableName.propagatedType, same(typeA));
   }
 
-  void test_is_postConditional() {
+  test_is_postConditional() async {
     Source source = addSource(r'''
 class A {}
 A f(var p) {
   A a = (p is A) ? p : throw null;
   return p;
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA =
         resolutionMap.elementDeclaredByClassDeclaration(classA).type;
@@ -1795,7 +1744,7 @@
     expect(variableName.propagatedType, same(typeA));
   }
 
-  void test_is_postIf() {
+  test_is_postIf() async {
     Source source = addSource(r'''
 class A {}
 A f(var p) {
@@ -1806,10 +1755,7 @@
   }
   return p;
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA =
         resolutionMap.elementDeclaredByClassDeclaration(classA).type;
@@ -1821,7 +1767,7 @@
     expect(variableName.propagatedType, same(typeA));
   }
 
-  void test_is_subclass() {
+  test_is_subclass() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {
@@ -1833,9 +1779,7 @@
   }
   return p;
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     FunctionDeclaration function = unit.declarations[2] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1847,7 +1791,7 @@
     expect(invocation.methodName.propagatedElement, isNull);
   }
 
-  void test_is_while() {
+  test_is_while() async {
     Source source = addSource(r'''
 class A {}
 A f(var p) {
@@ -1856,10 +1800,7 @@
   }
   return p;
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA =
         resolutionMap.elementDeclaredByClassDeclaration(classA).type;
@@ -1873,16 +1814,13 @@
     expect(variableName.propagatedType, same(typeA));
   }
 
-  void test_isNot_conditional() {
+  test_isNot_conditional() async {
     Source source = addSource(r'''
 class A {}
 A f(var p) {
   return (p is! A) ? null : p;
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA =
         resolutionMap.elementDeclaredByClassDeclaration(classA).type;
@@ -1897,7 +1835,7 @@
     expect(variableName.propagatedType, same(typeA));
   }
 
-  void test_isNot_if() {
+  test_isNot_if() async {
     Source source = addSource(r'''
 class A {}
 A f(var p) {
@@ -1907,10 +1845,7 @@
     return p;
   }
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA =
         resolutionMap.elementDeclaredByClassDeclaration(classA).type;
@@ -1924,7 +1859,7 @@
     expect(variableName.propagatedType, same(typeA));
   }
 
-  void test_isNot_if_logicalOr() {
+  test_isNot_if_logicalOr() async {
     Source source = addSource(r'''
 class A {}
 A f(var p) {
@@ -1934,9 +1869,7 @@
     return p;
   }
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source, noErrors: false);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA =
         resolutionMap.elementDeclaredByClassDeclaration(classA).type;
@@ -1950,17 +1883,14 @@
     expect(variableName.propagatedType, same(typeA));
   }
 
-  void test_isNot_postConditional() {
+  test_isNot_postConditional() async {
     Source source = addSource(r'''
 class A {}
 A f(var p) {
   A a = (p is! A) ? throw null : p;
   return p;
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA =
         resolutionMap.elementDeclaredByClassDeclaration(classA).type;
@@ -1972,7 +1902,7 @@
     expect(variableName.propagatedType, same(typeA));
   }
 
-  void test_isNot_postIf() {
+  test_isNot_postIf() async {
     Source source = addSource(r'''
 class A {}
 A f(var p) {
@@ -1981,10 +1911,7 @@
   }
   return p;
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA =
         resolutionMap.elementDeclaredByClassDeclaration(classA).type;
@@ -1996,7 +1923,7 @@
     expect(variableName.propagatedType, same(typeA));
   }
 
-  void test_issue20904BuggyTypePromotionAtIfJoin_5() {
+  test_issue20904BuggyTypePromotionAtIfJoin_5() async {
     // https://code.google.com/p/dart/issues/detail?id=20904
     //
     // This is not an example of the 20904 bug, but rather,
@@ -2026,11 +1953,11 @@
     return a; // marker
   }
 }''';
-    DartType tB = findMarkedIdentifier(code, "; // B").propagatedType;
-    assertTypeOfMarkedExpression(code, null, tB);
+    DartType tB = (await findMarkedIdentifier(code, "; // B")).propagatedType;
+    await assertTypeOfMarkedExpression(code, null, tB);
   }
 
-  void test_issue20904BuggyTypePromotionAtIfJoin_6() {
+  test_issue20904BuggyTypePromotionAtIfJoin_6() async {
     // https://code.google.com/p/dart/issues/detail?id=20904
     //
     // The other half of the *_5() test.
@@ -2046,20 +1973,17 @@
     return b; // marker
   }
 }''';
-    DartType tB = findMarkedIdentifier(code, "; // B").propagatedType;
-    assertTypeOfMarkedExpression(code, null, tB);
+    DartType tB = (await findMarkedIdentifier(code, "; // B")).propagatedType;
+    await assertTypeOfMarkedExpression(code, null, tB);
   }
 
-  void test_listLiteral_different() {
+  test_listLiteral_different() async {
     Source source = addSource(r'''
 f() {
   var v = [0, '1', 2];
   return v[2];
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -2068,16 +1992,13 @@
     expect(indexExpression.propagatedType, isNull);
   }
 
-  void test_listLiteral_same() {
+  test_listLiteral_same() async {
     Source source = addSource(r'''
 f() {
   var v = [0, 1, 2];
   return v[2];
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -2092,16 +2013,13 @@
     expect(typeArguments[0], same(typeProvider.dynamicType));
   }
 
-  void test_mapLiteral_different() {
+  test_mapLiteral_different() async {
     Source source = addSource(r'''
 f() {
   var v = {'0' : 0, 1 : '1', '2' : 2};
   return v;
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -2115,16 +2033,13 @@
     expect(typeArguments[1], same(typeProvider.dynamicType));
   }
 
-  void test_mapLiteral_same() {
+  test_mapLiteral_same() async {
     Source source = addSource(r'''
 f() {
   var v = {'a' : 0, 'b' : 1, 'c' : 2};
   return v;
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -2138,7 +2053,7 @@
     expect(typeArguments[1], same(typeProvider.dynamicType));
   }
 
-  void test_mergePropagatedTypes_afterIfThen_different() {
+  test_mergePropagatedTypes_afterIfThen_different() async {
     String code = r'''
 main() {
   var v = 0;
@@ -2148,17 +2063,17 @@
   return v;
 }''';
     {
-      SimpleIdentifier identifier = findMarkedIdentifier(code, "v;");
+      SimpleIdentifier identifier = await findMarkedIdentifier(code, "v;");
       expect(identifier.propagatedType, null);
     }
     {
-      SimpleIdentifier identifier = findMarkedIdentifier(code, "v = '';");
+      SimpleIdentifier identifier = await findMarkedIdentifier(code, "v = '';");
       expect(identifier.propagatedType, typeProvider.stringType);
     }
   }
 
-  void test_mergePropagatedTypes_afterIfThen_same() {
-    assertTypeOfMarkedExpression(
+  test_mergePropagatedTypes_afterIfThen_same() async {
+    await assertTypeOfMarkedExpression(
         r'''
 main() {
   var v = 1;
@@ -2171,8 +2086,8 @@
         typeProvider.intType);
   }
 
-  void test_mergePropagatedTypes_afterIfThenElse_different() {
-    assertTypeOfMarkedExpression(
+  test_mergePropagatedTypes_afterIfThenElse_different() async {
+    await assertTypeOfMarkedExpression(
         r'''
 main() {
   var v = 1;
@@ -2187,8 +2102,8 @@
         null);
   }
 
-  void test_mergePropagatedTypes_afterIfThenElse_same() {
-    assertTypeOfMarkedExpression(
+  test_mergePropagatedTypes_afterIfThenElse_same() async {
+    await assertTypeOfMarkedExpression(
         r'''
 main() {
   var v = 1;
@@ -2203,9 +2118,9 @@
         typeProvider.intType);
   }
 
-  void test_mergePropagatedTypesAtJoinPoint_4() {
+  test_mergePropagatedTypesAtJoinPoint_4() async {
     // https://code.google.com/p/dart/issues/detail?id=19929
-    assertTypeOfMarkedExpression(
+    await assertTypeOfMarkedExpression(
         r'''
 f5(x) {
   var y = [];
@@ -2221,7 +2136,7 @@
         typeProvider.intType);
   }
 
-  void test_mutatedOutsideScope() {
+  test_mutatedOutsideScope() async {
     // https://code.google.com/p/dart/issues/detail?id=22732
     Source source = addSource(r'''
 class Base {
@@ -2248,11 +2163,11 @@
   }
   x = null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_objectAccessInference_disabled_for_library_prefix() {
+  test_objectAccessInference_disabled_for_library_prefix() async {
     String name = 'hashCode';
     addNamedSource(
         '/helper.dart',
@@ -2266,13 +2181,13 @@
   helper.$name; // marker
 }''';
 
-    SimpleIdentifier id = findMarkedIdentifier(code, "; // marker");
+    SimpleIdentifier id = await findMarkedIdentifier(code, "; // marker");
     PrefixedIdentifier prefixedId = id.parent;
     expect(id.staticType, typeProvider.dynamicType);
     expect(prefixedId.staticType, typeProvider.dynamicType);
   }
 
-  void test_objectAccessInference_disabled_for_local_getter() {
+  test_objectAccessInference_disabled_for_local_getter() async {
     String name = 'hashCode';
     String code = '''
 dynamic get $name => null;
@@ -2280,23 +2195,24 @@
   $name; // marker
 }''';
 
-    SimpleIdentifier getter = findMarkedIdentifier(code, "; // marker");
+    SimpleIdentifier getter = await findMarkedIdentifier(code, "; // marker");
     expect(getter.staticType, typeProvider.dynamicType);
   }
 
-  void test_objectAccessInference_enabled_for_cascades() {
+  test_objectAccessInference_enabled_for_cascades() async {
     String name = 'hashCode';
     String code = '''
 main() {
   dynamic obj;
   obj..$name..$name; // marker
 }''';
-    PropertyAccess access = findMarkedIdentifier(code, "; // marker").parent;
+    PropertyAccess access =
+        (await findMarkedIdentifier(code, "; // marker")).parent;
     expect(access.staticType, typeProvider.dynamicType);
     expect(access.realTarget.staticType, typeProvider.dynamicType);
   }
 
-  void test_objectMethodInference_disabled_for_library_prefix() {
+  test_objectMethodInference_disabled_for_library_prefix() async {
     String name = 'toString';
     addNamedSource(
         '/helper.dart',
@@ -2309,50 +2225,53 @@
 main() {
   helper.$name(); // marker
 }''';
-    SimpleIdentifier methodName = findMarkedIdentifier(code, "(); // marker");
+    SimpleIdentifier methodName =
+        await findMarkedIdentifier(code, "(); // marker");
     MethodInvocation methodInvoke = methodName.parent;
     expect(methodName.staticType, typeProvider.dynamicType);
     expect(methodInvoke.staticType, typeProvider.dynamicType);
   }
 
-  void test_objectMethodInference_disabled_for_local_function() {
+  test_objectMethodInference_disabled_for_local_function() async {
     String name = 'toString';
     String code = '''
 main() {
   dynamic $name = () => null;
   $name(); // marker
 }''';
-    SimpleIdentifier identifier = findMarkedIdentifier(code, "$name = ");
+    SimpleIdentifier identifier = await findMarkedIdentifier(code, "$name = ");
     expect(identifier.staticType, typeProvider.dynamicType);
 
-    SimpleIdentifier methodName = findMarkedIdentifier(code, "(); // marker");
+    SimpleIdentifier methodName =
+        await findMarkedIdentifier(code, "(); // marker");
     MethodInvocation methodInvoke = methodName.parent;
     expect(methodName.staticType, typeProvider.dynamicType);
     expect(methodInvoke.staticType, typeProvider.dynamicType);
   }
 
-  void test_objectMethodInference_enabled_for_cascades() {
+  test_objectMethodInference_enabled_for_cascades() async {
     String name = 'toString';
     String code = '''
 main() {
   dynamic obj;
   obj..$name()..$name(); // marker
 }''';
-    SimpleIdentifier methodName = findMarkedIdentifier(code, "(); // marker");
+    SimpleIdentifier methodName =
+        await findMarkedIdentifier(code, "(); // marker");
     MethodInvocation methodInvoke = methodName.parent;
 
     expect(methodInvoke.staticType, typeProvider.dynamicType);
     expect(methodInvoke.realTarget.staticType, typeProvider.dynamicType);
   }
 
-  void test_objectMethodOnDynamicExpression_doubleEquals() {
+  test_objectMethodOnDynamicExpression_doubleEquals() async {
     // https://code.google.com/p/dart/issues/detail?id=20342
     //
     // This was not actually part of Issue 20342, since the spec specifies a
     // static type of [bool] for [==] comparison and the implementation
     // was already consistent with the spec there. But, it's another
     // [Object] method, so it's included here.
-    assertTypeOfMarkedExpression(
+    await assertTypeOfMarkedExpression(
         r'''
 f1(x) {
   var v = (x == x);
@@ -2362,9 +2281,9 @@
         typeProvider.boolType);
   }
 
-  void test_objectMethodOnDynamicExpression_hashCode() {
+  test_objectMethodOnDynamicExpression_hashCode() async {
     // https://code.google.com/p/dart/issues/detail?id=20342
-    assertTypeOfMarkedExpression(
+    await assertTypeOfMarkedExpression(
         r'''
 f1(x) {
   var v = x.hashCode;
@@ -2374,9 +2293,9 @@
         typeProvider.intType);
   }
 
-  void test_objectMethodOnDynamicExpression_runtimeType() {
+  test_objectMethodOnDynamicExpression_runtimeType() async {
     // https://code.google.com/p/dart/issues/detail?id=20342
-    assertTypeOfMarkedExpression(
+    await assertTypeOfMarkedExpression(
         r'''
 f1(x) {
   var v = x.runtimeType;
@@ -2386,9 +2305,9 @@
         typeProvider.typeType);
   }
 
-  void test_objectMethodOnDynamicExpression_toString() {
+  test_objectMethodOnDynamicExpression_toString() async {
     // https://code.google.com/p/dart/issues/detail?id=20342
-    assertTypeOfMarkedExpression(
+    await assertTypeOfMarkedExpression(
         r'''
 f1(x) {
   var v = x.toString();
@@ -2398,17 +2317,17 @@
         typeProvider.stringType);
   }
 
-  void test_propagatedReturnType_localFunction() {
+  test_propagatedReturnType_localFunction() async {
     String code = r'''
 main() {
   f() => 42;
   var v = f();
 }''';
-    assertPropagatedAssignedType(
+    await assertPropagatedAssignedType(
         code, typeProvider.dynamicType, typeProvider.intType);
   }
 
-  void test_query() {
+  test_query() async {
     Source source = addSource(r'''
 import 'dart:html';
 
@@ -2428,10 +2347,7 @@
   var b3 = query('body div');
   return [v1, v2, v3, v4, v5, v6, v7, m1, b1, b2, b3];
 }''');
-    LibraryElement library = resolve2(source);
-    assertNoErrors(source);
-    verify([source]);
-    CompilationUnit unit = resolveCompilationUnit(source, library);
+    CompilationUnit unit = await _computeResolvedUnit(source);
     FunctionDeclaration main = unit.declarations[0] as FunctionDeclaration;
     BlockFunctionBody body = main.functionExpression.body as BlockFunctionBody;
     ReturnStatement statement = body.block.statements[11] as ReturnStatement;
@@ -2460,6 +2376,33 @@
     expect(resolutionMap.propagatedTypeForExpression(elements[10]).name,
         "Element");
   }
+
+  /**
+   * Return the resolved unit for the given [source].
+   *
+   * If [noErrors] is not specified or is not `true`, [assertNoErrors].
+   */
+  Future<CompilationUnit> _computeResolvedUnit(Source source,
+      {bool noErrors: true}) async {
+    TestAnalysisResult analysisResult = await computeAnalysisResult(source);
+    if (noErrors) {
+      assertNoErrors(source);
+      verify([source]);
+    }
+    return analysisResult.unit;
+  }
+}
+
+@reflectiveTest
+class TypePropagationTest_Driver extends TypePropagationTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+
+  @failingTest
+  @override
+  test_query() {
+    return super.test_query();
+  }
 }
 
 @reflectiveTest
@@ -2583,17 +2526,17 @@
    */
   TypeResolverVisitor _visitor;
 
-  void fail_visitConstructorDeclaration() {
+  fail_visitConstructorDeclaration() async {
     fail("Not yet tested");
     _listener.assertNoErrors();
   }
 
-  void fail_visitFunctionTypeAlias() {
+  fail_visitFunctionTypeAlias() async {
     fail("Not yet tested");
     _listener.assertNoErrors();
   }
 
-  void fail_visitVariableDeclaration() {
+  fail_visitVariableDeclaration() async {
     fail("Not yet tested");
     ClassElement type = ElementFactory.classElement2("A");
     VariableDeclaration node = AstTestFactory.variableDeclaration("a");
@@ -2622,7 +2565,7 @@
         nameScope: libraryScope);
   }
 
-  void test_modeApi() {
+  test_modeApi() async {
     CompilationUnit unit = ParserTestCase.parseCompilationUnit(r'''
 class C extends A with A implements A {
   A f = new A();
@@ -2723,7 +2666,7 @@
     }
   }
 
-  void test_modeLocal_noContext() {
+  test_modeLocal_noContext() async {
     CompilationUnit unit;
     _resolveTypeModeLocal(
         r'''
@@ -2837,7 +2780,7 @@
     }
   }
 
-  void test_modeLocal_withContext_bad_methodBody() {
+  test_modeLocal_withContext_bad_methodBody() async {
     expect(() {
       _resolveTypeModeLocal(
           r'''
@@ -2856,7 +2799,7 @@
     }, throwsStateError);
   }
 
-  void test_modeLocal_withContext_bad_topLevelVariable_declaration() {
+  test_modeLocal_withContext_bad_topLevelVariable_declaration() async {
     expect(() {
       _resolveTypeModeLocal(
           r'''
@@ -2868,7 +2811,7 @@
     }, throwsStateError);
   }
 
-  void test_modeLocal_withContext_bad_topLevelVariable_initializer() {
+  test_modeLocal_withContext_bad_topLevelVariable_initializer() async {
     expect(() {
       _resolveTypeModeLocal(
           r'''
@@ -2880,7 +2823,7 @@
     }, throwsStateError);
   }
 
-  void test_modeLocal_withContext_class() {
+  test_modeLocal_withContext_class() async {
     ClassDeclaration c;
     _resolveTypeModeLocal(
         r'''
@@ -2915,7 +2858,7 @@
     }
   }
 
-  void test_modeLocal_withContext_inClass_constructor() {
+  test_modeLocal_withContext_inClass_constructor() async {
     ConstructorDeclaration cc;
     _resolveTypeModeLocal(
         r'''
@@ -2940,7 +2883,7 @@
     }
   }
 
-  void test_modeLocal_withContext_inClass_method() {
+  test_modeLocal_withContext_inClass_method() async {
     MethodDeclaration m;
     _resolveTypeModeLocal(
         r'''
@@ -2975,7 +2918,7 @@
     }
   }
 
-  void test_modeLocal_withContext_topLevelFunction() {
+  test_modeLocal_withContext_topLevelFunction() async {
     FunctionDeclaration f;
     _resolveTypeModeLocal(
         r'''
@@ -2998,7 +2941,7 @@
     expect(vd.variables.type.type.toString(), 'T');
   }
 
-  void test_modeLocal_withContext_topLevelVariable() {
+  test_modeLocal_withContext_topLevelVariable() async {
     TopLevelVariableDeclaration v;
     _resolveTypeModeLocal(
         r'''
@@ -3016,7 +2959,7 @@
     expect(vi.constructorName.type.type.toString(), 'A');
   }
 
-  void test_visitCatchClause_exception() {
+  test_visitCatchClause_exception() async {
     // catch (e)
     CatchClause clause = AstTestFactory.catchClause("e");
     SimpleIdentifier exceptionParameter = clause.exceptionParameter;
@@ -3026,7 +2969,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitCatchClause_exception_stackTrace() {
+  test_visitCatchClause_exception_stackTrace() async {
     // catch (e, s)
     CatchClause clause = AstTestFactory.catchClause2("e", "s");
     SimpleIdentifier exceptionParameter = clause.exceptionParameter;
@@ -3040,7 +2983,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitCatchClause_on_exception() {
+  test_visitCatchClause_on_exception() async {
     // on E catch (e)
     ClassElement exceptionElement = ElementFactory.classElement2("E");
     TypeName exceptionType = AstTestFactory.typeName(exceptionElement);
@@ -3053,7 +2996,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitCatchClause_on_exception_stackTrace() {
+  test_visitCatchClause_on_exception_stackTrace() async {
     // on E catch (e, s)
     ClassElement exceptionElement = ElementFactory.classElement2("E");
     TypeName exceptionType = AstTestFactory.typeName(exceptionElement);
@@ -3070,7 +3013,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitClassDeclaration() {
+  test_visitClassDeclaration() async {
     // class A extends B with C implements D {}
     // class B {}
     // class C {}
@@ -3099,7 +3042,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitClassDeclaration_instanceMemberCollidesWithClass() {
+  test_visitClassDeclaration_instanceMemberCollidesWithClass() async {
     // class A {}
     // class B extends A {
     //   void A() {}
@@ -3119,7 +3062,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitClassTypeAlias() {
+  test_visitClassTypeAlias() async {
     // class A = B with C implements D;
     ClassElement elementA = ElementFactory.classElement2("A");
     ClassElement elementB = ElementFactory.classElement2("B");
@@ -3143,7 +3086,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitClassTypeAlias_constructorWithOptionalParams_ignored() {
+  test_visitClassTypeAlias_constructorWithOptionalParams_ignored() async {
     // class T {}
     // class B {
     //   B.c1();
@@ -3184,7 +3127,7 @@
     expect(constructor.parameters, isEmpty);
   }
 
-  void test_visitClassTypeAlias_constructorWithParams() {
+  test_visitClassTypeAlias_constructorWithParams() async {
     // class T {}
     // class B {
     //   B(T a0);
@@ -3218,7 +3161,7 @@
         equals(constructorB.parameters[0].name));
   }
 
-  void test_visitClassTypeAlias_defaultConstructor() {
+  test_visitClassTypeAlias_defaultConstructor() async {
     // class B {}
     // class M {}
     // class C = B with M
@@ -3246,7 +3189,7 @@
     expect(constructor.parameters, isEmpty);
   }
 
-  void test_visitFieldFormalParameter_functionType() {
+  test_visitFieldFormalParameter_functionType() async {
     InterfaceType intType = _typeProvider.intType;
     TypeName intTypeName = AstTestFactory.typeName4("int");
     String innerParameterName = "a";
@@ -3271,7 +3214,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitFieldFormalParameter_noType() {
+  test_visitFieldFormalParameter_noType() async {
     String parameterName = "p";
     FormalParameter node =
         AstTestFactory.fieldFormalParameter(Keyword.VAR, null, parameterName);
@@ -3281,7 +3224,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitFieldFormalParameter_type() {
+  test_visitFieldFormalParameter_type() async {
     InterfaceType intType = _typeProvider.intType;
     TypeName intTypeName = AstTestFactory.typeName4("int");
     String parameterName = "p";
@@ -3293,7 +3236,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitFunctionDeclaration() {
+  test_visitFunctionDeclaration() async {
     // R f(P p) {}
     // class R {}
     // class P {}
@@ -3319,7 +3262,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitFunctionDeclaration_typeParameter() {
+  test_visitFunctionDeclaration_typeParameter() async {
     // E f<E>(E e) {}
     TypeParameterElement elementE = ElementFactory.typeParameterElement('E');
     FunctionElementImpl elementF = ElementFactory.functionElement('f');
@@ -3343,7 +3286,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitFunctionTypedFormalParameter() {
+  test_visitFunctionTypedFormalParameter() async {
     // R f(R g(P p)) {}
     // class R {}
     // class P {}
@@ -3374,7 +3317,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitFunctionTypedFormalParameter_typeParameter() {
+  test_visitFunctionTypedFormalParameter_typeParameter() async {
     // R f(R g<E>(E e)) {}
     // class R {}
     ClassElement elementR = ElementFactory.classElement2('R');
@@ -3405,7 +3348,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitMethodDeclaration() {
+  test_visitMethodDeclaration() async {
     // class A {
     //   R m(P p) {}
     // }
@@ -3434,7 +3377,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitMethodDeclaration_typeParameter() {
+  test_visitMethodDeclaration_typeParameter() async {
     // class A {
     //   E m<E>(E e) {}
     // }
@@ -3461,7 +3404,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitSimpleFormalParameter_noType() {
+  test_visitSimpleFormalParameter_noType() async {
     // p
     FormalParameter node = AstTestFactory.simpleFormalParameter3("p");
     node.identifier.staticElement =
@@ -3470,7 +3413,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitSimpleFormalParameter_type() {
+  test_visitSimpleFormalParameter_type() async {
     // int p
     InterfaceType intType = _typeProvider.intType;
     ClassElement intElement = intType.element;
@@ -3483,7 +3426,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitTypeName_noParameters_noArguments() {
+  test_visitTypeName_noParameters_noArguments() async {
     ClassElement classA = ElementFactory.classElement2("A");
     TypeName typeName = AstTestFactory.typeName(classA);
     typeName.type = null;
@@ -3492,7 +3435,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitTypeName_noParameters_noArguments_undefined() {
+  test_visitTypeName_noParameters_noArguments_undefined() async {
     SimpleIdentifier id = AstTestFactory.identifier3("unknown")
       ..staticElement = new _StaleElement();
     TypeName typeName = astFactory.typeName(id, null);
@@ -3502,7 +3445,7 @@
     _listener.assertErrorsWithCodes([StaticWarningCode.UNDEFINED_CLASS]);
   }
 
-  void test_visitTypeName_parameters_arguments() {
+  test_visitTypeName_parameters_arguments() async {
     ClassElement classA = ElementFactory.classElement2("A", ["E"]);
     ClassElement classB = ElementFactory.classElement2("B");
     TypeName typeName =
@@ -3517,7 +3460,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitTypeName_parameters_noArguments() {
+  test_visitTypeName_parameters_noArguments() async {
     ClassElement classA = ElementFactory.classElement2("A", ["E"]);
     TypeName typeName = AstTestFactory.typeName(classA);
     typeName.type = null;
@@ -3530,7 +3473,7 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitTypeName_prefixed_noParameters_noArguments_undefined() {
+  test_visitTypeName_prefixed_noParameters_noArguments_undefined() async {
     SimpleIdentifier prefix = AstTestFactory.identifier3("unknownPrefix")
       ..staticElement = new _StaleElement();
     SimpleIdentifier suffix = AstTestFactory.identifier3("unknownSuffix")
@@ -3544,7 +3487,7 @@
     _listener.assertErrorsWithCodes([StaticWarningCode.UNDEFINED_CLASS]);
   }
 
-  void test_visitTypeName_void() {
+  test_visitTypeName_void() async {
     ClassElement classA = ElementFactory.classElement2("A");
     TypeName typeName = AstTestFactory.typeName4("void");
     _resolveNode(typeName, [classA]);
diff --git a/pkg/analyzer/test/generated/resolver_test_case.dart b/pkg/analyzer/test/generated/resolver_test_case.dart
index 8de57ce..509c639 100644
--- a/pkg/analyzer/test/generated/resolver_test_case.dart
+++ b/pkg/analyzer/test/generated/resolver_test_case.dart
@@ -4,24 +4,33 @@
 
 library analyzer.test.generated.resolver_test_case;
 
+import 'dart:async';
+
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/error/error.dart';
+import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/source/package_map_resolver.dart';
+import 'package:analyzer/src/dart/analysis/byte_store.dart';
+import 'package:analyzer/src/dart/analysis/driver.dart';
+import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/engine.dart' hide AnalysisResult;
 import 'package:analyzer/src/generated/java_engine.dart';
 import 'package:analyzer/src/generated/resolver.dart';
+import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source_io.dart';
 import 'package:analyzer/src/generated/testing/ast_test_factory.dart';
 import 'package:analyzer/src/generated/testing/element_factory.dart';
 import 'package:test/test.dart';
 
+import '../src/dart/analysis/physical_sdk.dart' as physical_sdk;
 import 'analysis_context_factory.dart';
 import 'test_support.dart';
 
@@ -323,15 +332,29 @@
    */
   bool enableUnusedLocalVariable = false;
 
+  final Map<Source, TestAnalysisResult> analysisResults = {};
+
+  StringBuffer _logBuffer = new StringBuffer();
+  FileContentOverlay _fileContentOverlay = new FileContentOverlay();
+  AnalysisDriver driver;
+
   AnalysisContext get analysisContext => analysisContext2;
 
+  bool get enableNewAnalysisDriver => false;
+
   /**
    * Return a type provider that can be used to test the results of resolution.
    *
    * @return a type provider
    * @throws AnalysisException if dart:core cannot be resolved
    */
-  TypeProvider get typeProvider => analysisContext2.typeProvider;
+  TypeProvider get typeProvider {
+    if (enableNewAnalysisDriver) {
+      return driver.sourceFactory.dartSdk.context.typeProvider;
+    } else {
+      return analysisContext2.typeProvider;
+    }
+  }
 
   /**
    * Return a type system that can be used to test the results of resolution.
@@ -346,11 +369,17 @@
    * set in the content provider. Return the source representing the added file.
    */
   Source addNamedSource(String filePath, String contents) {
-    Source source =
-        cacheSource(resourceProvider.convertPath(filePath), contents);
-    ChangeSet changeSet = new ChangeSet();
-    changeSet.addedSource(source);
-    analysisContext2.applyChanges(changeSet);
+    filePath = resourceProvider.convertPath(filePath);
+    File file = resourceProvider.newFile(filePath, contents);
+    Source source = file.createSource();
+    if (enableNewAnalysisDriver) {
+      driver.addFile(filePath);
+    } else {
+      analysisContext2.setContents(source, contents);
+      ChangeSet changeSet = new ChangeSet();
+      changeSet.addedSource(source);
+      analysisContext2.applyChanges(changeSet);
+    }
     return source;
   }
 
@@ -362,20 +391,18 @@
   Source addSource(String contents) => addNamedSource("/test.dart", contents);
 
   /**
-   * Assert that the number of errors reported against the given source matches the number of errors
-   * that are given and that they have the expected error codes. The order in which the errors were
-   * gathered is ignored.
-   *
-   * @param source the source against which the errors should have been reported
-   * @param expectedErrorCodes the error codes of the errors that should have been reported
-   * @throws AnalysisException if the reported errors could not be computed
-   * @throws AssertionFailedError if a different number of errors have been reported than were
-   *           expected
+   * Assert that the number of errors reported against the given
+   * [source] matches the number of errors that are given and that they have
+   * the expected error codes. The order in which the errors were gathered is
+   * ignored.
    */
   void assertErrors(Source source,
       [List<ErrorCode> expectedErrorCodes = const <ErrorCode>[]]) {
+    TestAnalysisResult result = analysisResults[source];
+    expect(result, isNotNull);
+
     GatheringErrorListener errorListener = new GatheringErrorListener();
-    for (AnalysisError error in analysisContext2.computeErrors(source)) {
+    for (AnalysisError error in result.errors) {
       expect(error.source, source);
       ErrorCode errorCode = error.errorCode;
       if (!enableUnusedElement &&
@@ -400,9 +427,9 @@
    * Like [assertErrors], but takes a string of source code.
    */
   // TODO(rnystrom): Use this in more tests that have the same structure.
-  void assertErrorsInCode(String code, List<ErrorCode> errors) {
+  Future<Null> assertErrorsInCode(String code, List<ErrorCode> errors) async {
     Source source = addSource(code);
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, errors);
     verify([source]);
   }
@@ -412,9 +439,10 @@
    *
    * Like [assertErrors], but takes a string of source code.
    */
-  void assertErrorsInUnverifiedCode(String code, List<ErrorCode> errors) {
+  Future<Null> assertErrorsInUnverifiedCode(
+      String code, List<ErrorCode> errors) async {
     Source source = addSource(code);
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, errors);
   }
 
@@ -433,9 +461,9 @@
    * Asserts that [code] has no errors or warnings.
    */
   // TODO(rnystrom): Use this in more tests that have the same structure.
-  void assertNoErrorsInCode(String code) {
+  Future<Null> assertNoErrorsInCode(String code) async {
     Source source = addSource(code);
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
@@ -444,9 +472,9 @@
    * @param code the code that assigns the value to the variable "v", no matter how. We check that
    *          "v" has expected static and propagated type.
    */
-  void assertPropagatedAssignedType(String code, DartType expectedStaticType,
-      DartType expectedPropagatedType) {
-    SimpleIdentifier identifier = findMarkedIdentifier(code, "v = ");
+  Future<Null> assertPropagatedAssignedType(String code,
+      DartType expectedStaticType, DartType expectedPropagatedType) async {
+    SimpleIdentifier identifier = await findMarkedIdentifier(code, "v = ");
     expect(identifier.staticType, same(expectedStaticType));
     expect(identifier.propagatedType, same(expectedPropagatedType));
   }
@@ -455,9 +483,9 @@
    * @param code the code that iterates using variable "v". We check that
    *          "v" has expected static and propagated type.
    */
-  void assertPropagatedIterationType(String code, DartType expectedStaticType,
-      DartType expectedPropagatedType) {
-    SimpleIdentifier identifier = findMarkedIdentifier(code, "v in ");
+  Future<Null> assertPropagatedIterationType(String code,
+      DartType expectedStaticType, DartType expectedPropagatedType) async {
+    SimpleIdentifier identifier = await findMarkedIdentifier(code, "v in ");
     expect(identifier.staticType, same(expectedStaticType));
     expect(identifier.propagatedType, same(expectedPropagatedType));
   }
@@ -470,9 +498,10 @@
    * @param expectedPropagatedType if non-null, check actual static type is equal to this.
    * @throws Exception
    */
-  void assertTypeOfMarkedExpression(String code, DartType expectedStaticType,
-      DartType expectedPropagatedType) {
-    SimpleIdentifier identifier = findMarkedIdentifier(code, "; // marker");
+  Future<Null> assertTypeOfMarkedExpression(String code,
+      DartType expectedStaticType, DartType expectedPropagatedType) async {
+    SimpleIdentifier identifier =
+        await findMarkedIdentifier(code, "; // marker");
     if (expectedStaticType != null) {
       expect(identifier.staticType, expectedStaticType);
     }
@@ -480,16 +509,6 @@
   }
 
   /**
-   * Cache the [contents] for the file at the given [filePath] but don't add the
-   * source to the analysis context. The file path must be absolute.
-   */
-  Source cacheSource(String filePath, String contents) {
-    Source source = resourceProvider.getFile(filePath).createSource();
-    analysisContext2.setContents(source, contents);
-    return source;
-  }
-
-  /**
    * Change the contents of the given [source] to the given [contents].
    */
   void changeSource(Source source, String contents) {
@@ -499,13 +518,24 @@
     analysisContext2.applyChanges(changeSet);
   }
 
-  /**
-   * Computes errors for the given [librarySource].
-   * This assumes that the given [librarySource] and its parts have already
-   * been added to the content provider using the method [addNamedSource].
-   */
-  void computeLibrarySourceErrors(Source librarySource) {
-    analysisContext.computeErrors(librarySource);
+  Future<TestAnalysisResult> computeAnalysisResult(Source source) async {
+    TestAnalysisResult analysisResult;
+    if (enableNewAnalysisDriver) {
+      AnalysisResult result = await driver.getResult(source.fullName);
+      analysisResult =
+          new TestAnalysisResult(source, result.unit, result.errors);
+    } else {
+      analysisContext2.computeKindOf(source);
+      List<Source> libraries = analysisContext2.getLibrariesContaining(source);
+      if (libraries.length > 0) {
+        CompilationUnit unit =
+            analysisContext.resolveCompilationUnit2(source, libraries.first);
+        List<AnalysisError> errors = analysisContext.computeErrors(source);
+        analysisResult = new TestAnalysisResult(source, unit, errors);
+      }
+    }
+    analysisResults[source] = analysisResult;
+    return analysisResult;
   }
 
   /**
@@ -578,15 +608,14 @@
    * @return expression marked by the marker.
    * @throws Exception
    */
-  SimpleIdentifier findMarkedIdentifier(String code, String marker) {
+  Future<SimpleIdentifier> findMarkedIdentifier(
+      String code, String marker) async {
     try {
       Source source = addSource(code);
-      LibraryElement library = resolve2(source);
+      await computeAnalysisResult(source);
       assertNoErrors(source);
       verify([source]);
-      CompilationUnit unit = resolveCompilationUnit(source, library);
-      // Could generalize this further by making [SimpleIdentifier.class] a
-      // parameter.
+      CompilationUnit unit = analysisResults[source].unit;
       return EngineTestCase.findNode(
           unit, code, marker, (node) => node is SimpleIdentifier);
     } catch (exception) {
@@ -602,7 +631,6 @@
   Expression findTopLevelConstantExpression(
           CompilationUnit compilationUnit, String name) =>
       findTopLevelDeclaration(compilationUnit, name).initializer;
-
   VariableDeclaration findTopLevelDeclaration(
       CompilationUnit compilationUnit, String name) {
     for (CompilationUnitMember member in compilationUnit.declarations) {
@@ -622,17 +650,65 @@
    * Re-create the analysis context being used by the test case.
    */
   void reset() {
-    analysisContext2 = AnalysisContextFactory.contextWithCore(
-        resourceProvider: resourceProvider);
+    resetWith();
   }
 
   /**
-   * Re-create the analysis context being used by the test case and set the
-   * [options] in the newly created context to the given [options].
+   * Re-create the analysis context being used by the test with the either given
+   * [options] or [packages].
    */
-  void resetWithOptions(AnalysisOptions options) {
-    analysisContext2 = AnalysisContextFactory.contextWithCoreAndOptions(options,
-        resourceProvider: resourceProvider);
+  void resetWith({AnalysisOptions options, List<List<String>> packages}) {
+    if (options != null && packages != null) {
+      fail('Only packages or options can be specified.');
+    }
+    if (enableNewAnalysisDriver) {
+      options ??= new AnalysisOptionsImpl();
+      DartSdk sdk =
+          options.strongMode ? physical_sdk.strongSdk : physical_sdk.sdk;
+
+      List<UriResolver> resolvers = <UriResolver>[
+        new DartUriResolver(sdk),
+        new ResourceUriResolver(resourceProvider)
+      ];
+      if (packages != null) {
+        var packageMap = <String, List<Folder>>{};
+        packages.forEach((args) {
+          String name = args[0];
+          String path =
+              resourceProvider.convertPath('/packages/$name/$name.dart');
+          String content = args[1];
+          File file = resourceProvider.newFile(path, content);
+          packageMap[name] = <Folder>[file.parent];
+        });
+        resolvers.add(new PackageMapUriResolver(resourceProvider, packageMap));
+      }
+      SourceFactory sourceFactory = new SourceFactory(resolvers);
+
+      PerformanceLog log = new PerformanceLog(_logBuffer);
+      AnalysisDriverScheduler scheduler = new AnalysisDriverScheduler(log);
+      driver = new AnalysisDriver(scheduler, log, resourceProvider,
+          new MemoryByteStore(), _fileContentOverlay, sourceFactory, options);
+      scheduler.start();
+    } else {
+      if (packages != null) {
+        var packageMap = <String, String>{};
+        packages.forEach((args) {
+          String name = args[0];
+          String content = args[1];
+          packageMap['package:$name/$name.dart'] = content;
+        });
+        analysisContext2 = AnalysisContextFactory.contextWithCoreAndPackages(
+            packageMap,
+            resourceProvider: resourceProvider);
+      } else if (options != null) {
+        analysisContext2 = AnalysisContextFactory.contextWithCoreAndOptions(
+            options,
+            resourceProvider: resourceProvider);
+      } else {
+        analysisContext2 = AnalysisContextFactory.contextWithCore(
+            resourceProvider: resourceProvider);
+      }
+    }
   }
 
   /**
@@ -659,50 +735,53 @@
           Source source, LibraryElement library) =>
       analysisContext2.resolveCompilationUnit(source, library);
 
-  CompilationUnit resolveSource(String sourceText) =>
-      resolveSource2("/test.dart", sourceText);
-
-  CompilationUnit resolveSource2(String fileName, String sourceText) {
+  Future<CompilationUnit> resolveSource2(
+      String fileName, String sourceText) async {
     Source source = addNamedSource(fileName, sourceText);
-    LibraryElement library = analysisContext.computeLibraryElement(source);
-    return analysisContext.resolveCompilationUnit(source, library);
+    TestAnalysisResult analysisResult = await computeAnalysisResult(source);
+    return analysisResult.unit;
   }
 
-  Source resolveSources(List<String> sourceTexts) {
+  Future<CompilationUnit> resolveSource(String sourceText) =>
+      resolveSource2('/test.dart', sourceText);
+
+  Future<Source> resolveSources(List<String> sourceTexts) async {
     for (int i = 0; i < sourceTexts.length; i++) {
-      CompilationUnit unit =
-          resolveSource2("/lib${i + 1}.dart", sourceTexts[i]);
+      Source source = addNamedSource('/lib${i + 1}.dart', sourceTexts[i]);
+      await computeAnalysisResult(source);
       // reference the source if this is the last source
       if (i + 1 == sourceTexts.length) {
-        return resolutionMap.elementDeclaredByCompilationUnit(unit).source;
+        return source;
       }
     }
     return null;
   }
 
-  void resolveWithAndWithoutExperimental(
+  Future<Null> resolveWithAndWithoutExperimental(
       List<String> strSources,
       List<ErrorCode> codesWithoutExperimental,
-      List<ErrorCode> codesWithExperimental) {
+      List<ErrorCode> codesWithExperimental) async {
     // Setup analysis context as non-experimental
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
 //    options.enableDeferredLoading = false;
-    resetWithOptions(options);
+    resetWith(options: options);
     // Analysis and assertions
-    Source source = resolveSources(strSources);
+    Source source = await resolveSources(strSources);
+    await computeAnalysisResult(source);
     assertErrors(source, codesWithoutExperimental);
     verify([source]);
     // Setup analysis context as experimental
     reset();
     // Analysis and assertions
-    source = resolveSources(strSources);
+    source = await resolveSources(strSources);
+    await computeAnalysisResult(source);
     assertErrors(source, codesWithExperimental);
     verify([source]);
   }
 
-  void resolveWithErrors(List<String> strSources, List<ErrorCode> codes) {
-    // Analysis and assertions
-    Source source = resolveSources(strSources);
+  Future<Null> resolveWithErrors(
+      List<String> strSources, List<ErrorCode> codes) async {
+    Source source = await resolveSources(strSources);
     assertErrors(source, codes);
     verify([source]);
   }
@@ -727,12 +806,9 @@
   void verify(List<Source> sources) {
     ResolutionVerifier verifier = new ResolutionVerifier();
     for (Source source in sources) {
-      List<Source> libraries = analysisContext2.getLibrariesContaining(source);
-      for (Source library in libraries) {
-        analysisContext2
-            .resolveCompilationUnit2(source, library)
-            .accept(verifier);
-      }
+      TestAnalysisResult result = analysisResults[source];
+      expect(result, isNotNull);
+      result.unit.accept(verifier);
     }
     verifier.assertResolved();
   }
@@ -752,11 +828,14 @@
    * stringifies to [type] and that its generics match the given stringified
    * output.
    */
-  expectFunctionType(String name, String type,
+  FunctionTypeImpl expectFunctionType(String name, String type,
       {String elementTypeParams: '[]',
       String typeParams: '[]',
       String typeArgs: '[]',
-      String typeFormals: '[]'}) {
+      String typeFormals: '[]',
+      String identifierType}) {
+    identifierType ??= type;
+
     typeParameters(Element element) {
       if (element is ExecutableElement) {
         return element.typeParameters;
@@ -768,13 +847,15 @@
 
     SimpleIdentifier identifier = findIdentifier(name);
     // Element is either ExecutableElement or ParameterElement.
-    Element element = identifier.staticElement;
-    FunctionTypeImpl functionType = identifier.staticType;
+    var element = identifier.staticElement;
+    FunctionTypeImpl functionType = (element as dynamic).type;
     expect(functionType.toString(), type);
+    expect(identifier.staticType.toString(), identifierType);
     expect(typeParameters(element).toString(), elementTypeParams);
     expect(functionType.typeParameters.toString(), typeParams);
     expect(functionType.typeArguments.toString(), typeArgs);
     expect(functionType.typeFormals.toString(), typeFormals);
+    return functionType;
   }
 
   /**
@@ -823,13 +904,13 @@
     return identifier;
   }
 
-  void resolveTestUnit(String code) {
+  Future<Null> resolveTestUnit(String code) async {
     testCode = code;
     testSource = addSource(testCode);
-    LibraryElement library = resolve2(testSource);
+    TestAnalysisResult analysisResult = await computeAnalysisResult(testSource);
     assertNoErrors(testSource);
     verify([testSource]);
-    testUnit = resolveCompilationUnit(testSource, library);
+    testUnit = analysisResult.unit;
   }
 
   /**
@@ -846,3 +927,10 @@
     }
   }
 }
+
+class TestAnalysisResult {
+  final Source source;
+  final CompilationUnit unit;
+  final List<AnalysisError> errors;
+  TestAnalysisResult(this.source, this.unit, this.errors);
+}
diff --git a/pkg/analyzer/test/generated/simple_resolver_test.dart b/pkg/analyzer/test/generated/simple_resolver_test.dart
index 620bc1f..f8ce31e 100644
--- a/pkg/analyzer/test/generated/simple_resolver_test.dart
+++ b/pkg/analyzer/test/generated/simple_resolver_test.dart
@@ -27,7 +27,7 @@
 
 @reflectiveTest
 class SimpleResolverTest extends ResolverTestCase {
-  void test_argumentResolution_required_matching() {
+  test_argumentResolution_required_matching() async {
     Source source = addSource(r'''
 class A {
   void f() {
@@ -38,7 +38,7 @@
     _validateArgumentResolution(source, [0, 1, 2]);
   }
 
-  void test_argumentResolution_required_tooFew() {
+  test_argumentResolution_required_tooFew() async {
     Source source = addSource(r'''
 class A {
   void f() {
@@ -49,7 +49,7 @@
     _validateArgumentResolution(source, [0, 1]);
   }
 
-  void test_argumentResolution_required_tooMany() {
+  test_argumentResolution_required_tooMany() async {
     Source source = addSource(r'''
 class A {
   void f() {
@@ -60,7 +60,7 @@
     _validateArgumentResolution(source, [0, 1, -1]);
   }
 
-  void test_argumentResolution_requiredAndNamed_extra() {
+  test_argumentResolution_requiredAndNamed_extra() async {
     Source source = addSource(r'''
 class A {
   void f() {
@@ -71,7 +71,7 @@
     _validateArgumentResolution(source, [0, 1, 2, -1]);
   }
 
-  void test_argumentResolution_requiredAndNamed_matching() {
+  test_argumentResolution_requiredAndNamed_matching() async {
     Source source = addSource(r'''
 class A {
   void f() {
@@ -82,7 +82,7 @@
     _validateArgumentResolution(source, [0, 1, 2]);
   }
 
-  void test_argumentResolution_requiredAndNamed_missing() {
+  test_argumentResolution_requiredAndNamed_missing() async {
     Source source = addSource(r'''
 class A {
   void f() {
@@ -93,7 +93,7 @@
     _validateArgumentResolution(source, [0, 1, 3]);
   }
 
-  void test_argumentResolution_requiredAndPositional_fewer() {
+  test_argumentResolution_requiredAndPositional_fewer() async {
     Source source = addSource(r'''
 class A {
   void f() {
@@ -104,7 +104,7 @@
     _validateArgumentResolution(source, [0, 1, 2]);
   }
 
-  void test_argumentResolution_requiredAndPositional_matching() {
+  test_argumentResolution_requiredAndPositional_matching() async {
     Source source = addSource(r'''
 class A {
   void f() {
@@ -115,7 +115,7 @@
     _validateArgumentResolution(source, [0, 1, 2, 3]);
   }
 
-  void test_argumentResolution_requiredAndPositional_more() {
+  test_argumentResolution_requiredAndPositional_more() async {
     Source source = addSource(r'''
 class A {
   void f() {
@@ -126,7 +126,7 @@
     _validateArgumentResolution(source, [0, 1, 2, -1]);
   }
 
-  void test_argumentResolution_setter_propagated() {
+  test_argumentResolution_setter_propagated() async {
     Source source = addSource(r'''
 main() {
   var a = new A();
@@ -159,7 +159,7 @@
     expect(setter.parameters[0], same(parameter));
   }
 
-  void test_argumentResolution_setter_propagated_propertyAccess() {
+  test_argumentResolution_setter_propagated_propertyAccess() async {
     Source source = addSource(r'''
 main() {
   var a = new A();
@@ -195,7 +195,7 @@
     expect(setter.parameters[0], same(parameter));
   }
 
-  void test_argumentResolution_setter_static() {
+  test_argumentResolution_setter_static() async {
     Source source = addSource(r'''
 main() {
   A a = new A();
@@ -227,7 +227,7 @@
     expect(setter.parameters[0], same(parameter));
   }
 
-  void test_argumentResolution_setter_static_propertyAccess() {
+  test_argumentResolution_setter_static_propertyAccess() async {
     Source source = addSource(r'''
 main() {
   A a = new A();
@@ -262,7 +262,7 @@
     expect(setter.parameters[0], same(parameter));
   }
 
-  void test_breakTarget_labeled() {
+  test_breakTarget_labeled() async {
     // Verify that the target of the label is correctly found and is recorded
     // as the unlabeled portion of the statement.
     String text = r'''
@@ -275,7 +275,7 @@
   }
 }
 ''';
-    CompilationUnit unit = resolveSource(text);
+    CompilationUnit unit = await resolveSource(text);
     WhileStatement whileStatement = EngineTestCase.findNode(
         unit, text, 'while (true)', (n) => n is WhileStatement);
     ForStatement forStatement =
@@ -288,7 +288,7 @@
     expect(break2.target, same(forStatement));
   }
 
-  void test_breakTarget_unlabeledBreakFromDo() {
+  test_breakTarget_unlabeledBreakFromDo() async {
     String text = r'''
 void f() {
   do {
@@ -296,7 +296,7 @@
   } while (true);
 }
 ''';
-    CompilationUnit unit = resolveSource(text);
+    CompilationUnit unit = await resolveSource(text);
     DoStatement doStatement =
         EngineTestCase.findNode(unit, text, 'do', (n) => n is DoStatement);
     BreakStatement breakStatement = EngineTestCase.findNode(
@@ -304,7 +304,7 @@
     expect(breakStatement.target, same(doStatement));
   }
 
-  void test_breakTarget_unlabeledBreakFromFor() {
+  test_breakTarget_unlabeledBreakFromFor() async {
     String text = r'''
 void f() {
   for (int i = 0; i < 10; i++) {
@@ -312,7 +312,7 @@
   }
 }
 ''';
-    CompilationUnit unit = resolveSource(text);
+    CompilationUnit unit = await resolveSource(text);
     ForStatement forStatement =
         EngineTestCase.findNode(unit, text, 'for', (n) => n is ForStatement);
     BreakStatement breakStatement = EngineTestCase.findNode(
@@ -320,7 +320,7 @@
     expect(breakStatement.target, same(forStatement));
   }
 
-  void test_breakTarget_unlabeledBreakFromForEach() {
+  test_breakTarget_unlabeledBreakFromForEach() async {
     String text = r'''
 void f() {
   for (x in []) {
@@ -328,7 +328,7 @@
   }
 }
 ''';
-    CompilationUnit unit = resolveSource(text);
+    CompilationUnit unit = await resolveSource(text);
     ForEachStatement forStatement = EngineTestCase.findNode(
         unit, text, 'for', (n) => n is ForEachStatement);
     BreakStatement breakStatement = EngineTestCase.findNode(
@@ -336,7 +336,7 @@
     expect(breakStatement.target, same(forStatement));
   }
 
-  void test_breakTarget_unlabeledBreakFromSwitch() {
+  test_breakTarget_unlabeledBreakFromSwitch() async {
     String text = r'''
 void f() {
   while (true) {
@@ -347,7 +347,7 @@
   }
 }
 ''';
-    CompilationUnit unit = resolveSource(text);
+    CompilationUnit unit = await resolveSource(text);
     SwitchStatement switchStatement = EngineTestCase.findNode(
         unit, text, 'switch', (n) => n is SwitchStatement);
     BreakStatement breakStatement = EngineTestCase.findNode(
@@ -355,7 +355,7 @@
     expect(breakStatement.target, same(switchStatement));
   }
 
-  void test_breakTarget_unlabeledBreakFromWhile() {
+  test_breakTarget_unlabeledBreakFromWhile() async {
     String text = r'''
 void f() {
   while (true) {
@@ -363,7 +363,7 @@
   }
 }
 ''';
-    CompilationUnit unit = resolveSource(text);
+    CompilationUnit unit = await resolveSource(text);
     WhileStatement whileStatement = EngineTestCase.findNode(
         unit, text, 'while', (n) => n is WhileStatement);
     BreakStatement breakStatement = EngineTestCase.findNode(
@@ -371,7 +371,7 @@
     expect(breakStatement.target, same(whileStatement));
   }
 
-  void test_breakTarget_unlabeledBreakToOuterFunction() {
+  test_breakTarget_unlabeledBreakToOuterFunction() async {
     // Verify that unlabeled break statements can't resolve to loops in an
     // outer function.
     String text = r'''
@@ -383,13 +383,13 @@
   }
 }
 ''';
-    CompilationUnit unit = resolveSource(text);
+    CompilationUnit unit = await resolveSource(text);
     BreakStatement breakStatement = EngineTestCase.findNode(
         unit, text, 'break', (n) => n is BreakStatement);
     expect(breakStatement.target, isNull);
   }
 
-  void test_class_definesCall() {
+  test_class_definesCall() async {
     Source source = addSource(r'''
 class A {
   int call(int x) { return x; }
@@ -397,22 +397,22 @@
 int f(A a) {
   return a(0);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_class_extends_implements() {
+  test_class_extends_implements() async {
     Source source = addSource(r'''
 class A extends B implements C {}
 class B {}
 class C {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_commentReference_class() {
+  test_commentReference_class() async {
     Source source = addSource(r'''
 f() {}
 /** [A] [new A] [A.n] [new A.n] [m] [f] */
@@ -421,12 +421,12 @@
   A.n() {}
   m() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_commentReference_parameter() {
+  test_commentReference_parameter() async {
     Source source = addSource(r'''
 class A {
   A() {}
@@ -434,21 +434,21 @@
   /** [e] [f] */
   m(e, f()) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_commentReference_singleLine() {
+  test_commentReference_singleLine() async {
     Source source = addSource(r'''
 /// [A]
 class A {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_continueTarget_labeled() {
+  test_continueTarget_labeled() async {
     // Verify that the target of the label is correctly found and is recorded
     // as the unlabeled portion of the statement.
     String text = r'''
@@ -461,7 +461,7 @@
   }
 }
 ''';
-    CompilationUnit unit = resolveSource(text);
+    CompilationUnit unit = await resolveSource(text);
     WhileStatement whileStatement = EngineTestCase.findNode(
         unit, text, 'while (true)', (n) => n is WhileStatement);
     ForStatement forStatement =
@@ -474,7 +474,7 @@
     expect(continue2.target, same(forStatement));
   }
 
-  void test_continueTarget_unlabeledContinueFromDo() {
+  test_continueTarget_unlabeledContinueFromDo() async {
     String text = r'''
 void f() {
   do {
@@ -482,7 +482,7 @@
   } while (true);
 }
 ''';
-    CompilationUnit unit = resolveSource(text);
+    CompilationUnit unit = await resolveSource(text);
     DoStatement doStatement =
         EngineTestCase.findNode(unit, text, 'do', (n) => n is DoStatement);
     ContinueStatement continueStatement = EngineTestCase.findNode(
@@ -490,7 +490,7 @@
     expect(continueStatement.target, same(doStatement));
   }
 
-  void test_continueTarget_unlabeledContinueFromFor() {
+  test_continueTarget_unlabeledContinueFromFor() async {
     String text = r'''
 void f() {
   for (int i = 0; i < 10; i++) {
@@ -498,7 +498,7 @@
   }
 }
 ''';
-    CompilationUnit unit = resolveSource(text);
+    CompilationUnit unit = await resolveSource(text);
     ForStatement forStatement =
         EngineTestCase.findNode(unit, text, 'for', (n) => n is ForStatement);
     ContinueStatement continueStatement = EngineTestCase.findNode(
@@ -506,7 +506,7 @@
     expect(continueStatement.target, same(forStatement));
   }
 
-  void test_continueTarget_unlabeledContinueFromForEach() {
+  test_continueTarget_unlabeledContinueFromForEach() async {
     String text = r'''
 void f() {
   for (x in []) {
@@ -514,7 +514,7 @@
   }
 }
 ''';
-    CompilationUnit unit = resolveSource(text);
+    CompilationUnit unit = await resolveSource(text);
     ForEachStatement forStatement = EngineTestCase.findNode(
         unit, text, 'for', (n) => n is ForEachStatement);
     ContinueStatement continueStatement = EngineTestCase.findNode(
@@ -522,7 +522,7 @@
     expect(continueStatement.target, same(forStatement));
   }
 
-  void test_continueTarget_unlabeledContinueFromWhile() {
+  test_continueTarget_unlabeledContinueFromWhile() async {
     String text = r'''
 void f() {
   while (true) {
@@ -530,7 +530,7 @@
   }
 }
 ''';
-    CompilationUnit unit = resolveSource(text);
+    CompilationUnit unit = await resolveSource(text);
     WhileStatement whileStatement = EngineTestCase.findNode(
         unit, text, 'while', (n) => n is WhileStatement);
     ContinueStatement continueStatement = EngineTestCase.findNode(
@@ -538,7 +538,7 @@
     expect(continueStatement.target, same(whileStatement));
   }
 
-  void test_continueTarget_unlabeledContinueSkipsSwitch() {
+  test_continueTarget_unlabeledContinueSkipsSwitch() async {
     String text = r'''
 void f() {
   while (true) {
@@ -549,7 +549,7 @@
   }
 }
 ''';
-    CompilationUnit unit = resolveSource(text);
+    CompilationUnit unit = await resolveSource(text);
     WhileStatement whileStatement = EngineTestCase.findNode(
         unit, text, 'while', (n) => n is WhileStatement);
     ContinueStatement continueStatement = EngineTestCase.findNode(
@@ -557,7 +557,7 @@
     expect(continueStatement.target, same(whileStatement));
   }
 
-  void test_continueTarget_unlabeledContinueToOuterFunction() {
+  test_continueTarget_unlabeledContinueToOuterFunction() async {
     // Verify that unlabeled continue statements can't resolve to loops in an
     // outer function.
     String text = r'''
@@ -569,20 +569,20 @@
   }
 }
 ''';
-    CompilationUnit unit = resolveSource(text);
+    CompilationUnit unit = await resolveSource(text);
     ContinueStatement continueStatement = EngineTestCase.findNode(
         unit, text, 'continue', (n) => n is ContinueStatement);
     expect(continueStatement.target, isNull);
   }
 
-  void test_empty() {
+  test_empty() async {
     Source source = addSource("");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_entryPoint_exported() {
+  test_entryPoint_exported() async {
     addNamedSource(
         "/two.dart",
         r'''
@@ -598,11 +598,12 @@
     FunctionElement main = library.entryPoint;
     expect(main, isNotNull);
     expect(main.library, isNot(same(library)));
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_entryPoint_local() {
+  test_entryPoint_local() async {
     Source source = addNamedSource(
         "/one.dart",
         r'''
@@ -613,20 +614,22 @@
     FunctionElement main = library.entryPoint;
     expect(main, isNotNull);
     expect(main.library, same(library));
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_entryPoint_none() {
+  test_entryPoint_none() async {
     Source source = addNamedSource("/one.dart", "library one;");
     LibraryElement library = resolve2(source);
     expect(library, isNotNull);
     expect(library.entryPoint, isNull);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_enum_externalLibrary() {
+  test_enum_externalLibrary() async {
     addNamedSource(
         "/my_lib.dart",
         r'''
@@ -637,12 +640,12 @@
 main() {
   EEE e = null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_extractedMethodAsConstant() {
+  test_extractedMethodAsConstant() async {
     Source source = addSource(r'''
 abstract class Comparable<T> {
   int compareTo(T other);
@@ -651,12 +654,12 @@
 class A {
   void sort([compare = Comparable.compare]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_fieldFormalParameter() {
+  test_fieldFormalParameter() async {
     Source source = addSource(r'''
 class A {
   int x;
@@ -677,24 +680,24 @@
     SimpleIdentifier identifierX = initializer.expression;
     expect(identifierX.staticElement, paramElement);
 
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_forEachLoops_nonConflicting() {
+  test_forEachLoops_nonConflicting() async {
     Source source = addSource(r'''
 f() {
   List list = [1,2,3];
   for (int x in list) {}
   for (int x in list) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_forLoops_nonConflicting() {
+  test_forLoops_nonConflicting() async {
     Source source = addSource(r'''
 f() {
   for (int i = 0; i < 3; i++) {
@@ -702,12 +705,12 @@
   for (int i = 0; i < 3; i++) {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_functionTypeAlias() {
+  test_functionTypeAlias() async {
     Source source = addSource(r'''
 typedef bool P(e);
 class A {
@@ -716,12 +719,12 @@
     if (p(e)) {}
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_getter_and_setter_fromMixins_bare_identifier() {
+  test_getter_and_setter_fromMixins_bare_identifier() async {
     Source source = addSource('''
 class B {}
 class M1 {
@@ -739,6 +742,7 @@
 }
 ''');
     LibraryElement library = resolve2(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
     // Verify that both the getter and setter for "x" in C.f() refer to the
@@ -760,7 +764,7 @@
   }
 
   @failingTest
-  void test_getter_and_setter_fromMixins_property_access() {
+  test_getter_and_setter_fromMixins_property_access() async {
     // TODO(paulberry): it appears that auxiliaryElements isn't properly set on
     // a SimpleIdentifier that's inside a property access.  This bug should be
     // fixed.
@@ -780,6 +784,7 @@
 }
 ''');
     LibraryElement library = resolve2(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
     // Verify that both the getter and setter for "x" in "new C().x" refer to
@@ -802,7 +807,7 @@
         'M2');
   }
 
-  void test_getter_fromMixins_bare_identifier() {
+  test_getter_fromMixins_bare_identifier() async {
     Source source = addSource('''
 class B {}
 class M1 {
@@ -818,6 +823,7 @@
 }
 ''');
     LibraryElement library = resolve2(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
     // Verify that the getter for "x" in C.f() refers to the getter defined in
@@ -831,7 +837,7 @@
         'M2');
   }
 
-  void test_getter_fromMixins_property_access() {
+  test_getter_fromMixins_property_access() async {
     Source source = addSource('''
 class B {}
 class M1 {
@@ -846,6 +852,7 @@
 }
 ''');
     LibraryElement library = resolve2(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
     // Verify that the getter for "x" in "new C().x" refers to the getter
@@ -863,7 +870,7 @@
         'M2');
   }
 
-  void test_getterAndSetterWithDifferentTypes() {
+  test_getterAndSetterWithDifferentTypes() async {
     Source source = addSource(r'''
 class A {
   int get f => 0;
@@ -872,13 +879,13 @@
 g (A a) {
   a.f = a.f.toString();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES]);
     verify([source]);
   }
 
-  void test_hasReferenceToSuper() {
+  test_hasReferenceToSuper() async {
     Source source = addSource(r'''
 class A {}
 class B {toString() => super.toString();}''');
@@ -890,11 +897,12 @@
     expect(classes, hasLength(2));
     expect(classes[0].hasReferenceToSuper, isFalse);
     expect(classes[1].hasReferenceToSuper, isTrue);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_import_hide() {
+  test_import_hide() async {
     addNamedSource(
         "/lib1.dart",
         r'''
@@ -916,12 +924,12 @@
   foo = 0;
 }
 A a;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_import_prefix() {
+  test_import_prefix() async {
     addNamedSource(
         "/two.dart",
         r'''
@@ -937,12 +945,12 @@
 main() {
   _two.f(0);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_import_prefix_doesNotExist() {
+  test_import_prefix_doesNotExist() async {
     //
     // The primary purpose of this test is to ensure that we are only getting a
     // single error generated when the only problem is that an imported file
@@ -967,12 +975,12 @@
   H(int i) : super(i);
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.URI_DOES_NOT_EXIST]);
     verify([source]);
   }
 
-  void test_import_show_doesNotExist() {
+  test_import_show_doesNotExist() async {
     //
     // The primary purpose of this test is to ensure that we are only getting a
     // single error generated when the only problem is that an imported file
@@ -997,12 +1005,12 @@
   H(int i) : super(i);
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.URI_DOES_NOT_EXIST]);
     verify([source]);
   }
 
-  void test_import_spaceInUri() {
+  test_import_spaceInUri() async {
     addNamedSource(
         "/sub folder/lib.dart",
         r'''
@@ -1016,12 +1024,12 @@
 main() {
   foo();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_indexExpression_typeParameters() {
+  test_indexExpression_typeParameters() async {
     Source source = addSource(r'''
 f() {
   List<int> a;
@@ -1031,23 +1039,23 @@
   List<List<List<int>>> c;
   c[0][0][0];
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_indexExpression_typeParameters_invalidAssignmentWarning() {
+  test_indexExpression_typeParameters_invalidAssignmentWarning() async {
     Source source = addSource(r'''
 f() {
   List<List<int>> b;
   b[0][0] = 'hi';
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
     verify([source]);
   }
 
-  void test_indirectOperatorThroughCall() {
+  test_indirectOperatorThroughCall() async {
     Source source = addSource(r'''
 class A {
   B call() { return new B(); }
@@ -1064,12 +1072,12 @@
 main() {
   g(f()[0]);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invoke_dynamicThroughGetter() {
+  test_invoke_dynamicThroughGetter() async {
     Source source = addSource(r'''
 class A {
   List get X => [() => 0];
@@ -1077,12 +1085,12 @@
     X.last;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_isValidMixin_badSuperclass() {
+  test_isValidMixin_badSuperclass() async {
     Source source = addSource(r'''
 class A extends B {}
 class B {}
@@ -1093,12 +1101,13 @@
     expect(unit, isNotNull);
     ClassElement a = unit.getType('A');
     expect(a.isValidMixin, isFalse);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT]);
     verify([source]);
   }
 
-  void test_isValidMixin_badSuperclass_withSuperMixins() {
-    resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
+  test_isValidMixin_badSuperclass_withSuperMixins() async {
+    resetWith(options: new AnalysisOptionsImpl()..enableSuperMixins = true);
     Source source = addSource(r'''
 class A extends B {}
 class B {}
@@ -1109,11 +1118,12 @@
     expect(unit, isNotNull);
     ClassElement a = unit.getType('A');
     expect(a.isValidMixin, isTrue);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_isValidMixin_constructor() {
+  test_isValidMixin_constructor() async {
     Source source = addSource(r'''
 class A {
   A() {}
@@ -1125,12 +1135,13 @@
     expect(unit, isNotNull);
     ClassElement a = unit.getType('A');
     expect(a.isValidMixin, isFalse);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_isValidMixin_constructor_withSuperMixins() {
-    resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
+  test_isValidMixin_constructor_withSuperMixins() async {
+    resetWith(options: new AnalysisOptionsImpl()..enableSuperMixins = true);
     Source source = addSource(r'''
 class A {
   A() {}
@@ -1142,11 +1153,12 @@
     expect(unit, isNotNull);
     ClassElement a = unit.getType('A');
     expect(a.isValidMixin, isFalse);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_isValidMixin_factoryConstructor() {
+  test_isValidMixin_factoryConstructor() async {
     Source source = addSource(r'''
 class A {
   factory A() => null;
@@ -1158,12 +1170,13 @@
     expect(unit, isNotNull);
     ClassElement a = unit.getType('A');
     expect(a.isValidMixin, isTrue);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_isValidMixin_factoryConstructor_withSuperMixins() {
-    resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
+  test_isValidMixin_factoryConstructor_withSuperMixins() async {
+    resetWith(options: new AnalysisOptionsImpl()..enableSuperMixins = true);
     Source source = addSource(r'''
 class A {
   factory A() => null;
@@ -1175,11 +1188,12 @@
     expect(unit, isNotNull);
     ClassElement a = unit.getType('A');
     expect(a.isValidMixin, isTrue);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_isValidMixin_super() {
+  test_isValidMixin_super() async {
     Source source = addSource(r'''
 class A {
   toString() {
@@ -1193,12 +1207,13 @@
     expect(unit, isNotNull);
     ClassElement a = unit.getType('A');
     expect(a.isValidMixin, isFalse);
+    await computeAnalysisResult(source);
     assertErrors(source, [CompileTimeErrorCode.MIXIN_REFERENCES_SUPER]);
     verify([source]);
   }
 
-  void test_isValidMixin_super_withSuperMixins() {
-    resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
+  test_isValidMixin_super_withSuperMixins() async {
+    resetWith(options: new AnalysisOptionsImpl()..enableSuperMixins = true);
     Source source = addSource(r'''
 class A {
   toString() {
@@ -1212,11 +1227,12 @@
     expect(unit, isNotNull);
     ClassElement a = unit.getType('A');
     expect(a.isValidMixin, isTrue);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_isValidMixin_valid() {
+  test_isValidMixin_valid() async {
     Source source = addSource('''
 class A {}
 class C = Object with A;''');
@@ -1226,12 +1242,13 @@
     expect(unit, isNotNull);
     ClassElement a = unit.getType('A');
     expect(a.isValidMixin, isTrue);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_isValidMixin_valid_withSuperMixins() {
-    resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
+  test_isValidMixin_valid_withSuperMixins() async {
+    resetWith(options: new AnalysisOptionsImpl()..enableSuperMixins = true);
     Source source = addSource('''
 class A {}
 class C = Object with A;''');
@@ -1241,11 +1258,12 @@
     expect(unit, isNotNull);
     ClassElement a = unit.getType('A');
     expect(a.isValidMixin, isTrue);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_labels_switch() {
+  test_labels_switch() async {
     Source source = addSource(r'''
 void doSwitch(int target) {
   switch (target) {
@@ -1259,11 +1277,12 @@
 }''');
     LibraryElement library = resolve2(source);
     expect(library, isNotNull);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_localVariable_types_invoked() {
+  test_localVariable_types_invoked() async {
     Source source = addSource(r'''
 const A = null;
 main() {
@@ -1286,7 +1305,7 @@
     expect(found[0], isTrue);
   }
 
-  void test_metadata_class() {
+  test_metadata_class() async {
     Source source = addSource(r'''
 const A = null;
 @A class C<A> {}''');
@@ -1298,6 +1317,7 @@
     expect(classes, hasLength(1));
     List<ElementAnnotation> annotations = classes[0].metadata;
     expect(annotations, hasLength(1));
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
@@ -1316,7 +1336,7 @@
     expect(actualElement, same(expectedElement));
   }
 
-  void test_metadata_field() {
+  test_metadata_field() async {
     Source source = addSource(r'''
 const A = null;
 class C {
@@ -1331,11 +1351,12 @@
     FieldElement field = classes[0].fields[0];
     List<ElementAnnotation> annotations = field.metadata;
     expect(annotations, hasLength(1));
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_metadata_fieldFormalParameter() {
+  test_metadata_fieldFormalParameter() async {
     Source source = addSource(r'''
 const A = null;
 class C {
@@ -1354,11 +1375,12 @@
     expect(parameters, hasLength(1));
     List<ElementAnnotation> annotations = parameters[0].metadata;
     expect(annotations, hasLength(1));
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_metadata_function() {
+  test_metadata_function() async {
     Source source = addSource(r'''
 const A = null;
 @A f() {}''');
@@ -1370,11 +1392,12 @@
     expect(functions, hasLength(1));
     List<ElementAnnotation> annotations = functions[0].metadata;
     expect(annotations, hasLength(1));
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_metadata_functionTypedParameter() {
+  test_metadata_functionTypedParameter() async {
     Source source = addSource(r'''
 const A = null;
 f(@A int p(int x)) {}''');
@@ -1388,11 +1411,12 @@
     expect(parameters, hasLength(1));
     List<ElementAnnotation> annotations1 = parameters[0].metadata;
     expect(annotations1, hasLength(1));
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_metadata_libraryDirective() {
+  test_metadata_libraryDirective() async {
     Source source = addSource(r'''
 @A library lib;
 const A = null;''');
@@ -1400,11 +1424,12 @@
     expect(library, isNotNull);
     List<ElementAnnotation> annotations = library.metadata;
     expect(annotations, hasLength(1));
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_metadata_method() {
+  test_metadata_method() async {
     Source source = addSource(r'''
 const A = null;
 class C {
@@ -1419,11 +1444,12 @@
     MethodElement method = classes[0].methods[0];
     List<ElementAnnotation> annotations = method.metadata;
     expect(annotations, hasLength(1));
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_metadata_namedParameter() {
+  test_metadata_namedParameter() async {
     Source source = addSource(r'''
 const A = null;
 f({@A int p : 0}) {}''');
@@ -1437,11 +1463,12 @@
     expect(parameters, hasLength(1));
     List<ElementAnnotation> annotations1 = parameters[0].metadata;
     expect(annotations1, hasLength(1));
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_metadata_positionalParameter() {
+  test_metadata_positionalParameter() async {
     Source source = addSource(r'''
 const A = null;
 f([@A int p = 0]) {}''');
@@ -1455,11 +1482,12 @@
     expect(parameters, hasLength(1));
     List<ElementAnnotation> annotations1 = parameters[0].metadata;
     expect(annotations1, hasLength(1));
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_metadata_simpleParameter() {
+  test_metadata_simpleParameter() async {
     Source source = addSource(r'''
 const A = null;
 f(@A p1, @A int p2) {}''');
@@ -1475,11 +1503,12 @@
     expect(annotations1, hasLength(1));
     List<ElementAnnotation> annotations2 = parameters[1].metadata;
     expect(annotations2, hasLength(1));
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_metadata_typedef() {
+  test_metadata_typedef() async {
     Source source = addSource(r'''
 const A = null;
 @A typedef F<A>();''');
@@ -1491,6 +1520,7 @@
     expect(aliases, hasLength(1));
     List<ElementAnnotation> annotations = aliases[0].metadata;
     expect(annotations, hasLength(1));
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
@@ -1509,7 +1539,7 @@
     expect(actualElement, same(expectedElement));
   }
 
-  void test_method_fromMixin() {
+  test_method_fromMixin() async {
     Source source = addSource(r'''
 class B {
   bar() => 1;
@@ -1522,12 +1552,12 @@
   bar() => super.bar();
   foo() => super.foo();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_method_fromMixins() {
+  test_method_fromMixins() async {
     Source source = addSource('''
 class B {}
 class M1 {
@@ -1542,6 +1572,7 @@
 }
 ''');
     LibraryElement library = resolve2(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
     // Verify that the "f" in "new C().f()" refers to the "f" defined in M2.
@@ -1558,7 +1589,7 @@
         'M2');
   }
 
-  void test_method_fromMixins_bare_identifier() {
+  test_method_fromMixins_bare_identifier() async {
     Source source = addSource('''
 class B {}
 class M1 {
@@ -1574,6 +1605,7 @@
 }
 ''');
     LibraryElement library = resolve2(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
     // Verify that the call to f() in C.g() refers to the method defined in M2.
@@ -1591,7 +1623,7 @@
         'M2');
   }
 
-  void test_method_fromMixins_invked_from_outside_class() {
+  test_method_fromMixins_invked_from_outside_class() async {
     Source source = addSource('''
 class B {}
 class M1 {
@@ -1606,6 +1638,7 @@
 }
 ''');
     LibraryElement library = resolve2(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
     // Verify that the call to f() in "new C().f()" refers to the method
@@ -1623,7 +1656,7 @@
         'M2');
   }
 
-  void test_method_fromSuperclassMixin() {
+  test_method_fromSuperclassMixin() async {
     Source source = addSource(r'''
 class A {
   void m1() {}
@@ -1635,12 +1668,12 @@
 f(C c) {
   c.m1();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_methodCascades() {
+  test_methodCascades() async {
     Source source = addSource(r'''
 class A {
   void m1() {}
@@ -1651,12 +1684,12 @@
      ..m2();
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_methodCascades_withSetter() {
+  test_methodCascades_withSetter() async {
     Source source = addSource(r'''
 class A {
   String name;
@@ -1669,22 +1702,22 @@
      ..m2();
   }
 }''');
-    computeLibrarySourceErrors(source);
     // failing with error code: INVOCATION_OF_NON_FUNCTION
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_resolveAgainstNull() {
+  test_resolveAgainstNull() async {
     Source source = addSource(r'''
 f(var p) {
   return null == p;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
   }
 
-  void test_setter_fromMixins_bare_identifier() {
+  test_setter_fromMixins_bare_identifier() async {
     Source source = addSource('''
 class B {}
 class M1 {
@@ -1700,6 +1733,7 @@
 }
 ''');
     LibraryElement library = resolve2(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
     // Verify that the setter for "x" in C.f() refers to the setter defined in
@@ -1718,7 +1752,7 @@
         'M2');
   }
 
-  void test_setter_fromMixins_property_access() {
+  test_setter_fromMixins_property_access() async {
     Source source = addSource('''
 class B {}
 class M1 {
@@ -1733,6 +1767,7 @@
 }
 ''');
     LibraryElement library = resolve2(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
     // Verify that the setter for "x" in "new C().x" refers to the setter
@@ -1751,7 +1786,7 @@
         'M2');
   }
 
-  void test_setter_inherited() {
+  test_setter_inherited() async {
     Source source = addSource(r'''
 class A {
   int get x => 0;
@@ -1761,12 +1796,12 @@
   int get x => super.x == null ? 0 : super.x;
   int f() => x = 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_setter_static() {
+  test_setter_static() async {
     Source source = addSource(r'''
 set s(x) {
 }
@@ -1774,13 +1809,13 @@
 main() {
   s = 123;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
   @failingTest
-  void test_staticInvocation() {
+  test_staticInvocation() async {
     Source source = addSource(r'''
 class A {
   static int get g => (a,b) => 0;
@@ -1790,7 +1825,7 @@
     A.g(1,0);
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
diff --git a/pkg/analyzer/test/generated/static_type_analyzer_test.dart b/pkg/analyzer/test/generated/static_type_analyzer_test.dart
index 3a510f9a..14c408f 100644
--- a/pkg/analyzer/test/generated/static_type_analyzer_test.dart
+++ b/pkg/analyzer/test/generated/static_type_analyzer_test.dart
@@ -33,6 +33,7 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(StaticTypeAnalyzerTest);
     defineReflectiveTests(StaticTypeAnalyzer2Test);
+    defineReflectiveTests(StaticTypeAnalyzer2Test_Driver);
   });
 }
 
@@ -41,17 +42,17 @@
  */
 @reflectiveTest
 class StaticTypeAnalyzer2Test extends StaticTypeAnalyzer2TestShared {
-  void test_FunctionExpressionInvocation_block() {
+  test_FunctionExpressionInvocation_block() async {
     String code = r'''
 main() {
   var foo = (() { return 1; })();
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectInitializerType('foo', 'dynamic', isNull);
   }
 
-  void test_FunctionExpressionInvocation_curried() {
+  test_FunctionExpressionInvocation_curried() async {
     String code = r'''
 typedef int F();
 F f() => null;
@@ -59,21 +60,21 @@
   var foo = f()();
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectInitializerType('foo', 'int', isNull);
   }
 
-  void test_FunctionExpressionInvocation_expression() {
+  test_FunctionExpressionInvocation_expression() async {
     String code = r'''
 main() {
   var foo = (() => 1)();
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectInitializerType('foo', 'int', isNull);
   }
 
-  void test_MethodInvocation_nameType_localVariable() {
+  test_MethodInvocation_nameType_localVariable() async {
     String code = r"""
 typedef Foo();
 main() {
@@ -81,24 +82,24 @@
   foo();
 }
 """;
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     // "foo" should be resolved to the "Foo" type
     expectIdentifierType("foo();", new isInstanceOf<FunctionType>());
   }
 
-  void test_MethodInvocation_nameType_parameter_FunctionTypeAlias() {
+  test_MethodInvocation_nameType_parameter_FunctionTypeAlias() async {
     String code = r"""
 typedef Foo();
 main(Foo foo) {
   foo();
 }
 """;
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     // "foo" should be resolved to the "Foo" type
     expectIdentifierType("foo();", new isInstanceOf<FunctionType>());
   }
 
-  void test_MethodInvocation_nameType_parameter_propagatedType() {
+  test_MethodInvocation_nameType_parameter_propagatedType() async {
     String code = r"""
 typedef Foo();
 main(p) {
@@ -107,12 +108,12 @@
   }
 }
 """;
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectIdentifierType("p()", DynamicTypeImpl.instance,
         predicate((type) => type.name == 'Foo'));
   }
 
-  void test_staticMethods_classTypeParameters() {
+  test_staticMethods_classTypeParameters() async {
     String code = r'''
 class C<T> {
   static void m() => null;
@@ -121,11 +122,11 @@
   print(C.m);
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectFunctionType('m);', '() → void');
   }
 
-  void test_staticMethods_classTypeParameters_genericMethod() {
+  test_staticMethods_classTypeParameters_genericMethod() async {
     String code = r'''
 class C<T> {
   static void m<S>(S s) {
@@ -137,14 +138,15 @@
   print(C.m);
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     // C - m
     TypeParameterType typeS;
     {
-      expectFunctionType('m);', '<S>(S) → void',
-          elementTypeParams: '[S]', typeFormals: '[S]');
+      FunctionTypeImpl type = expectFunctionType('m);', '<S>(S) → void',
+          elementTypeParams: '[S]',
+          typeFormals: '[S]',
+          identifierType: '(dynamic) → void');
 
-      FunctionTypeImpl type = findIdentifier('m);').staticType;
       typeS = type.typeFormals[0].type;
       type = type.instantiate([DynamicTypeImpl.instance]);
       expect(type.toString(), '(dynamic) → void');
@@ -154,13 +156,13 @@
     }
     // C - m - f
     {
-      expectFunctionType('f);', '<U>(S, U) → void',
+      FunctionTypeImpl type = expectFunctionType('f);', '<U>(S, U) → void',
           elementTypeParams: '[U]',
           typeParams: '[S]',
           typeArgs: '[S]',
-          typeFormals: '[U]');
+          typeFormals: '[U]',
+          identifierType: '(S, dynamic) → void');
 
-      FunctionTypeImpl type = findIdentifier('f);').staticType;
       type = type.instantiate([DynamicTypeImpl.instance]);
       expect(type.toString(), '(S, dynamic) → void');
       expect(type.typeParameters.toString(), '[S, U]');
@@ -171,6 +173,12 @@
 }
 
 @reflectiveTest
+class StaticTypeAnalyzer2Test_Driver extends StaticTypeAnalyzer2Test {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
+
+@reflectiveTest
 class StaticTypeAnalyzerTest extends EngineTestCase {
   /**
    * The error listener to which errors will be reported.
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
index e4496f0..4bd6b61 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
@@ -18,15 +18,17 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(StaticTypeWarningCodeTest);
     defineReflectiveTests(StrongModeStaticTypeWarningCodeTest);
+    defineReflectiveTests(StaticTypeWarningCodeTest_Driver);
+    defineReflectiveTests(StrongModeStaticTypeWarningCodeTest_Driver);
   });
 }
 
 @reflectiveTest
 class StaticTypeWarningCodeTest extends ResolverTestCase {
-  void fail_method_lookup_mixin_of_extends() {
+  fail_method_lookup_mixin_of_extends() async {
     // See dartbug.com/25605
-    resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
-    assertErrorsInUnverifiedCode(
+    resetWith(options: new AnalysisOptionsImpl()..enableSuperMixins = true);
+    await assertErrorsInUnverifiedCode(
         '''
 class A { a() => null; }
 class B {}
@@ -43,10 +45,10 @@
         ]);
   }
 
-  void fail_method_lookup_mixin_of_implements() {
+  fail_method_lookup_mixin_of_implements() async {
     // See dartbug.com/25605
-    resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
-    assertErrorsInUnverifiedCode(
+    resetWith(options: new AnalysisOptionsImpl()..enableSuperMixins = true);
+    await assertErrorsInUnverifiedCode(
         '''
 class A { a() => null; }
 class B {}
@@ -62,10 +64,10 @@
         ]);
   }
 
-  void fail_method_lookup_mixin_of_mixin() {
+  fail_method_lookup_mixin_of_mixin() async {
     // See dartbug.com/25605
-    resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
-    assertErrorsInUnverifiedCode(
+    resetWith(options: new AnalysisOptionsImpl()..enableSuperMixins = true);
+    await assertErrorsInUnverifiedCode(
         '''
 class A {}
 class B { b() => null; }
@@ -79,10 +81,10 @@
         [StaticTypeWarningCode.UNDEFINED_METHOD]);
   }
 
-  void fail_method_lookup_mixin_of_mixin_application() {
+  fail_method_lookup_mixin_of_mixin_application() async {
     // See dartbug.com/25605
-    resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
-    assertErrorsInUnverifiedCode(
+    resetWith(options: new AnalysisOptionsImpl()..enableSuperMixins = true);
+    await assertErrorsInUnverifiedCode(
         '''
 class A { a() => null; }
 class B {}
@@ -96,8 +98,8 @@
         [StaticTypeWarningCode.UNDEFINED_METHOD]);
   }
 
-  void fail_typeArgumentNotMatchingBounds_ofFunctionTypeAlias() {
-    assertErrorsInCode(
+  fail_typeArgumentNotMatchingBounds_ofFunctionTypeAlias() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {}
@@ -107,9 +109,9 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void fail_undefinedEnumConstant() {
+  fail_undefinedEnumConstant() async {
     // We need a way to set the parseEnum flag in the parser to true.
-    assertErrorsInCode(
+    await assertErrorsInCode(
         r'''
 enum E { ONE }
 E e() {
@@ -118,7 +120,7 @@
         [StaticTypeWarningCode.UNDEFINED_ENUM_CONSTANT]);
   }
 
-  void test_ambiguousImport_function() {
+  test_ambiguousImport_function() async {
     Source source = addSource(r'''
 import 'lib1.dart';
 import 'lib2.dart';
@@ -133,17 +135,17 @@
         r'''
 library lib2;
 f() {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]);
   }
 
-  void test_assert_message_suppresses_type_promotion() {
+  test_assert_message_suppresses_type_promotion() async {
     // If a variable is assigned to inside the expression for an assert
     // message, type promotion should be suppressed, just as it would be if the
     // assignment occurred outside an assert statement.  (Note that it is a
     // dubious practice for the computation of an assert message to have side
     // effects, since it is only evaluated if the assert fails).
-    assertErrorsInCode(
+    await assertErrorsInCode(
         '''
 class C {
   void foo() {}
@@ -160,8 +162,8 @@
     // Do not verify since `x.foo()` fails to resolve.
   }
 
-  void test_await_flattened() {
-    assertErrorsInCode(
+  test_await_flattened() async {
+    await assertErrorsInCode(
         '''
 import 'dart:async';
 Future<Future<int>> ffi() => null;
@@ -172,8 +174,8 @@
         [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_await_simple() {
-    assertErrorsInCode(
+  test_await_simple() async {
+    await assertErrorsInCode(
         '''
 import 'dart:async';
 Future<int> fi() => null;
@@ -184,8 +186,8 @@
         [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_awaitForIn_declaredVariableRightType() {
-    assertNoErrorsInCode('''
+  test_awaitForIn_declaredVariableRightType() async {
+    await assertNoErrorsInCode('''
 import 'dart:async';
 f() async {
   Stream<int> stream;
@@ -194,8 +196,8 @@
 ''');
   }
 
-  void test_awaitForIn_declaredVariableWrongType() {
-    assertErrorsInCode(
+  test_awaitForIn_declaredVariableWrongType() async {
+    await assertErrorsInCode(
         '''
 import 'dart:async';
 f() async {
@@ -206,8 +208,8 @@
         [StaticTypeWarningCode.FOR_IN_OF_INVALID_ELEMENT_TYPE]);
   }
 
-  void test_awaitForIn_downcast() {
-    assertNoErrorsInCode('''
+  test_awaitForIn_downcast() async {
+    await assertNoErrorsInCode('''
 import 'dart:async';
 f() async {
   Stream<num> stream;
@@ -216,8 +218,8 @@
 ''');
   }
 
-  void test_awaitForIn_dynamicStream() {
-    assertNoErrorsInCode('''
+  test_awaitForIn_dynamicStream() async {
+    await assertNoErrorsInCode('''
 f() async {
   dynamic stream;
   await for (int i in stream) {}
@@ -225,8 +227,8 @@
 ''');
   }
 
-  void test_awaitForIn_dynamicVariable() {
-    assertNoErrorsInCode('''
+  test_awaitForIn_dynamicVariable() async {
+    await assertNoErrorsInCode('''
 import 'dart:async';
 f() async {
   Stream<int> stream;
@@ -235,8 +237,8 @@
 ''');
   }
 
-  void test_awaitForIn_existingVariableRightType() {
-    assertNoErrorsInCode('''
+  test_awaitForIn_existingVariableRightType() async {
+    await assertNoErrorsInCode('''
 import 'dart:async';
 f() async {
   Stream<int> stream;
@@ -246,8 +248,8 @@
 ''');
   }
 
-  void test_awaitForIn_existingVariableWrongType() {
-    assertErrorsInCode(
+  test_awaitForIn_existingVariableWrongType() async {
+    await assertErrorsInCode(
         '''
 import 'dart:async';
 f() async {
@@ -259,8 +261,8 @@
         [StaticTypeWarningCode.FOR_IN_OF_INVALID_ELEMENT_TYPE]);
   }
 
-  void test_awaitForIn_notStream() {
-    assertErrorsInCode(
+  test_awaitForIn_notStream() async {
+    await assertErrorsInCode(
         '''
 f() async {
   await for (var i in true) {}
@@ -269,8 +271,8 @@
         [StaticTypeWarningCode.FOR_IN_OF_INVALID_TYPE]);
   }
 
-  void test_awaitForIn_streamOfDynamic() {
-    assertNoErrorsInCode('''
+  test_awaitForIn_streamOfDynamic() async {
+    await assertNoErrorsInCode('''
 import 'dart:async';
 f() async {
   Stream stream;
@@ -279,8 +281,8 @@
 ''');
   }
 
-  void test_awaitForIn_upcast() {
-    assertNoErrorsInCode('''
+  test_awaitForIn_upcast() async {
+    await assertNoErrorsInCode('''
 import 'dart:async';
 f() async {
   Stream<int> stream;
@@ -289,8 +291,8 @@
 ''');
   }
 
-  void test_bug21912() {
-    assertErrorsInCode(
+  test_bug21912() async {
+    await assertErrorsInCode(
         '''
 class A {}
 class B extends A {}
@@ -317,8 +319,8 @@
         ]);
   }
 
-  void test_expectedOneListTypeArgument() {
-    assertErrorsInCode(
+  test_expectedOneListTypeArgument() async {
+    await assertErrorsInCode(
         r'''
 main() {
   <int, int> [];
@@ -326,8 +328,8 @@
         [StaticTypeWarningCode.EXPECTED_ONE_LIST_TYPE_ARGUMENTS]);
   }
 
-  void test_expectedTwoMapTypeArguments_one() {
-    assertErrorsInCode(
+  test_expectedTwoMapTypeArguments_one() async {
+    await assertErrorsInCode(
         r'''
 main() {
   <int> {};
@@ -335,8 +337,8 @@
         [StaticTypeWarningCode.EXPECTED_TWO_MAP_TYPE_ARGUMENTS]);
   }
 
-  void test_expectedTwoMapTypeArguments_three() {
-    assertErrorsInCode(
+  test_expectedTwoMapTypeArguments_three() async {
+    await assertErrorsInCode(
         r'''
 main() {
   <int, int, int> {};
@@ -344,16 +346,16 @@
         [StaticTypeWarningCode.EXPECTED_TWO_MAP_TYPE_ARGUMENTS]);
   }
 
-  void test_forIn_declaredVariableRightType() {
-    assertNoErrorsInCode('''
+  test_forIn_declaredVariableRightType() async {
+    await assertNoErrorsInCode('''
 f() {
   for (int i in <int>[]) {}
 }
 ''');
   }
 
-  void test_forIn_declaredVariableWrongType() {
-    assertErrorsInCode(
+  test_forIn_declaredVariableWrongType() async {
+    await assertErrorsInCode(
         '''
 f() {
   for (int i in <String>[]) {}
@@ -362,16 +364,16 @@
         [StaticTypeWarningCode.FOR_IN_OF_INVALID_ELEMENT_TYPE]);
   }
 
-  void test_forIn_downcast() {
-    assertNoErrorsInCode('''
+  test_forIn_downcast() async {
+    await assertNoErrorsInCode('''
 f() {
   for (int i in <num>[]) {}
 }
 ''');
   }
 
-  void test_forIn_dynamic() {
-    assertNoErrorsInCode('''
+  test_forIn_dynamic() async {
+    await assertNoErrorsInCode('''
 f() {
   dynamic d; // Could be [].
   for (var i in d) {}
@@ -379,8 +381,8 @@
 ''');
   }
 
-  void test_forIn_dynamicIterable() {
-    assertNoErrorsInCode('''
+  test_forIn_dynamicIterable() async {
+    await assertNoErrorsInCode('''
 f() {
   dynamic iterable;
   for (int i in iterable) {}
@@ -388,16 +390,16 @@
 ''');
   }
 
-  void test_forIn_dynamicVariable() {
-    assertNoErrorsInCode('''
+  test_forIn_dynamicVariable() async {
+    await assertNoErrorsInCode('''
 f() {
   for (var i in <int>[]) {}
 }
 ''');
   }
 
-  void test_forIn_existingVariableRightType() {
-    assertNoErrorsInCode('''
+  test_forIn_existingVariableRightType() async {
+    await assertNoErrorsInCode('''
 f() {
   int i;
   for (i in <int>[]) {}
@@ -405,8 +407,8 @@
 ''');
   }
 
-  void test_forIn_existingVariableWrongType() {
-    assertErrorsInCode(
+  test_forIn_existingVariableWrongType() async {
+    await assertErrorsInCode(
         '''
 f() {
   int i;
@@ -416,16 +418,16 @@
         [StaticTypeWarningCode.FOR_IN_OF_INVALID_ELEMENT_TYPE]);
   }
 
-  void test_forIn_iterableOfDynamic() {
-    assertNoErrorsInCode('''
+  test_forIn_iterableOfDynamic() async {
+    await assertNoErrorsInCode('''
 f() {
   for (int i in []) {}
 }
 ''');
   }
 
-  void test_forIn_notIterable() {
-    assertErrorsInCode(
+  test_forIn_notIterable() async {
+    await assertErrorsInCode(
         '''
 f() {
   for (var i in true) {}
@@ -434,8 +436,8 @@
         [StaticTypeWarningCode.FOR_IN_OF_INVALID_TYPE]);
   }
 
-  void test_forIn_object() {
-    assertNoErrorsInCode('''
+  test_forIn_object() async {
+    await assertNoErrorsInCode('''
 f() {
   Object o; // Could be [].
   for (var i in o) {}
@@ -443,8 +445,8 @@
 ''');
   }
 
-  void test_forIn_typeBoundBad() {
-    assertErrorsInCode(
+  test_forIn_typeBoundBad() async {
+    await assertErrorsInCode(
         '''
 class Foo<T extends Iterable<int>> {
   void method(T iterable) {
@@ -455,8 +457,8 @@
         [StaticTypeWarningCode.FOR_IN_OF_INVALID_ELEMENT_TYPE]);
   }
 
-  void test_forIn_typeBoundGood() {
-    assertNoErrorsInCode('''
+  test_forIn_typeBoundGood() async {
+    await assertNoErrorsInCode('''
 class Foo<T extends Iterable<int>> {
   void method(T iterable) {
     for (var i in iterable) {}
@@ -465,25 +467,25 @@
 ''');
   }
 
-  void test_forIn_upcast() {
-    assertNoErrorsInCode('''
+  test_forIn_upcast() async {
+    await assertNoErrorsInCode('''
 f() {
   for (num i in <int>[]) {}
 }
 ''');
   }
 
-  void test_illegalAsyncGeneratorReturnType_function_nonStream() {
-    assertErrorsInCode(
+  test_illegalAsyncGeneratorReturnType_function_nonStream() async {
+    await assertErrorsInCode(
         '''
 int f() async* {}
 ''',
         [StaticTypeWarningCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE]);
   }
 
-  void test_illegalAsyncGeneratorReturnType_function_subtypeOfStream() {
-    resetWithOptions(new AnalysisOptionsImpl()..strongMode = true);
-    assertErrorsInCode(
+  test_illegalAsyncGeneratorReturnType_function_subtypeOfStream() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    await assertErrorsInCode(
         '''
 import 'dart:async';
 abstract class SubStream<T> implements Stream<T> {}
@@ -492,8 +494,8 @@
         [StaticTypeWarningCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE]);
   }
 
-  void test_illegalAsyncGeneratorReturnType_method_nonStream() {
-    assertErrorsInCode(
+  test_illegalAsyncGeneratorReturnType_method_nonStream() async {
+    await assertErrorsInCode(
         '''
 class C {
   int f() async* {}
@@ -502,9 +504,9 @@
         [StaticTypeWarningCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE]);
   }
 
-  void test_illegalAsyncGeneratorReturnType_method_subtypeOfStream() {
-    resetWithOptions(new AnalysisOptionsImpl()..strongMode = true);
-    assertErrorsInCode(
+  test_illegalAsyncGeneratorReturnType_method_subtypeOfStream() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    await assertErrorsInCode(
         '''
 import 'dart:async';
 abstract class SubStream<T> implements Stream<T> {}
@@ -515,8 +517,8 @@
         [StaticTypeWarningCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE]);
   }
 
-  void test_illegalAsyncReturnType_function_nonFuture() {
-    assertErrorsInCode(
+  test_illegalAsyncReturnType_function_nonFuture() async {
+    await assertErrorsInCode(
         '''
 int f() async {}
 ''',
@@ -526,9 +528,9 @@
         ]);
   }
 
-  void test_illegalAsyncReturnType_function_subtypeOfFuture() {
-    resetWithOptions(new AnalysisOptionsImpl()..strongMode = true);
-    assertErrorsInCode(
+  test_illegalAsyncReturnType_function_subtypeOfFuture() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    await assertErrorsInCode(
         '''
 import 'dart:async';
 abstract class SubFuture<T> implements Future<T> {}
@@ -539,8 +541,8 @@
         [StaticTypeWarningCode.ILLEGAL_ASYNC_RETURN_TYPE]);
   }
 
-  void test_illegalAsyncReturnType_method_nonFuture() {
-    assertErrorsInCode(
+  test_illegalAsyncReturnType_method_nonFuture() async {
+    await assertErrorsInCode(
         '''
 class C {
   int m() async {}
@@ -552,9 +554,9 @@
         ]);
   }
 
-  void test_illegalAsyncReturnType_method_subtypeOfFuture() {
-    resetWithOptions(new AnalysisOptionsImpl()..strongMode = true);
-    assertErrorsInCode(
+  test_illegalAsyncReturnType_method_subtypeOfFuture() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    await assertErrorsInCode(
         '''
 import 'dart:async';
 abstract class SubFuture<T> implements Future<T> {}
@@ -567,17 +569,17 @@
         [StaticTypeWarningCode.ILLEGAL_ASYNC_RETURN_TYPE]);
   }
 
-  void test_illegalSyncGeneratorReturnType_function_nonIterator() {
-    assertErrorsInCode(
+  test_illegalSyncGeneratorReturnType_function_nonIterator() async {
+    await assertErrorsInCode(
         '''
 int f() sync* {}
 ''',
         [StaticTypeWarningCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE]);
   }
 
-  void test_illegalSyncGeneratorReturnType_function_subclassOfIterator() {
-    resetWithOptions(new AnalysisOptionsImpl()..strongMode = true);
-    assertErrorsInCode(
+  test_illegalSyncGeneratorReturnType_function_subclassOfIterator() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    await assertErrorsInCode(
         '''
 abstract class SubIterator<T> implements Iterator<T> {}
 SubIterator<int> f() sync* {}
@@ -585,8 +587,8 @@
         [StaticTypeWarningCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE]);
   }
 
-  void test_illegalSyncGeneratorReturnType_method_nonIterator() {
-    assertErrorsInCode(
+  test_illegalSyncGeneratorReturnType_method_nonIterator() async {
+    await assertErrorsInCode(
         '''
 class C {
   int f() sync* {}
@@ -595,9 +597,9 @@
         [StaticTypeWarningCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE]);
   }
 
-  void test_illegalSyncGeneratorReturnType_method_subclassOfIterator() {
-    resetWithOptions(new AnalysisOptionsImpl()..strongMode = true);
-    assertErrorsInCode(
+  test_illegalSyncGeneratorReturnType_method_subclassOfIterator() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    await assertErrorsInCode(
         '''
 abstract class SubIterator<T> implements Iterator<T> {}
 class C {
@@ -607,8 +609,8 @@
         [StaticTypeWarningCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE]);
   }
 
-  void test_inconsistentMethodInheritance_paramCount() {
-    assertErrorsInCode(
+  test_inconsistentMethodInheritance_paramCount() async {
+    await assertErrorsInCode(
         r'''
 abstract class A {
   int x();
@@ -621,8 +623,8 @@
         [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
   }
 
-  void test_inconsistentMethodInheritance_paramType() {
-    assertErrorsInCode(
+  test_inconsistentMethodInheritance_paramType() async {
+    await assertErrorsInCode(
         r'''
 abstract class A {
   x(int i);
@@ -635,8 +637,8 @@
         [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
   }
 
-  void test_inconsistentMethodInheritance_returnType() {
-    assertErrorsInCode(
+  test_inconsistentMethodInheritance_returnType() async {
+    await assertErrorsInCode(
         r'''
 abstract class A {
   int x();
@@ -649,8 +651,8 @@
         [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
   }
 
-  void test_instanceAccessToStaticMember_method_invocation() {
-    assertErrorsInCode(
+  test_instanceAccessToStaticMember_method_invocation() async {
+    await assertErrorsInCode(
         r'''
 class A {
   static m() {}
@@ -661,8 +663,8 @@
         [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
   }
 
-  void test_instanceAccessToStaticMember_method_reference() {
-    assertErrorsInCode(
+  test_instanceAccessToStaticMember_method_reference() async {
+    await assertErrorsInCode(
         r'''
 class A {
   static m() {}
@@ -673,8 +675,8 @@
         [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
   }
 
-  void test_instanceAccessToStaticMember_propertyAccess_field() {
-    assertErrorsInCode(
+  test_instanceAccessToStaticMember_propertyAccess_field() async {
+    await assertErrorsInCode(
         r'''
 class A {
   static var f;
@@ -685,8 +687,8 @@
         [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
   }
 
-  void test_instanceAccessToStaticMember_propertyAccess_getter() {
-    assertErrorsInCode(
+  test_instanceAccessToStaticMember_propertyAccess_getter() async {
+    await assertErrorsInCode(
         r'''
 class A {
   static get f => 42;
@@ -697,8 +699,8 @@
         [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
   }
 
-  void test_instanceAccessToStaticMember_propertyAccess_setter() {
-    assertErrorsInCode(
+  test_instanceAccessToStaticMember_propertyAccess_setter() async {
+    await assertErrorsInCode(
         r'''
 class A {
   static set f(x) {}
@@ -709,8 +711,8 @@
         [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
   }
 
-  void test_invalidAssignment_compoundAssignment() {
-    assertErrorsInCode(
+  test_invalidAssignment_compoundAssignment() async {
+    await assertErrorsInCode(
         r'''
 class byte {
   int _value;
@@ -725,24 +727,24 @@
         [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_invalidAssignment_defaultValue_named() {
-    assertErrorsInCode(
+  test_invalidAssignment_defaultValue_named() async {
+    await assertErrorsInCode(
         r'''
 f({String x: 0}) {
 }''',
         [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_invalidAssignment_defaultValue_optional() {
-    assertErrorsInCode(
+  test_invalidAssignment_defaultValue_optional() async {
+    await assertErrorsInCode(
         r'''
 f([String x = 0]) {
 }''',
         [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_invalidAssignment_dynamic() {
-    assertErrorsInCode(
+  test_invalidAssignment_dynamic() async {
+    await assertErrorsInCode(
         r'''
 main() {
   dynamic = 1;
@@ -751,8 +753,8 @@
         [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_invalidAssignment_functionExpressionInvocation() {
-    assertErrorsInCode(
+  test_invalidAssignment_functionExpressionInvocation() async {
+    await assertErrorsInCode(
         '''
 main() {
   String x = (() => 5)();
@@ -760,8 +762,8 @@
         [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_invalidAssignment_ifNullAssignment() {
-    assertErrorsInCode(
+  test_invalidAssignment_ifNullAssignment() async {
+    await assertErrorsInCode(
         '''
 void f(int i) {
   double d;
@@ -771,8 +773,8 @@
         [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_invalidAssignment_instanceVariable() {
-    assertErrorsInCode(
+  test_invalidAssignment_instanceVariable() async {
+    await assertErrorsInCode(
         r'''
 class A {
   int x;
@@ -784,8 +786,8 @@
         [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_invalidAssignment_localVariable() {
-    assertErrorsInCode(
+  test_invalidAssignment_localVariable() async {
+    await assertErrorsInCode(
         r'''
 f() {
   int x;
@@ -794,9 +796,9 @@
         [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_invalidAssignment_regressionInIssue18468Fix() {
+  test_invalidAssignment_regressionInIssue18468Fix() async {
     // https://code.google.com/p/dart/issues/detail?id=18628
-    assertErrorsInCode(
+    await assertErrorsInCode(
         r'''
 class C<T> {
   T t = int;
@@ -804,8 +806,8 @@
         [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_invalidAssignment_staticVariable() {
-    assertErrorsInCode(
+  test_invalidAssignment_staticVariable() async {
+    await assertErrorsInCode(
         r'''
 class A {
   static int x;
@@ -816,14 +818,14 @@
         [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_invalidAssignment_topLevelVariableDeclaration() {
-    assertErrorsInCode(
+  test_invalidAssignment_topLevelVariableDeclaration() async {
+    await assertErrorsInCode(
         "int x = 'string';", [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_invalidAssignment_typeParameter() {
+  test_invalidAssignment_typeParameter() async {
     // 14221
-    assertErrorsInCode(
+    await assertErrorsInCode(
         r'''
 class B<T> {
   T value;
@@ -834,8 +836,8 @@
         [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_invalidAssignment_variableDeclaration() {
-    assertErrorsInCode(
+  test_invalidAssignment_variableDeclaration() async {
+    await assertErrorsInCode(
         r'''
 class A {
   int x = 'string';
@@ -843,8 +845,8 @@
         [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
-  void test_invocationOfNonFunction_class() {
-    assertErrorsInCode(
+  test_invocationOfNonFunction_class() async {
+    await assertErrorsInCode(
         r'''
 class A {
   void m() {
@@ -854,15 +856,15 @@
         [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION]);
   }
 
-  void test_invocationOfNonFunction_localGenericFunction() {
+  test_invocationOfNonFunction_localGenericFunction() async {
     // Objects having a specific function type may be invoked, but objects
     // having type Function may not, because type Function lacks a call method
     // (this is because it is impossible to know what signature the call should
     // have).
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableStrictCallChecks = true;
-    resetWithOptions(options);
-    assertErrorsInCode(
+    resetWith(options: options);
+    await assertErrorsInCode(
         '''
 f(Function f) {
   return f();
@@ -870,11 +872,11 @@
         [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION]);
   }
 
-  void test_invocationOfNonFunction_localObject() {
+  test_invocationOfNonFunction_localObject() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableStrictCallChecks = true;
-    resetWithOptions(options);
-    assertErrorsInCode(
+    resetWith(options: options);
+    await assertErrorsInCode(
         '''
 f(Object o) {
   return o();
@@ -882,8 +884,8 @@
         [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION]);
   }
 
-  void test_invocationOfNonFunction_localVariable() {
-    assertErrorsInCode(
+  test_invocationOfNonFunction_localVariable() async {
+    await assertErrorsInCode(
         r'''
 f() {
   int x;
@@ -892,8 +894,8 @@
         [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION]);
   }
 
-  void test_invocationOfNonFunction_ordinaryInvocation() {
-    assertErrorsInCode(
+  test_invocationOfNonFunction_ordinaryInvocation() async {
+    await assertErrorsInCode(
         r'''
 class A {
   static int x;
@@ -907,8 +909,8 @@
     // A call to verify(source) fails as A.x() cannot be resolved.
   }
 
-  void test_invocationOfNonFunction_staticInvocation() {
-    assertErrorsInCode(
+  test_invocationOfNonFunction_staticInvocation() async {
+    await assertErrorsInCode(
         r'''
 class A {
   static int get g => 0;
@@ -920,8 +922,8 @@
     // A call to verify(source) fails as g() cannot be resolved.
   }
 
-  void test_invocationOfNonFunction_superExpression() {
-    assertErrorsInCode(
+  test_invocationOfNonFunction_superExpression() async {
+    await assertErrorsInCode(
         r'''
 class A {
   int get g => 0;
@@ -934,8 +936,8 @@
         [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION]);
   }
 
-  void test_invocationOfNonFunctionExpression_literal() {
-    assertErrorsInCode(
+  test_invocationOfNonFunctionExpression_literal() async {
+    await assertErrorsInCode(
         r'''
 f() {
   3(5);
@@ -943,13 +945,13 @@
         [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION]);
   }
 
-  void test_nonBoolCondition_conditional() {
-    assertErrorsInCode("f() { return 3 ? 2 : 1; }",
+  test_nonBoolCondition_conditional() async {
+    await assertErrorsInCode("f() { return 3 ? 2 : 1; }",
         [StaticTypeWarningCode.NON_BOOL_CONDITION]);
   }
 
-  void test_nonBoolCondition_do() {
-    assertErrorsInCode(
+  test_nonBoolCondition_do() async {
+    await assertErrorsInCode(
         r'''
 f() {
   do {} while (3);
@@ -957,9 +959,9 @@
         [StaticTypeWarningCode.NON_BOOL_CONDITION]);
   }
 
-  void test_nonBoolCondition_for() {
+  test_nonBoolCondition_for() async {
     // https://github.com/dart-lang/sdk/issues/24713
-    assertErrorsInCode(
+    await assertErrorsInCode(
         r'''
 f() {
   for (;3;) {}
@@ -967,8 +969,8 @@
         [StaticTypeWarningCode.NON_BOOL_CONDITION]);
   }
 
-  void test_nonBoolCondition_if() {
-    assertErrorsInCode(
+  test_nonBoolCondition_if() async {
+    await assertErrorsInCode(
         r'''
 f() {
   if (3) return 2; else return 1;
@@ -976,8 +978,8 @@
         [StaticTypeWarningCode.NON_BOOL_CONDITION]);
   }
 
-  void test_nonBoolCondition_while() {
-    assertErrorsInCode(
+  test_nonBoolCondition_while() async {
+    await assertErrorsInCode(
         r'''
 f() {
   while (3) {}
@@ -985,8 +987,8 @@
         [StaticTypeWarningCode.NON_BOOL_CONDITION]);
   }
 
-  void test_nonBoolExpression_functionType() {
-    assertErrorsInCode(
+  test_nonBoolExpression_functionType() async {
+    await assertErrorsInCode(
         r'''
 int makeAssertion() => 1;
 f() {
@@ -995,8 +997,8 @@
         [StaticTypeWarningCode.NON_BOOL_EXPRESSION]);
   }
 
-  void test_nonBoolExpression_interfaceType() {
-    assertErrorsInCode(
+  test_nonBoolExpression_interfaceType() async {
+    await assertErrorsInCode(
         r'''
 f() {
   assert(0);
@@ -1004,8 +1006,8 @@
         [StaticTypeWarningCode.NON_BOOL_EXPRESSION]);
   }
 
-  void test_nonBoolNegationExpression() {
-    assertErrorsInCode(
+  test_nonBoolNegationExpression() async {
+    await assertErrorsInCode(
         r'''
 f() {
   !42;
@@ -1013,8 +1015,8 @@
         [StaticTypeWarningCode.NON_BOOL_NEGATION_EXPRESSION]);
   }
 
-  void test_nonBoolOperand_and_left() {
-    assertErrorsInCode(
+  test_nonBoolOperand_and_left() async {
+    await assertErrorsInCode(
         r'''
 bool f(int left, bool right) {
   return left && right;
@@ -1022,8 +1024,8 @@
         [StaticTypeWarningCode.NON_BOOL_OPERAND]);
   }
 
-  void test_nonBoolOperand_and_right() {
-    assertErrorsInCode(
+  test_nonBoolOperand_and_right() async {
+    await assertErrorsInCode(
         r'''
 bool f(bool left, String right) {
   return left && right;
@@ -1031,8 +1033,8 @@
         [StaticTypeWarningCode.NON_BOOL_OPERAND]);
   }
 
-  void test_nonBoolOperand_or_left() {
-    assertErrorsInCode(
+  test_nonBoolOperand_or_left() async {
+    await assertErrorsInCode(
         r'''
 bool f(List<int> left, bool right) {
   return left || right;
@@ -1040,8 +1042,8 @@
         [StaticTypeWarningCode.NON_BOOL_OPERAND]);
   }
 
-  void test_nonBoolOperand_or_right() {
-    assertErrorsInCode(
+  test_nonBoolOperand_or_right() async {
+    await assertErrorsInCode(
         r'''
 bool f(bool left, double right) {
   return left || right;
@@ -1049,8 +1051,8 @@
         [StaticTypeWarningCode.NON_BOOL_OPERAND]);
   }
 
-  void test_nonTypeAsTypeArgument_notAType() {
-    assertErrorsInCode(
+  test_nonTypeAsTypeArgument_notAType() async {
+    await assertErrorsInCode(
         r'''
 int A;
 class B<E> {}
@@ -1058,16 +1060,16 @@
         [StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT]);
   }
 
-  void test_nonTypeAsTypeArgument_undefinedIdentifier() {
-    assertErrorsInCode(
+  test_nonTypeAsTypeArgument_undefinedIdentifier() async {
+    await assertErrorsInCode(
         r'''
 class B<E> {}
 f(B<A> b) {}''',
         [StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT]);
   }
 
-  void test_returnOfInvalidType_async_future_int_mismatches_future_null() {
-    assertErrorsInCode(
+  test_returnOfInvalidType_async_future_int_mismatches_future_null() async {
+    await assertErrorsInCode(
         '''
 import 'dart:async';
 Future<Null> f() async {
@@ -1077,8 +1079,8 @@
         [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
-  void test_returnOfInvalidType_async_future_int_mismatches_future_string() {
-    assertErrorsInCode(
+  test_returnOfInvalidType_async_future_int_mismatches_future_string() async {
+    await assertErrorsInCode(
         '''
 import 'dart:async';
 Future<String> f() async {
@@ -1088,8 +1090,8 @@
         [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
-  void test_returnOfInvalidType_async_future_int_mismatches_int() {
-    assertErrorsInCode(
+  test_returnOfInvalidType_async_future_int_mismatches_int() async {
+    await assertErrorsInCode(
         '''
 int f() async {
   return 5;
@@ -1101,18 +1103,18 @@
         ]);
   }
 
-  void test_returnOfInvalidType_expressionFunctionBody_function() {
-    assertErrorsInCode(
+  test_returnOfInvalidType_expressionFunctionBody_function() async {
+    await assertErrorsInCode(
         "int f() => '0';", [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
-  void test_returnOfInvalidType_expressionFunctionBody_getter() {
-    assertErrorsInCode(
+  test_returnOfInvalidType_expressionFunctionBody_getter() async {
+    await assertErrorsInCode(
         "int get g => '0';", [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
-  void test_returnOfInvalidType_expressionFunctionBody_localFunction() {
-    assertErrorsInCode(
+  test_returnOfInvalidType_expressionFunctionBody_localFunction() async {
+    await assertErrorsInCode(
         r'''
 class A {
   String m() {
@@ -1123,8 +1125,8 @@
         [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
-  void test_returnOfInvalidType_expressionFunctionBody_method() {
-    assertErrorsInCode(
+  test_returnOfInvalidType_expressionFunctionBody_method() async {
+    await assertErrorsInCode(
         r'''
 class A {
   int f() => '0';
@@ -1132,23 +1134,23 @@
         [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
-  void test_returnOfInvalidType_expressionFunctionBody_void() {
-    assertErrorsInCode(
+  test_returnOfInvalidType_expressionFunctionBody_void() async {
+    await assertErrorsInCode(
         "void f() => 42;", [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
-  void test_returnOfInvalidType_function() {
-    assertErrorsInCode("int f() { return '0'; }",
+  test_returnOfInvalidType_function() async {
+    await assertErrorsInCode("int f() { return '0'; }",
         [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
-  void test_returnOfInvalidType_getter() {
-    assertErrorsInCode("int get g { return '0'; }",
+  test_returnOfInvalidType_getter() async {
+    await assertErrorsInCode("int get g { return '0'; }",
         [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
-  void test_returnOfInvalidType_localFunction() {
-    assertErrorsInCode(
+  test_returnOfInvalidType_localFunction() async {
+    await assertErrorsInCode(
         r'''
 class A {
   String m() {
@@ -1159,8 +1161,8 @@
         [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
-  void test_returnOfInvalidType_method() {
-    assertErrorsInCode(
+  test_returnOfInvalidType_method() async {
+    await assertErrorsInCode(
         r'''
 class A {
   int f() { return '0'; }
@@ -1168,8 +1170,8 @@
         [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
-  void test_returnOfInvalidType_not_issued_for_valid_generic_return() {
-    assertNoErrorsInCode(r'''
+  test_returnOfInvalidType_not_issued_for_valid_generic_return() async {
+    await assertNoErrorsInCode(r'''
 abstract class F<T, U>  {
   U get value;
 }
@@ -1185,13 +1187,13 @@
 void main() { }''');
   }
 
-  void test_returnOfInvalidType_void() {
-    assertErrorsInCode("void f() { return 42; }",
+  test_returnOfInvalidType_void() async {
+    await assertErrorsInCode("void f() { return 42; }",
         [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
-  void test_typeArgumentNotMatchingBounds_classTypeAlias() {
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_classTypeAlias() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {}
@@ -1202,8 +1204,8 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_extends() {
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_extends() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {}
@@ -1213,9 +1215,9 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_extends_regressionInIssue18468Fix() {
+  test_typeArgumentNotMatchingBounds_extends_regressionInIssue18468Fix() async {
     // https://code.google.com/p/dart/issues/detail?id=18628
-    assertErrorsInCode(
+    await assertErrorsInCode(
         r'''
 class X<T extends Type> {}
 class Y<U> extends X<U> {}
@@ -1223,8 +1225,8 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_fieldFormalParameter() {
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_fieldFormalParameter() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {}
@@ -1236,8 +1238,8 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_functionReturnType() {
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_functionReturnType() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {}
@@ -1247,8 +1249,8 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_functionTypeAlias() {
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_functionTypeAlias() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {}
@@ -1258,8 +1260,8 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_functionTypedFormalParameter() {
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_functionTypedFormalParameter() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {}
@@ -1269,8 +1271,8 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_implements() {
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_implements() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {}
@@ -1280,8 +1282,8 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_is() {
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_is() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {}
@@ -1291,9 +1293,9 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_methodInvocation_localFunction() {
-    resetWithOptions(new AnalysisOptionsImpl()..strongMode = true);
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_methodInvocation_localFunction() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    await assertErrorsInCode(
         r'''
 class Point<T extends num> {
   Point(T x, T y);
@@ -1309,9 +1311,9 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_methodInvocation_method() {
-    resetWithOptions(new AnalysisOptionsImpl()..strongMode = true);
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_methodInvocation_method() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    await assertErrorsInCode(
         r'''
 class Point<T extends num> {
   Point(T x, T y);
@@ -1330,9 +1332,9 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_methodInvocation_topLevelFunction() {
-    resetWithOptions(new AnalysisOptionsImpl()..strongMode = true);
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_methodInvocation_topLevelFunction() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    await assertErrorsInCode(
         r'''
 class Point<T extends num> {
   Point(T x, T y);
@@ -1349,8 +1351,8 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_methodReturnType() {
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_methodReturnType() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {}
@@ -1361,8 +1363,8 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_new() {
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_new() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {}
@@ -1372,8 +1374,8 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_new_superTypeOfUpperBound() {
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_new_superTypeOfUpperBound() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B extends A {}
@@ -1384,8 +1386,8 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_parameter() {
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_parameter() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {}
@@ -1395,8 +1397,8 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_redirectingConstructor() {
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_redirectingConstructor() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {}
@@ -1410,8 +1412,8 @@
         ]);
   }
 
-  void test_typeArgumentNotMatchingBounds_typeArgumentList() {
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_typeArgumentList() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {}
@@ -1422,8 +1424,8 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_typeParameter() {
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_typeParameter() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {}
@@ -1434,8 +1436,8 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_variableDeclaration() {
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_variableDeclaration() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {}
@@ -1445,8 +1447,8 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeArgumentNotMatchingBounds_with() {
-    assertErrorsInCode(
+  test_typeArgumentNotMatchingBounds_with() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {}
@@ -1456,8 +1458,8 @@
         [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
   }
 
-  void test_typeParameterSupertypeOfItsBound() {
-    assertErrorsInCode(
+  test_typeParameterSupertypeOfItsBound() async {
+    await assertErrorsInCode(
         r'''
 class A<T extends T> {
 }
@@ -1465,9 +1467,8 @@
         [StaticTypeWarningCode.TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND]);
   }
 
-  void
-      test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_mutated() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_mutated() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 callMe(f()) { f(); }
 main(Object p) {
@@ -1477,8 +1478,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_typePromotion_booleanAnd_useInRight_mutatedInLeft() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_booleanAnd_useInRight_mutatedInLeft() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 main(Object p) {
   ((p is String) && ((p = 42) == 42)) && p.length != 0;
@@ -1486,8 +1487,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_typePromotion_booleanAnd_useInRight_mutatedInRight() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_booleanAnd_useInRight_mutatedInRight() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 main(Object p) {
   (p is String) && (((p = 42) == 42) && p.length != 0);
@@ -1495,9 +1496,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void
-      test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_after() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_after() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 callMe(f()) { f(); }
 main(Object p) {
@@ -1507,9 +1507,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void
-      test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_before() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_before() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 callMe(f()) { f(); }
 main(Object p) {
@@ -1519,8 +1518,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_typePromotion_conditional_useInThen_hasAssignment() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_conditional_useInThen_hasAssignment() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 main(Object p) {
   p is String ? (p.length + (p = 42)) : 0;
@@ -1528,8 +1527,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_typePromotion_if_accessedInClosure_hasAssignment() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_if_accessedInClosure_hasAssignment() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 callMe(f()) { f(); }
 main(Object p) {
@@ -1543,8 +1542,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_typePromotion_if_and_right_hasAssignment() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_if_and_right_hasAssignment() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 main(Object p) {
   if (p is String && (p = null) == null) {
@@ -1554,8 +1553,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_typePromotion_if_extends_notMoreSpecific_dynamic() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_if_extends_notMoreSpecific_dynamic() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 class V {}
 class A<T> {}
@@ -1571,8 +1570,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_typePromotion_if_extends_notMoreSpecific_notMoreSpecificTypeArg() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_if_extends_notMoreSpecific_notMoreSpecificTypeArg() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 class V {}
 class A<T> {}
@@ -1588,8 +1587,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_typePromotion_if_hasAssignment_after() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_if_hasAssignment_after() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 main(Object p) {
   if (p is String) {
@@ -1600,8 +1599,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_typePromotion_if_hasAssignment_before() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_if_hasAssignment_before() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 main(Object p) {
   if (p is String) {
@@ -1612,8 +1611,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_typePromotion_if_hasAssignment_inClosure_anonymous_after() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_if_hasAssignment_inClosure_anonymous_after() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 main(Object p) {
   if (p is String) {
@@ -1624,8 +1623,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_typePromotion_if_hasAssignment_inClosure_anonymous_before() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_if_hasAssignment_inClosure_anonymous_before() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 main(Object p) {
   () {p = 0;};
@@ -1636,8 +1635,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_typePromotion_if_hasAssignment_inClosure_function_after() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_if_hasAssignment_inClosure_function_after() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 main(Object p) {
   if (p is String) {
@@ -1648,8 +1647,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_typePromotion_if_hasAssignment_inClosure_function_before() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_if_hasAssignment_inClosure_function_before() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 main(Object p) {
   f() {p = 0;};
@@ -1660,8 +1659,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_typePromotion_if_implements_notMoreSpecific_dynamic() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_if_implements_notMoreSpecific_dynamic() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 class V {}
 class A<T> {}
@@ -1677,8 +1676,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_typePromotion_if_with_notMoreSpecific_dynamic() {
-    assertErrorsInUnverifiedCode(
+  test_typePromotion_if_with_notMoreSpecific_dynamic() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 class V {}
 class A<T> {}
@@ -1694,8 +1693,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_undefinedFunction() {
-    assertErrorsInCode(
+  test_undefinedFunction() async {
+    await assertErrorsInCode(
         r'''
 void f() {
   g();
@@ -1703,8 +1702,8 @@
         [StaticTypeWarningCode.UNDEFINED_FUNCTION]);
   }
 
-  void test_undefinedFunction_inCatch() {
-    assertErrorsInCode(
+  test_undefinedFunction_inCatch() async {
+    await assertErrorsInCode(
         r'''
 void f() {
   try {
@@ -1715,7 +1714,7 @@
         [StaticTypeWarningCode.UNDEFINED_FUNCTION]);
   }
 
-  void test_undefinedFunction_inImportedLib() {
+  test_undefinedFunction_inImportedLib() async {
     Source source = addSource(r'''
 import 'lib.dart' as f;
 main() { return f.g(); }''');
@@ -1724,26 +1723,26 @@
         r'''
 library lib;
 h() {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.UNDEFINED_FUNCTION]);
   }
 
-  void test_undefinedGetter() {
-    assertErrorsInUnverifiedCode(
+  test_undefinedGetter() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 class T {}
 f(T e) { return e.m; }''',
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_undefinedGetter_generic_function_call() {
+  test_undefinedGetter_generic_function_call() async {
     // Objects having a specific function type have a call() method, but
     // objects having type Function do not (this is because it is impossible to
     // know what signature the call should have).
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableStrictCallChecks = true;
-    resetWithOptions(options);
-    assertErrorsInUnverifiedCode(
+    resetWith(options: options);
+    await assertErrorsInUnverifiedCode(
         '''
 f(Function f) {
   return f.call;
@@ -1752,11 +1751,11 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_undefinedGetter_object_call() {
+  test_undefinedGetter_object_call() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableStrictCallChecks = true;
-    resetWithOptions(options);
-    assertErrorsInUnverifiedCode(
+    resetWith(options: options);
+    await assertErrorsInUnverifiedCode(
         '''
 f(Object o) {
   return o.call;
@@ -1765,8 +1764,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_undefinedGetter_proxy_annotation_fakeProxy() {
-    assertErrorsInCode(
+  test_undefinedGetter_proxy_annotation_fakeProxy() async {
+    await assertErrorsInCode(
         r'''
 library L;
 class Fake {
@@ -1780,16 +1779,16 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_undefinedGetter_static() {
-    assertErrorsInUnverifiedCode(
+  test_undefinedGetter_static() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 class A {}
 var a = A.B;''',
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_undefinedGetter_typeLiteral_cascadeTarget() {
-    assertErrorsInCode(
+  test_undefinedGetter_typeLiteral_cascadeTarget() async {
+    await assertErrorsInCode(
         r'''
 class T {
   static int get foo => 42;
@@ -1800,10 +1799,10 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_undefinedGetter_typeLiteral_conditionalAccess() {
+  test_undefinedGetter_typeLiteral_conditionalAccess() async {
     // When applied to a type literal, the conditional access operator '?.'
     // cannot be used to access instance getters of Type.
-    assertErrorsInCode(
+    await assertErrorsInCode(
         '''
 class A {}
 f() => A?.hashCode;
@@ -1811,8 +1810,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_undefinedGetter_void() {
-    assertErrorsInCode(
+  test_undefinedGetter_void() async {
+    await assertErrorsInCode(
         r'''
 class T {
   void m() {}
@@ -1821,8 +1820,8 @@
         [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_undefinedGetter_wrongNumberOfTypeArguments_tooLittle() {
-    assertErrorsInCode(
+  test_undefinedGetter_wrongNumberOfTypeArguments_tooLittle() async {
+    await assertErrorsInCode(
         r'''
 class A<K, V> {
   K element;
@@ -1833,8 +1832,8 @@
         [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
   }
 
-  void test_undefinedGetter_wrongNumberOfTypeArguments_tooMany() {
-    assertErrorsInCode(
+  test_undefinedGetter_wrongNumberOfTypeArguments_tooMany() async {
+    await assertErrorsInCode(
         r'''
 class A<E> {
   E element;
@@ -1845,8 +1844,8 @@
         [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
   }
 
-  void test_undefinedGetter_wrongOfTypeArgument() {
-    assertErrorsInCode(
+  test_undefinedGetter_wrongOfTypeArgument() async {
+    await assertErrorsInCode(
         r'''
 class A<E> {
   E element;
@@ -1857,8 +1856,8 @@
         [StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT]);
   }
 
-  void test_undefinedMethod() {
-    assertErrorsInCode(
+  test_undefinedMethod() async {
+    await assertErrorsInCode(
         r'''
 class A {
   void m() {
@@ -1868,8 +1867,8 @@
         [StaticTypeWarningCode.UNDEFINED_METHOD]);
   }
 
-  void test_undefinedMethod_assignmentExpression() {
-    assertErrorsInCode(
+  test_undefinedMethod_assignmentExpression() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B {
@@ -1881,14 +1880,14 @@
         [StaticTypeWarningCode.UNDEFINED_METHOD]);
   }
 
-  void test_undefinedMethod_generic_function_call() {
+  test_undefinedMethod_generic_function_call() async {
     // Objects having a specific function type have a call() method, but
     // objects having type Function do not (this is because it is impossible to
     // know what signature the call should have).
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableStrictCallChecks = true;
-    resetWithOptions(options);
-    assertErrorsInCode(
+    resetWith(options: options);
+    await assertErrorsInCode(
         '''
 f(Function f) {
   f.call();
@@ -1897,8 +1896,8 @@
         [StaticTypeWarningCode.UNDEFINED_METHOD]);
   }
 
-  void test_undefinedMethod_ignoreTypePropagation() {
-    assertErrorsInCode(
+  test_undefinedMethod_ignoreTypePropagation() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B extends A {
@@ -1913,16 +1912,16 @@
         [StaticTypeWarningCode.UNDEFINED_METHOD]);
   }
 
-  void test_undefinedMethod_leastUpperBoundWithNull() {
-    assertErrorsInCode('f(bool b, int i) => (b ? null : i).foo();',
+  test_undefinedMethod_leastUpperBoundWithNull() async {
+    await assertErrorsInCode('f(bool b, int i) => (b ? null : i).foo();',
         [StaticTypeWarningCode.UNDEFINED_METHOD]);
   }
 
-  void test_undefinedMethod_object_call() {
+  test_undefinedMethod_object_call() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableStrictCallChecks = true;
-    resetWithOptions(options);
-    assertErrorsInCode(
+    resetWith(options: options);
+    await assertErrorsInCode(
         '''
 f(Object o) {
   o.call();
@@ -1931,7 +1930,7 @@
         [StaticTypeWarningCode.UNDEFINED_METHOD]);
   }
 
-  void test_undefinedMethod_private() {
+  test_undefinedMethod_private() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -1939,7 +1938,7 @@
 class A {
   _foo() {}
 }''');
-    assertErrorsInCode(
+    await assertErrorsInCode(
         r'''
 import 'lib.dart';
 class B extends A {
@@ -1950,8 +1949,8 @@
         [StaticTypeWarningCode.UNDEFINED_METHOD]);
   }
 
-  void test_undefinedMethod_proxy_annotation_fakeProxy() {
-    assertErrorsInCode(
+  test_undefinedMethod_proxy_annotation_fakeProxy() async {
+    await assertErrorsInCode(
         r'''
 library L;
 class Fake {
@@ -1965,8 +1964,8 @@
         [StaticTypeWarningCode.UNDEFINED_METHOD]);
   }
 
-  void test_undefinedMethod_typeLiteral_cascadeTarget() {
-    assertErrorsInCode(
+  test_undefinedMethod_typeLiteral_cascadeTarget() async {
+    await assertErrorsInCode(
         '''
 class T {
   static void foo() {}
@@ -1978,10 +1977,10 @@
         [StaticTypeWarningCode.UNDEFINED_METHOD]);
   }
 
-  void test_undefinedMethod_typeLiteral_conditionalAccess() {
+  test_undefinedMethod_typeLiteral_conditionalAccess() async {
     // When applied to a type literal, the conditional access operator '?.'
     // cannot be used to access instance methods of Type.
-    assertErrorsInCode(
+    await assertErrorsInCode(
         '''
 class A {}
 f() => A?.toString();
@@ -1989,8 +1988,8 @@
         [StaticTypeWarningCode.UNDEFINED_METHOD]);
   }
 
-  void test_undefinedMethodWithConstructor() {
-    assertErrorsInCode(
+  test_undefinedMethodWithConstructor() async {
+    await assertErrorsInCode(
         r'''
 class C {
   C.m();
@@ -2001,8 +2000,8 @@
         [StaticTypeWarningCode.UNDEFINED_METHOD_WITH_CONSTRUCTOR]);
   }
 
-  void test_undefinedOperator_indexBoth() {
-    assertErrorsInUnverifiedCode(
+  test_undefinedOperator_indexBoth() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 class A {}
 f(A a) {
@@ -2011,8 +2010,8 @@
         [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_undefinedOperator_indexGetter() {
-    assertErrorsInUnverifiedCode(
+  test_undefinedOperator_indexGetter() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 class A {}
 f(A a) {
@@ -2021,8 +2020,8 @@
         [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_undefinedOperator_indexSetter() {
-    assertErrorsInUnverifiedCode(
+  test_undefinedOperator_indexSetter() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 class A {}
 f(A a) {
@@ -2031,8 +2030,8 @@
         [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_undefinedOperator_plus() {
-    assertErrorsInUnverifiedCode(
+  test_undefinedOperator_plus() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 class A {}
 f(A a) {
@@ -2041,8 +2040,8 @@
         [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_undefinedOperator_postfixExpression() {
-    assertErrorsInCode(
+  test_undefinedOperator_postfixExpression() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 f(A a) {
@@ -2051,8 +2050,8 @@
         [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_undefinedOperator_prefixExpression() {
-    assertErrorsInCode(
+  test_undefinedOperator_prefixExpression() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 f(A a) {
@@ -2061,24 +2060,24 @@
         [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
-  void test_undefinedSetter() {
-    assertErrorsInUnverifiedCode(
+  test_undefinedSetter() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 class T {}
 f(T e1) { e1.m = 0; }''',
         [StaticTypeWarningCode.UNDEFINED_SETTER]);
   }
 
-  void test_undefinedSetter_static() {
-    assertErrorsInUnverifiedCode(
+  test_undefinedSetter_static() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 class A {}
 f() { A.B = 0;}''',
         [StaticTypeWarningCode.UNDEFINED_SETTER]);
   }
 
-  void test_undefinedSetter_typeLiteral_cascadeTarget() {
-    assertErrorsInCode(
+  test_undefinedSetter_typeLiteral_cascadeTarget() async {
+    await assertErrorsInCode(
         r'''
 class T {
   static void set foo(_) {}
@@ -2089,8 +2088,8 @@
         [StaticTypeWarningCode.UNDEFINED_SETTER]);
   }
 
-  void test_undefinedSetter_void() {
-    assertErrorsInCode(
+  test_undefinedSetter_void() async {
+    await assertErrorsInCode(
         r'''
 class T {
   void m() {}
@@ -2099,8 +2098,8 @@
         [StaticTypeWarningCode.UNDEFINED_SETTER]);
   }
 
-  void test_undefinedSuperGetter() {
-    assertErrorsInCode(
+  test_undefinedSuperGetter() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B extends A {
@@ -2111,8 +2110,8 @@
         [StaticTypeWarningCode.UNDEFINED_SUPER_GETTER]);
   }
 
-  void test_undefinedSuperMethod() {
-    assertErrorsInCode(
+  test_undefinedSuperMethod() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B extends A {
@@ -2121,8 +2120,8 @@
         [StaticTypeWarningCode.UNDEFINED_SUPER_METHOD]);
   }
 
-  void test_undefinedSuperOperator_binaryExpression() {
-    assertErrorsInUnverifiedCode(
+  test_undefinedSuperOperator_binaryExpression() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 class A {}
 class B extends A {
@@ -2133,8 +2132,8 @@
         [StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR]);
   }
 
-  void test_undefinedSuperOperator_indexBoth() {
-    assertErrorsInUnverifiedCode(
+  test_undefinedSuperOperator_indexBoth() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 class A {}
 class B extends A {
@@ -2145,8 +2144,8 @@
         [StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR]);
   }
 
-  void test_undefinedSuperOperator_indexGetter() {
-    assertErrorsInUnverifiedCode(
+  test_undefinedSuperOperator_indexGetter() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 class A {}
 class B extends A {
@@ -2157,8 +2156,8 @@
         [StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR]);
   }
 
-  void test_undefinedSuperOperator_indexSetter() {
-    assertErrorsInUnverifiedCode(
+  test_undefinedSuperOperator_indexSetter() async {
+    await assertErrorsInUnverifiedCode(
         r'''
 class A {}
 class B extends A {
@@ -2169,8 +2168,8 @@
         [StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR]);
   }
 
-  void test_undefinedSuperSetter() {
-    assertErrorsInCode(
+  test_undefinedSuperSetter() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class B extends A {
@@ -2181,8 +2180,8 @@
         [StaticTypeWarningCode.UNDEFINED_SUPER_SETTER]);
   }
 
-  void test_unqualifiedReferenceToNonLocalStaticMember_getter() {
-    assertErrorsInCode(
+  test_unqualifiedReferenceToNonLocalStaticMember_getter() async {
+    await assertErrorsInCode(
         r'''
 class A {
   static int get a => 0;
@@ -2197,8 +2196,8 @@
         ]);
   }
 
-  void test_unqualifiedReferenceToNonLocalStaticMember_getter_invokeTarget() {
-    assertErrorsInCode(
+  test_unqualifiedReferenceToNonLocalStaticMember_getter_invokeTarget() async {
+    await assertErrorsInCode(
         r'''
 class A {
   static int foo;
@@ -2215,8 +2214,8 @@
         ]);
   }
 
-  void test_unqualifiedReferenceToNonLocalStaticMember_method() {
-    assertErrorsInCode(
+  test_unqualifiedReferenceToNonLocalStaticMember_method() async {
+    await assertErrorsInCode(
         r'''
 class A {
   static void a() {}
@@ -2231,8 +2230,8 @@
         ]);
   }
 
-  void test_unqualifiedReferenceToNonLocalStaticMember_setter() {
-    assertErrorsInCode(
+  test_unqualifiedReferenceToNonLocalStaticMember_setter() async {
+    await assertErrorsInCode(
         r'''
 class A {
   static set a(x) {}
@@ -2247,8 +2246,8 @@
         ]);
   }
 
-  void test_wrongNumberOfTypeArguments_classAlias() {
-    assertErrorsInCode(
+  test_wrongNumberOfTypeArguments_classAlias() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class M {}
@@ -2256,24 +2255,24 @@
         [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
   }
 
-  void test_wrongNumberOfTypeArguments_tooFew() {
-    assertErrorsInCode(
+  test_wrongNumberOfTypeArguments_tooFew() async {
+    await assertErrorsInCode(
         r'''
 class A<E, F> {}
 A<A> a = null;''',
         [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
   }
 
-  void test_wrongNumberOfTypeArguments_tooMany() {
-    assertErrorsInCode(
+  test_wrongNumberOfTypeArguments_tooMany() async {
+    await assertErrorsInCode(
         r'''
 class A<E> {}
 A<A, A> a = null;''',
         [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
   }
 
-  void test_wrongNumberOfTypeArguments_typeTest_tooFew() {
-    assertErrorsInCode(
+  test_wrongNumberOfTypeArguments_typeTest_tooFew() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class C<K, V> {}
@@ -2283,8 +2282,8 @@
         [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
   }
 
-  void test_wrongNumberOfTypeArguments_typeTest_tooMany() {
-    assertErrorsInCode(
+  test_wrongNumberOfTypeArguments_typeTest_tooMany() async {
+    await assertErrorsInCode(
         r'''
 class A {}
 class C<E> {}
@@ -2294,8 +2293,8 @@
         [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
   }
 
-  void test_yield_async_to_basic_type() {
-    assertErrorsInCode(
+  test_yield_async_to_basic_type() async {
+    await assertErrorsInCode(
         '''
 int f() async* {
   yield 3;
@@ -2307,8 +2306,8 @@
         ]);
   }
 
-  void test_yield_async_to_iterable() {
-    assertErrorsInCode(
+  test_yield_async_to_iterable() async {
+    await assertErrorsInCode(
         '''
 Iterable<int> f() async* {
   yield 3;
@@ -2320,8 +2319,8 @@
         ]);
   }
 
-  void test_yield_async_to_mistyped_stream() {
-    assertErrorsInCode(
+  test_yield_async_to_mistyped_stream() async {
+    await assertErrorsInCode(
         '''
 import 'dart:async';
 Stream<int> f() async* {
@@ -2331,8 +2330,8 @@
         [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
   }
 
-  void test_yield_each_async_non_stream() {
-    assertErrorsInCode(
+  test_yield_each_async_non_stream() async {
+    await assertErrorsInCode(
         '''
 f() async* {
   yield* 0;
@@ -2341,8 +2340,8 @@
         [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
   }
 
-  void test_yield_each_async_to_mistyped_stream() {
-    assertErrorsInCode(
+  test_yield_each_async_to_mistyped_stream() async {
+    await assertErrorsInCode(
         '''
 import 'dart:async';
 Stream<int> f() async* {
@@ -2353,8 +2352,8 @@
         [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
   }
 
-  void test_yield_each_sync_non_iterable() {
-    assertErrorsInCode(
+  test_yield_each_sync_non_iterable() async {
+    await assertErrorsInCode(
         '''
 f() sync* {
   yield* 0;
@@ -2363,8 +2362,8 @@
         [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
   }
 
-  void test_yield_each_sync_to_mistyped_iterable() {
-    assertErrorsInCode(
+  test_yield_each_sync_to_mistyped_iterable() async {
+    await assertErrorsInCode(
         '''
 Iterable<int> f() sync* {
   yield* g();
@@ -2374,8 +2373,8 @@
         [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
   }
 
-  void test_yield_sync_to_basic_type() {
-    assertErrorsInCode(
+  test_yield_sync_to_basic_type() async {
+    await assertErrorsInCode(
         '''
 int f() sync* {
   yield 3;
@@ -2387,8 +2386,8 @@
         ]);
   }
 
-  void test_yield_sync_to_mistyped_iterable() {
-    assertErrorsInCode(
+  test_yield_sync_to_mistyped_iterable() async {
+    await assertErrorsInCode(
         '''
 Iterable<int> f() sync* {
   yield "foo";
@@ -2397,8 +2396,8 @@
         [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
   }
 
-  void test_yield_sync_to_stream() {
-    assertErrorsInCode(
+  test_yield_sync_to_stream() async {
+    await assertErrorsInCode(
         '''
 import 'dart:async';
 Stream<int> f() sync* {
@@ -2413,22 +2412,28 @@
 }
 
 @reflectiveTest
+class StaticTypeWarningCodeTest_Driver extends StaticTypeWarningCodeTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
+
+@reflectiveTest
 class StrongModeStaticTypeWarningCodeTest extends ResolverTestCase {
   void setUp() {
     super.setUp();
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.strongMode = true;
-    resetWithOptions(options);
+    resetWith(options: options);
   }
 
-  void test_genericMethodWrongNumberOfTypeArguments() {
+  test_genericMethodWrongNumberOfTypeArguments() async {
     Source source = addSource('''
 f() {}
 main() {
   f/*<int>*/();
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD]);
     for (AnalysisError error in analysisContext2.computeErrors(source)) {
@@ -2441,8 +2446,8 @@
     verify([source]);
   }
 
-  void test_legalAsyncGeneratorReturnType_function_supertypeOfStream() {
-    assertErrorsInCode(
+  test_legalAsyncGeneratorReturnType_function_supertypeOfStream() async {
+    await assertErrorsInCode(
         '''
 import 'dart:async';
 f() async* { yield 42; }
@@ -2457,8 +2462,8 @@
         []);
   }
 
-  void test_legalAsyncReturnType_function_supertypeOfFuture() {
-    assertErrorsInCode(
+  test_legalAsyncReturnType_function_supertypeOfFuture() async {
+    await assertErrorsInCode(
         '''
 import 'dart:async';
 f() async { return 42; }
@@ -2473,8 +2478,8 @@
         []);
   }
 
-  void test_legalSyncGeneratorReturnType_function_supertypeOfIterable() {
-    assertErrorsInCode(
+  test_legalSyncGeneratorReturnType_function_supertypeOfIterable() async {
+    await assertErrorsInCode(
         '''
 f() sync* { yield 42; }
 dynamic f2() sync* { yield 42; }
@@ -2488,3 +2493,16 @@
         []);
   }
 }
+
+@reflectiveTest
+class StrongModeStaticTypeWarningCodeTest_Driver
+    extends StrongModeStaticTypeWarningCodeTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+
+  @failingTest
+  @override
+  test_genericMethodWrongNumberOfTypeArguments() {
+    return super.test_genericMethodWrongNumberOfTypeArguments();
+  }
+}
diff --git a/pkg/analyzer/test/generated/static_warning_code_driver_test.dart b/pkg/analyzer/test/generated/static_warning_code_driver_test.dart
new file mode 100644
index 0000000..90869fb
--- /dev/null
+++ b/pkg/analyzer/test/generated/static_warning_code_driver_test.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'static_warning_code_test.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(StaticWarningCodeTest_Driver);
+  });
+}
+
+@reflectiveTest
+class StaticWarningCodeTest_Driver extends StaticWarningCodeTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+
+  @failingTest
+  @override
+  test_argumentTypeNotAssignable_ambiguousClassName() {
+    return super.test_argumentTypeNotAssignable_ambiguousClassName();
+  }
+
+  @failingTest
+  @override
+  test_importOfNonLibrary() {
+    return super.test_importOfNonLibrary();
+  }
+}
diff --git a/pkg/analyzer/test/generated/static_warning_code_test.dart b/pkg/analyzer/test/generated/static_warning_code_test.dart
index 1fc56f4..794ebf5 100644
--- a/pkg/analyzer/test/generated/static_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_test.dart
@@ -21,7 +21,7 @@
 
 @reflectiveTest
 class StaticWarningCodeTest extends ResolverTestCase {
-  void fail_argumentTypeNotAssignable_tearOff_required() {
+  fail_argumentTypeNotAssignable_tearOff_required() async {
     Source source = addSource(r'''
 class C {
   Object/*=T*/ f/*<T>*/(Object/*=T*/ x) => x;
@@ -31,43 +31,43 @@
   print(h('s'));
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void fail_undefinedGetter() {
+  fail_undefinedGetter() async {
     Source source = addSource(r'''
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_GETTER]);
     verify([source]);
   }
 
-  void fail_undefinedIdentifier_commentReference() {
+  fail_undefinedIdentifier_commentReference() async {
     Source source = addSource(r'''
 /** [m] xxx [new B.c] */
 class A {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.UNDEFINED_IDENTIFIER,
       StaticWarningCode.UNDEFINED_IDENTIFIER
     ]);
   }
 
-  void fail_undefinedSetter() {
+  fail_undefinedSetter() async {
     Source source = addSource(r'''
 class C {}
 f(var p) {
   C.m = 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_SETTER]);
     verify([source]);
   }
 
-  void test_ambiguousImport_as() {
+  test_ambiguousImport_as() async {
     Source source = addSource(r'''
 import 'lib1.dart';
 import 'lib2.dart';
@@ -82,11 +82,11 @@
         r'''
 library lib2;
 class N {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]);
   }
 
-  void test_ambiguousImport_extends() {
+  test_ambiguousImport_extends() async {
     Source source = addSource(r'''
 import 'lib1.dart';
 import 'lib2.dart';
@@ -101,14 +101,14 @@
         r'''
 library lib2;
 class N {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.AMBIGUOUS_IMPORT,
       CompileTimeErrorCode.EXTENDS_NON_CLASS
     ]);
   }
 
-  void test_ambiguousImport_implements() {
+  test_ambiguousImport_implements() async {
     Source source = addSource(r'''
 import 'lib1.dart';
 import 'lib2.dart';
@@ -123,14 +123,14 @@
         r'''
 library lib2;
 class N {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.AMBIGUOUS_IMPORT,
       CompileTimeErrorCode.IMPLEMENTS_NON_CLASS
     ]);
   }
 
-  void test_ambiguousImport_inPart() {
+  test_ambiguousImport_inPart() async {
     Source source = addSource(r'''
 library lib;
 import 'lib1.dart';
@@ -151,14 +151,16 @@
         r'''
 part of lib;
 class A extends N {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(partSource);
+    assertNoErrors(source);
     assertErrors(partSource, [
       StaticWarningCode.AMBIGUOUS_IMPORT,
       CompileTimeErrorCode.EXTENDS_NON_CLASS
     ]);
   }
 
-  void test_ambiguousImport_instanceCreation() {
+  test_ambiguousImport_instanceCreation() async {
     Source source = addSource(r'''
 library L;
 import 'lib1.dart';
@@ -174,11 +176,11 @@
         r'''
 library lib2;
 class N {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]);
   }
 
-  void test_ambiguousImport_is() {
+  test_ambiguousImport_is() async {
     Source source = addSource(r'''
 import 'lib1.dart';
 import 'lib2.dart';
@@ -193,11 +195,11 @@
         r'''
 library lib2;
 class N {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]);
   }
 
-  void test_ambiguousImport_qualifier() {
+  test_ambiguousImport_qualifier() async {
     Source source = addSource(r'''
 import 'lib1.dart';
 import 'lib2.dart';
@@ -212,11 +214,11 @@
         r'''
 library lib2;
 class N {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]);
   }
 
-  void test_ambiguousImport_typeAnnotation() {
+  test_ambiguousImport_typeAnnotation() async {
     Source source = addSource(r'''
 import 'lib1.dart';
 import 'lib2.dart';
@@ -239,7 +241,7 @@
         r'''
 library lib2;
 class N {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.AMBIGUOUS_IMPORT,
       StaticWarningCode.AMBIGUOUS_IMPORT,
@@ -251,7 +253,7 @@
     ]);
   }
 
-  void test_ambiguousImport_typeArgument_annotation() {
+  test_ambiguousImport_typeArgument_annotation() async {
     Source source = addSource(r'''
 import 'lib1.dart';
 import 'lib2.dart';
@@ -267,11 +269,11 @@
         r'''
 library lib2;
 class N {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]);
   }
 
-  void test_ambiguousImport_typeArgument_instanceCreation() {
+  test_ambiguousImport_typeArgument_instanceCreation() async {
     Source source = addSource(r'''
 import 'lib1.dart';
 import 'lib2.dart';
@@ -287,11 +289,11 @@
         r'''
 library lib2;
 class N {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]);
   }
 
-  void test_ambiguousImport_varRead() {
+  test_ambiguousImport_varRead() async {
     Source source = addSource(r'''
 import 'lib1.dart';
 import 'lib2.dart';
@@ -307,11 +309,11 @@
         r'''
 library lib2;
 var v;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]);
   }
 
-  void test_ambiguousImport_varWrite() {
+  test_ambiguousImport_varWrite() async {
     Source source = addSource(r'''
 import 'lib1.dart';
 import 'lib2.dart';
@@ -326,11 +328,11 @@
         r'''
 library lib2;
 var v;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]);
   }
 
-  void test_ambiguousImport_withPrefix() {
+  test_ambiguousImport_withPrefix() async {
     Source source = addSource(r'''
 library test;
 import 'lib1.dart' as p;
@@ -348,11 +350,11 @@
         r'''
 library lib2;
 f() {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]);
   }
 
-  void test_argumentTypeNotAssignable_ambiguousClassName() {
+  test_argumentTypeNotAssignable_ambiguousClassName() async {
     // See dartbug.com/19624
     Source source = addNamedSource(
         "/lib1.dart",
@@ -369,7 +371,6 @@
 library lib2;
 class _A {}
 g(h(_A a)) {}''');
-    computeLibrarySourceErrors(source);
     // The name _A is private to the library it's defined in, so this is a type
     // mismatch. Furthermore, the error message should mention both _A and the
     // filenames so the user can figure out what's going on.
@@ -383,7 +384,7 @@
     expect(message.indexOf("lib2.dart") != -1, isTrue);
   }
 
-  void test_argumentTypeNotAssignable_annotation_namedConstructor() {
+  test_argumentTypeNotAssignable_annotation_namedConstructor() async {
     Source source = addSource(r'''
 class A {
   const A.fromInt(int p);
@@ -391,12 +392,12 @@
 @A.fromInt('0')
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_annotation_unnamedConstructor() {
+  test_argumentTypeNotAssignable_annotation_unnamedConstructor() async {
     Source source = addSource(r'''
 class A {
   const A(int p);
@@ -404,12 +405,12 @@
 @A('0')
 main() {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_binary() {
+  test_argumentTypeNotAssignable_binary() async {
     Source source = addSource(r'''
 class A {
   operator +(int p) {}
@@ -417,12 +418,12 @@
 f(A a) {
   a + '0';
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_cascadeSecond() {
+  test_argumentTypeNotAssignable_cascadeSecond() async {
     Source source = addSource(r'''
 // filler filler filler filler filler filler filler filler filler filler
 class A {
@@ -436,12 +437,12 @@
   A a = new A();
   a..  ma().mb(0);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_const() {
+  test_argumentTypeNotAssignable_const() async {
     Source source = addSource(r'''
 class A {
   const A(String p);
@@ -449,7 +450,7 @@
 main() {
   const A(42);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
       CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
@@ -457,7 +458,7 @@
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_const_super() {
+  test_argumentTypeNotAssignable_const_super() async {
     Source source = addSource(r'''
 class A {
   const A(String p);
@@ -465,22 +466,22 @@
 class B extends A {
   const B() : super(42);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_functionExpressionInvocation_required() {
+  test_argumentTypeNotAssignable_functionExpressionInvocation_required() async {
     Source source = addSource(r'''
 main() {
   (int x) {} ('');
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_index() {
+  test_argumentTypeNotAssignable_index() async {
     Source source = addSource(r'''
 class A {
   operator [](int index) {}
@@ -488,12 +489,12 @@
 f(A a) {
   a['0'];
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_invocation_callParameter() {
+  test_argumentTypeNotAssignable_invocation_callParameter() async {
     Source source = addSource(r'''
 class A {
   call(int p) {}
@@ -501,12 +502,12 @@
 f(A a) {
   a('0');
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_invocation_callVariable() {
+  test_argumentTypeNotAssignable_invocation_callVariable() async {
     Source source = addSource(r'''
 class A {
   call(int p) {}
@@ -515,46 +516,46 @@
   A a = new A();
   a('0');
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_invocation_functionParameter() {
+  test_argumentTypeNotAssignable_invocation_functionParameter() async {
     Source source = addSource(r'''
 a(b(int p)) {
   b('0');
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_invocation_functionParameter_generic() {
+  test_argumentTypeNotAssignable_invocation_functionParameter_generic() async {
     Source source = addSource(r'''
 class A<K, V> {
   m(f(K k), V v) {
     f(v);
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_invocation_functionTypes_optional() {
+  test_argumentTypeNotAssignable_invocation_functionTypes_optional() async {
     Source source = addSource(r'''
 void acceptFunNumOptBool(void funNumOptBool([bool b])) {}
 void funNumBool(bool b) {}
 main() {
   acceptFunNumOptBool(funNumBool);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_invocation_generic() {
+  test_argumentTypeNotAssignable_invocation_generic() async {
     Source source = addSource(r'''
 class A<T> {
   m(T t) {}
@@ -562,56 +563,56 @@
 f(A<String> a) {
   a.m(1);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_invocation_named() {
+  test_argumentTypeNotAssignable_invocation_named() async {
     Source source = addSource(r'''
 f({String p}) {}
 main() {
   f(p: 42);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_invocation_optional() {
+  test_argumentTypeNotAssignable_invocation_optional() async {
     Source source = addSource(r'''
 f([String p]) {}
 main() {
   f(42);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_invocation_required() {
+  test_argumentTypeNotAssignable_invocation_required() async {
     Source source = addSource(r'''
 f(String p) {}
 main() {
   f(42);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_invocation_typedef_generic() {
+  test_argumentTypeNotAssignable_invocation_typedef_generic() async {
     Source source = addSource(r'''
 typedef A<T>(T p);
 f(A<int> a) {
   a('1');
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_invocation_typedef_local() {
+  test_argumentTypeNotAssignable_invocation_typedef_local() async {
     Source source = addSource(r'''
 typedef A(int p);
 A getA() => null;
@@ -619,23 +620,23 @@
   A a = getA();
   a('1');
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_invocation_typedef_parameter() {
+  test_argumentTypeNotAssignable_invocation_typedef_parameter() async {
     Source source = addSource(r'''
 typedef A(int p);
 f(A a) {
   a('1');
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_new_generic() {
+  test_argumentTypeNotAssignable_new_generic() async {
     Source source = addSource(r'''
 class A<T> {
   A(T p) {}
@@ -643,12 +644,12 @@
 main() {
   new A<String>(42);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_new_optional() {
+  test_argumentTypeNotAssignable_new_optional() async {
     Source source = addSource(r'''
 class A {
   A([String p]) {}
@@ -656,12 +657,12 @@
 main() {
   new A(42);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_argumentTypeNotAssignable_new_required() {
+  test_argumentTypeNotAssignable_new_required() async {
     Source source = addSource(r'''
 class A {
   A(String p) {}
@@ -669,23 +670,23 @@
 main() {
   new A(42);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_assignmentToClass() {
+  test_assignmentToClass() async {
     Source source = addSource('''
 class C {}
 main() {
   C = null;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_TYPE]);
   }
 
-  void test_assignmentToConst_instanceVariable() {
+  test_assignmentToConst_instanceVariable() async {
     Source source = addSource(r'''
 class A {
   static const v = 0;
@@ -693,12 +694,12 @@
 f() {
   A.v = 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_CONST]);
     verify([source]);
   }
 
-  void test_assignmentToConst_instanceVariable_plusEq() {
+  test_assignmentToConst_instanceVariable_plusEq() async {
     Source source = addSource(r'''
 class A {
   static const v = 0;
@@ -706,45 +707,45 @@
 f() {
   A.v += 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_CONST]);
     verify([source]);
   }
 
-  void test_assignmentToConst_localVariable() {
+  test_assignmentToConst_localVariable() async {
     Source source = addSource(r'''
 f() {
   const x = 0;
   x = 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_CONST]);
     verify([source]);
   }
 
-  void test_assignmentToConst_localVariable_plusEq() {
+  test_assignmentToConst_localVariable_plusEq() async {
     Source source = addSource(r'''
 f() {
   const x = 0;
   x += 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_CONST]);
     verify([source]);
   }
 
-  void test_assignmentToEnumType() {
+  test_assignmentToEnumType() async {
     Source source = addSource('''
 enum E { e }
 main() {
   E = null;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_TYPE]);
   }
 
-  void test_assignmentToFinal_instanceVariable() {
+  test_assignmentToFinal_instanceVariable() async {
     Source source = addSource(r'''
 class A {
   final v = 0;
@@ -753,12 +754,12 @@
   A a = new A();
   a.v = 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]);
     verify([source]);
   }
 
-  void test_assignmentToFinal_instanceVariable_plusEq() {
+  test_assignmentToFinal_instanceVariable_plusEq() async {
     Source source = addSource(r'''
 class A {
   final v = 0;
@@ -767,109 +768,109 @@
   A a = new A();
   a.v += 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]);
     verify([source]);
   }
 
-  void test_assignmentToFinal_localVariable() {
+  test_assignmentToFinal_localVariable() async {
     Source source = addSource(r'''
 f() {
   final x = 0;
   x = 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]);
     verify([source]);
   }
 
-  void test_assignmentToFinal_localVariable_plusEq() {
+  test_assignmentToFinal_localVariable_plusEq() async {
     Source source = addSource(r'''
 f() {
   final x = 0;
   x += 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]);
     verify([source]);
   }
 
-  void test_assignmentToFinal_postfixMinusMinus() {
+  test_assignmentToFinal_postfixMinusMinus() async {
     Source source = addSource(r'''
 f() {
   final x = 0;
   x--;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]);
     verify([source]);
   }
 
-  void test_assignmentToFinal_postfixPlusPlus() {
+  test_assignmentToFinal_postfixPlusPlus() async {
     Source source = addSource(r'''
 f() {
   final x = 0;
   x++;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]);
     verify([source]);
   }
 
-  void test_assignmentToFinal_prefixMinusMinus() {
+  test_assignmentToFinal_prefixMinusMinus() async {
     Source source = addSource(r'''
 f() {
   final x = 0;
   --x;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]);
     verify([source]);
   }
 
-  void test_assignmentToFinal_prefixPlusPlus() {
+  test_assignmentToFinal_prefixPlusPlus() async {
     Source source = addSource(r'''
 f() {
   final x = 0;
   ++x;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]);
     verify([source]);
   }
 
-  void test_assignmentToFinal_suffixMinusMinus() {
+  test_assignmentToFinal_suffixMinusMinus() async {
     Source source = addSource(r'''
 f() {
   final x = 0;
   x--;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]);
     verify([source]);
   }
 
-  void test_assignmentToFinal_suffixPlusPlus() {
+  test_assignmentToFinal_suffixPlusPlus() async {
     Source source = addSource(r'''
 f() {
   final x = 0;
   x++;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]);
     verify([source]);
   }
 
-  void test_assignmentToFinal_topLevelVariable() {
+  test_assignmentToFinal_topLevelVariable() async {
     Source source = addSource(r'''
 final x = 0;
 f() { x = 1; }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]);
     verify([source]);
   }
 
-  void test_assignmentToFinalNoSetter_prefixedIdentifier() {
+  test_assignmentToFinalNoSetter_prefixedIdentifier() async {
     Source source = addSource(r'''
 class A {
   int get x => 0;
@@ -878,12 +879,12 @@
   A a = new A();
   a.x = 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER]);
     verify([source]);
   }
 
-  void test_assignmentToFinalNoSetter_propertyAccess() {
+  test_assignmentToFinalNoSetter_propertyAccess() async {
     Source source = addSource(r'''
 class A {
   int get x => 0;
@@ -894,23 +895,23 @@
 main() {
   B.a.x = 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER]);
     verify([source]);
   }
 
-  void test_assignmentToFunction() {
+  test_assignmentToFunction() async {
     Source source = addSource(r'''
 f() {}
 main() {
   f = null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FUNCTION]);
     verify([source]);
   }
 
-  void test_assignmentToMethod() {
+  test_assignmentToMethod() async {
     Source source = addSource(r'''
 class A {
   m() {}
@@ -918,23 +919,23 @@
 f(A a) {
   a.m = () {};
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_METHOD]);
     verify([source]);
   }
 
-  void test_assignmentToTypedef() {
+  test_assignmentToTypedef() async {
     Source source = addSource('''
 typedef void F();
 main() {
   F = null;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_TYPE]);
   }
 
-  void test_assignmentToTypeParameter() {
+  test_assignmentToTypeParameter() async {
     Source source = addSource('''
 class C<T> {
   f() {
@@ -942,11 +943,11 @@
   }
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_TYPE]);
   }
 
-  void test_caseBlockNotTerminated() {
+  test_caseBlockNotTerminated() async {
     Source source = addSource(r'''
 f(int p) {
   switch (p) {
@@ -956,32 +957,32 @@
       break;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.CASE_BLOCK_NOT_TERMINATED]);
     verify([source]);
   }
 
-  void test_castToNonType() {
+  test_castToNonType() async {
     Source source = addSource(r'''
 var A = 0;
 f(String s) { var x = s as A; }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.CAST_TO_NON_TYPE]);
     verify([source]);
   }
 
-  void test_concreteClassWithAbstractMember() {
+  test_concreteClassWithAbstractMember() async {
     Source source = addSource(r'''
 class A {
   m();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
     verify([source]);
   }
 
-  void test_concreteClassWithAbstractMember_noSuchMethod_interface() {
+  test_concreteClassWithAbstractMember_noSuchMethod_interface() async {
     Source source = addSource(r'''
 class I {
   noSuchMethod(v) => '';
@@ -989,13 +990,13 @@
 class A implements I {
   m();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
     verify([source]);
   }
 
-  void test_conflictingDartImport() {
+  test_conflictingDartImport() async {
     Source source = addSource(r'''
 import 'lib.dart';
 import 'dart:async';
@@ -1006,12 +1007,11 @@
         r'''
 library lib;
 class Future {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.CONFLICTING_DART_IMPORT]);
   }
 
-  void
-      test_conflictingInstanceGetterAndSuperclassMember_declField_direct_setter() {
+  test_conflictingInstanceGetterAndSuperclassMember_declField_direct_setter() async {
     Source source = addSource(r'''
 class A {
   static set v(x) {}
@@ -1019,14 +1019,13 @@
 class B extends A {
   var v;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
     verify([source]);
   }
 
-  void
-      test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_getter() {
+  test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_getter() async {
     Source source = addSource(r'''
 class A {
   static get v => 0;
@@ -1034,14 +1033,13 @@
 class B extends A {
   get v => 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
     verify([source]);
   }
 
-  void
-      test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_method() {
+  test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_method() async {
     Source source = addSource(r'''
 class A {
   static v() {}
@@ -1049,14 +1047,13 @@
 class B extends A {
   get v => 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
     verify([source]);
   }
 
-  void
-      test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_setter() {
+  test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_setter() async {
     Source source = addSource(r'''
 class A {
   static set v(x) {}
@@ -1064,13 +1061,13 @@
 class B extends A {
   get v => 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
     verify([source]);
   }
 
-  void test_conflictingInstanceGetterAndSuperclassMember_declGetter_indirect() {
+  test_conflictingInstanceGetterAndSuperclassMember_declGetter_indirect() async {
     Source source = addSource(r'''
 class A {
   static int v;
@@ -1079,13 +1076,13 @@
 class C extends B {
   get v => 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
     verify([source]);
   }
 
-  void test_conflictingInstanceGetterAndSuperclassMember_declGetter_mixin() {
+  test_conflictingInstanceGetterAndSuperclassMember_declGetter_mixin() async {
     Source source = addSource(r'''
 class M {
   static int v;
@@ -1093,13 +1090,13 @@
 class B extends Object with M {
   get v => 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
     verify([source]);
   }
 
-  void test_conflictingInstanceGetterAndSuperclassMember_direct_field() {
+  test_conflictingInstanceGetterAndSuperclassMember_direct_field() async {
     Source source = addSource(r'''
 class A {
   static int v;
@@ -1107,37 +1104,37 @@
 class B extends A {
   get v => 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
     verify([source]);
   }
 
-  void test_conflictingInstanceMethodSetter2() {
+  test_conflictingInstanceMethodSetter2() async {
     Source source = addSource(r'''
 class A {
   foo() {}
   set foo(a) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER2]);
     verify([source]);
   }
 
-  void test_conflictingInstanceMethodSetter_sameClass() {
+  test_conflictingInstanceMethodSetter_sameClass() async {
     Source source = addSource(r'''
 class A {
   set foo(a) {}
   foo() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER]);
     verify([source]);
   }
 
-  void test_conflictingInstanceMethodSetter_setterInInterface() {
+  test_conflictingInstanceMethodSetter_setterInInterface() async {
     Source source = addSource(r'''
 abstract class A {
   set foo(a);
@@ -1145,13 +1142,13 @@
 abstract class B implements A {
   foo() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER]);
     verify([source]);
   }
 
-  void test_conflictingInstanceMethodSetter_setterInSuper() {
+  test_conflictingInstanceMethodSetter_setterInSuper() async {
     Source source = addSource(r'''
 class A {
   set foo(a) {}
@@ -1159,13 +1156,13 @@
 class B extends A {
   foo() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER]);
     verify([source]);
   }
 
-  void test_conflictingInstanceSetterAndSuperclassMember() {
+  test_conflictingInstanceSetterAndSuperclassMember() async {
     Source source = addSource(r'''
 class A {
   static int v;
@@ -1173,13 +1170,13 @@
 class B extends A {
   set v(x) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER]);
     verify([source]);
   }
 
-  void test_conflictingStaticGetterAndInstanceSetter_mixin() {
+  test_conflictingStaticGetterAndInstanceSetter_mixin() async {
     Source source = addSource(r'''
 class A {
   set x(int p) {}
@@ -1187,13 +1184,13 @@
 class B extends Object with A {
   static get x => 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER]);
     verify([source]);
   }
 
-  void test_conflictingStaticGetterAndInstanceSetter_superClass() {
+  test_conflictingStaticGetterAndInstanceSetter_superClass() async {
     Source source = addSource(r'''
 class A {
   set x(int p) {}
@@ -1201,49 +1198,49 @@
 class B extends A {
   static get x => 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER]);
     verify([source]);
   }
 
-  void test_conflictingStaticGetterAndInstanceSetter_thisClass() {
+  test_conflictingStaticGetterAndInstanceSetter_thisClass() async {
     Source source = addSource(r'''
 class A {
   static get x => 0;
   set x(int p) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER]);
     verify([source]);
   }
 
-  void test_conflictingStaticSetterAndInstanceMember_thisClass_getter() {
+  test_conflictingStaticSetterAndInstanceMember_thisClass_getter() async {
     Source source = addSource(r'''
 class A {
   get x => 0;
   static set x(int p) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER]);
     verify([source]);
   }
 
-  void test_conflictingStaticSetterAndInstanceMember_thisClass_method() {
+  test_conflictingStaticSetterAndInstanceMember_thisClass_method() async {
     Source source = addSource(r'''
 class A {
   x() {}
   static set x(int p) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER]);
     verify([source]);
   }
 
-  void test_constWithAbstractClass() {
+  test_constWithAbstractClass() async {
     Source source = addSource(r'''
 abstract class A {
   const A();
@@ -1251,30 +1248,30 @@
 void f() {
   A a = const A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.CONST_WITH_ABSTRACT_CLASS]);
     verify([source]);
   }
 
-  void test_equalKeysInMap() {
+  test_equalKeysInMap() async {
     Source source = addSource("var m = {'a' : 0, 'b' : 1, 'a' : 2};");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.EQUAL_KEYS_IN_MAP]);
     verify([source]);
   }
 
-  void test_equalKeysInMap_withEqualTypeParams() {
+  test_equalKeysInMap_withEqualTypeParams() async {
     Source source = addSource(r'''
 class A<T> {
   const A();
 }
 var m = {const A<int>(): 0, const A<int>(): 1};''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.EQUAL_KEYS_IN_MAP]);
     verify([source]);
   }
 
-  void test_equalKeysInMap_withUnequalTypeParams() {
+  test_equalKeysInMap_withUnequalTypeParams() async {
     // No error should be produced because A<int> and A<num> are different
     // types.
     Source source = addSource(r'''
@@ -1282,74 +1279,74 @@
   const A();
 }
 var m = {const A<int>(): 0, const A<num>(): 1};''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_exportDuplicatedLibraryNamed() {
+  test_exportDuplicatedLibraryNamed() async {
     Source source = addSource(r'''
 library test;
 export 'lib1.dart';
 export 'lib2.dart';''');
     addNamedSource("/lib1.dart", "library lib;");
     addNamedSource("/lib2.dart", "library lib;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.EXPORT_DUPLICATED_LIBRARY_NAMED]);
     verify([source]);
   }
 
-  void test_extraPositionalArguments() {
+  test_extraPositionalArguments() async {
     Source source = addSource(r'''
 f() {}
 main() {
   f(0, 1, '2');
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS]);
     verify([source]);
   }
 
-  void test_extraPositionalArguments_functionExpression() {
+  test_extraPositionalArguments_functionExpression() async {
     Source source = addSource(r'''
 main() {
   (int x) {} (0, 1);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS]);
     verify([source]);
   }
 
-  void test_fieldInitializedInInitializerAndDeclaration_final() {
+  test_fieldInitializedInInitializerAndDeclaration_final() async {
     Source source = addSource(r'''
 class A {
   final int x = 0;
   A() : x = 1 {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION]);
     verify([source]);
   }
 
-  void test_fieldInitializerNotAssignable() {
+  test_fieldInitializerNotAssignable() async {
     Source source = addSource(r'''
 class A {
   int x;
   A() : x = '';
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_fieldInitializingFormalNotAssignable() {
+  test_fieldInitializingFormalNotAssignable() async {
     Source source = addSource(r'''
 class A {
   int x;
   A(String this.x) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE]);
     verify([source]);
@@ -1364,56 +1361,56 @@
    * FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR, since it more specific, we use it instead of
    * the broader code
    */
-  void test_finalInitializedInDeclarationAndConstructor_initializers() {
+  test_finalInitializedInDeclarationAndConstructor_initializers() async {
     Source source = addSource(r'''
 class A {
   final x = 0;
   A() : x = 0 {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION]);
     verify([source]);
   }
 
-  void test_finalInitializedInDeclarationAndConstructor_initializingFormal() {
+  test_finalInitializedInDeclarationAndConstructor_initializingFormal() async {
     Source source = addSource(r'''
 class A {
   final x = 0;
   A(this.x) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR]);
     verify([source]);
   }
 
-  void test_finalNotInitialized_inConstructor_1() {
+  test_finalNotInitialized_inConstructor_1() async {
     Source source = addSource(r'''
 class A {
   final int x;
   A() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1]);
     verify([source]);
   }
 
-  void test_finalNotInitialized_inConstructor_2() {
+  test_finalNotInitialized_inConstructor_2() async {
     Source source = addSource(r'''
 class A {
   final int a;
   final int b;
   A() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2]);
     verify([source]);
   }
 
-  void test_finalNotInitialized_inConstructor_3() {
+  test_finalNotInitialized_inConstructor_3() async {
     Source source = addSource(r'''
 class A {
   final int a;
@@ -1421,88 +1418,88 @@
   final int c;
   A() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS]);
     verify([source]);
   }
 
-  void test_finalNotInitialized_instanceField_final() {
+  test_finalNotInitialized_instanceField_final() async {
     Source source = addSource(r'''
 class A {
   final F;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.FINAL_NOT_INITIALIZED]);
     verify([source]);
   }
 
-  void test_finalNotInitialized_instanceField_final_static() {
+  test_finalNotInitialized_instanceField_final_static() async {
     Source source = addSource(r'''
 class A {
   static final F;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.FINAL_NOT_INITIALIZED]);
     verify([source]);
   }
 
-  void test_finalNotInitialized_library_final() {
+  test_finalNotInitialized_library_final() async {
     Source source = addSource("final F;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.FINAL_NOT_INITIALIZED]);
     verify([source]);
   }
 
-  void test_finalNotInitialized_local_final() {
+  test_finalNotInitialized_local_final() async {
     Source source = addSource(r'''
 f() {
   final int x;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.FINAL_NOT_INITIALIZED]);
     verify([source]);
   }
 
-  void test_functionWithoutCall_direct() {
+  test_functionWithoutCall_direct() async {
     Source source = addSource(r'''
 class A implements Function {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.FUNCTION_WITHOUT_CALL]);
     verify([source]);
   }
 
-  void test_functionWithoutCall_indirect_extends() {
+  test_functionWithoutCall_indirect_extends() async {
     Source source = addSource(r'''
 abstract class A implements Function {
 }
 class B extends A {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.FUNCTION_WITHOUT_CALL]);
     verify([source]);
   }
 
-  void test_functionWithoutCall_indirect_implements() {
+  test_functionWithoutCall_indirect_implements() async {
     Source source = addSource(r'''
 abstract class A implements Function {
 }
 class B implements A {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.FUNCTION_WITHOUT_CALL]);
     verify([source]);
   }
 
-  void test_importDuplicatedLibraryNamed() {
+  test_importDuplicatedLibraryNamed() async {
     Source source = addSource(r'''
 library test;
 import 'lib1.dart';
 import 'lib2.dart';''');
     addNamedSource("/lib1.dart", "library lib;");
     addNamedSource("/lib2.dart", "library lib;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.IMPORT_DUPLICATED_LIBRARY_NAMED,
       HintCode.UNUSED_IMPORT,
@@ -1511,8 +1508,8 @@
     verify([source]);
   }
 
-  void test_importOfNonLibrary() {
-    resolveWithErrors(<String>[
+  test_importOfNonLibrary() async {
+    await resolveWithErrors(<String>[
       r'''
 part of lib;
 class A {}''',
@@ -1525,7 +1522,7 @@
     ]);
   }
 
-  void test_inconsistentMethodInheritanceGetterAndMethod() {
+  test_inconsistentMethodInheritanceGetterAndMethod() async {
     Source source = addSource(r'''
 abstract class A {
   int x();
@@ -1535,13 +1532,13 @@
 }
 class C implements A, B {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD]);
     verify([source]);
   }
 
-  void test_instanceMethodNameCollidesWithSuperclassStatic_field() {
+  test_instanceMethodNameCollidesWithSuperclassStatic_field() async {
     Source source = addSource(r'''
 class A {
   static var n;
@@ -1549,14 +1546,14 @@
 class B extends A {
   void n() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
     ]);
     verify([source]);
   }
 
-  void test_instanceMethodNameCollidesWithSuperclassStatic_field2() {
+  test_instanceMethodNameCollidesWithSuperclassStatic_field2() async {
     Source source = addSource(r'''
 class A {
   static var n;
@@ -1566,14 +1563,14 @@
 class C extends B {
   void n() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
     ]);
     verify([source]);
   }
 
-  void test_instanceMethodNameCollidesWithSuperclassStatic_getter() {
+  test_instanceMethodNameCollidesWithSuperclassStatic_getter() async {
     Source source = addSource(r'''
 class A {
   static get n {return 0;}
@@ -1581,14 +1578,14 @@
 class B extends A {
   void n() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
     ]);
     verify([source]);
   }
 
-  void test_instanceMethodNameCollidesWithSuperclassStatic_getter2() {
+  test_instanceMethodNameCollidesWithSuperclassStatic_getter2() async {
     Source source = addSource(r'''
 class A {
   static get n {return 0;}
@@ -1598,14 +1595,14 @@
 class C extends B {
   void n() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
     ]);
     verify([source]);
   }
 
-  void test_instanceMethodNameCollidesWithSuperclassStatic_interface() {
+  test_instanceMethodNameCollidesWithSuperclassStatic_interface() async {
     Source source = addSource(r'''
 class Base {
   static foo() {}
@@ -1617,14 +1614,14 @@
   foo() {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
     ]);
     verify([source]);
   }
 
-  void test_instanceMethodNameCollidesWithSuperclassStatic_method() {
+  test_instanceMethodNameCollidesWithSuperclassStatic_method() async {
     Source source = addSource(r'''
 class A {
   static n () {}
@@ -1632,14 +1629,14 @@
 class B extends A {
   void n() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
     ]);
     verify([source]);
   }
 
-  void test_instanceMethodNameCollidesWithSuperclassStatic_method2() {
+  test_instanceMethodNameCollidesWithSuperclassStatic_method2() async {
     Source source = addSource(r'''
 class A {
   static n () {}
@@ -1649,14 +1646,14 @@
 class C extends B {
   void n() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
     ]);
     verify([source]);
   }
 
-  void test_instanceMethodNameCollidesWithSuperclassStatic_setter() {
+  test_instanceMethodNameCollidesWithSuperclassStatic_setter() async {
     Source source = addSource(r'''
 class A {
   static set n(int x) {}
@@ -1664,14 +1661,14 @@
 class B extends A {
   void n() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
     ]);
     verify([source]);
   }
 
-  void test_instanceMethodNameCollidesWithSuperclassStatic_setter2() {
+  test_instanceMethodNameCollidesWithSuperclassStatic_setter2() async {
     Source source = addSource(r'''
 class A {
   static set n(int x) {}
@@ -1681,14 +1678,14 @@
 class C extends B {
   void n() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
     ]);
     verify([source]);
   }
 
-  void test_invalidGetterOverrideReturnType() {
+  test_invalidGetterOverrideReturnType() async {
     Source source = addSource(r'''
 class A {
   int get g { return 0; }
@@ -1696,13 +1693,13 @@
 class B extends A {
   String get g { return 'a'; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE]);
     verify([source]);
   }
 
-  void test_invalidGetterOverrideReturnType_implicit() {
+  test_invalidGetterOverrideReturnType_implicit() async {
     Source source = addSource(r'''
 class A {
   String f;
@@ -1710,7 +1707,7 @@
 class B extends A {
   int f;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE,
       StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE
@@ -1718,7 +1715,7 @@
     verify([source]);
   }
 
-  void test_invalidGetterOverrideReturnType_twoInterfaces() {
+  test_invalidGetterOverrideReturnType_twoInterfaces() async {
     // test from language/override_inheritance_field_test_11.dart
     Source source = addSource(r'''
 abstract class I {
@@ -1731,13 +1728,13 @@
 class B extends A {
   String get getter => null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE]);
     verify([source]);
   }
 
-  void test_invalidGetterOverrideReturnType_twoInterfaces_conflicting() {
+  test_invalidGetterOverrideReturnType_twoInterfaces_conflicting() async {
     Source source = addSource(r'''
 abstract class I<U> {
   U get g => null;
@@ -1748,13 +1745,13 @@
 class B implements I<int>, J<String> {
   double get g => null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE]);
     verify([source]);
   }
 
-  void test_invalidMethodOverrideNamedParamType() {
+  test_invalidMethodOverrideNamedParamType() async {
     Source source = addSource(r'''
 class A {
   m({int a}) {}
@@ -1762,13 +1759,13 @@
 class B implements A {
   m({String a}) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NAMED_PARAM_TYPE]);
     verify([source]);
   }
 
-  void test_invalidMethodOverrideNormalParamType_interface() {
+  test_invalidMethodOverrideNormalParamType_interface() async {
     Source source = addSource(r'''
 class A {
   m(int a) {}
@@ -1776,13 +1773,13 @@
 class B implements A {
   m(String a) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE]);
     verify([source]);
   }
 
-  void test_invalidMethodOverrideNormalParamType_superclass() {
+  test_invalidMethodOverrideNormalParamType_superclass() async {
     Source source = addSource(r'''
 class A {
   m(int a) {}
@@ -1790,13 +1787,13 @@
 class B extends A {
   m(String a) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE]);
     verify([source]);
   }
 
-  void test_invalidMethodOverrideNormalParamType_superclass_interface() {
+  test_invalidMethodOverrideNormalParamType_superclass_interface() async {
     Source source = addSource(r'''
 abstract class I<U> {
   m(U u) => null;
@@ -1807,13 +1804,13 @@
 class B extends I<int> implements J<String> {
   m(double d) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE]);
     verify([source]);
   }
 
-  void test_invalidMethodOverrideNormalParamType_twoInterfaces() {
+  test_invalidMethodOverrideNormalParamType_twoInterfaces() async {
     Source source = addSource(r'''
 abstract class I {
   m(int n);
@@ -1825,13 +1822,13 @@
 class B extends A {
   m(String n) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE]);
     verify([source]);
   }
 
-  void test_invalidMethodOverrideNormalParamType_twoInterfaces_conflicting() {
+  test_invalidMethodOverrideNormalParamType_twoInterfaces_conflicting() async {
     // language/override_inheritance_generic_test/08
     Source source = addSource(r'''
 abstract class I<U> {
@@ -1843,13 +1840,13 @@
 class B implements I<int>, J<String> {
   m(double d) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE]);
     verify([source]);
   }
 
-  void test_invalidMethodOverrideOptionalParamType() {
+  test_invalidMethodOverrideOptionalParamType() async {
     Source source = addSource(r'''
 class A {
   m([int a]) {}
@@ -1857,13 +1854,13 @@
 class B implements A {
   m([String a]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE]);
     verify([source]);
   }
 
-  void test_invalidMethodOverrideOptionalParamType_twoInterfaces() {
+  test_invalidMethodOverrideOptionalParamType_twoInterfaces() async {
     Source source = addSource(r'''
 abstract class I {
   m([int n]);
@@ -1875,13 +1872,13 @@
 class B extends A {
   m([String n]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE]);
     verify([source]);
   }
 
-  void test_invalidMethodOverrideReturnType_interface() {
+  test_invalidMethodOverrideReturnType_interface() async {
     Source source = addSource(r'''
 class A {
   int m() { return 0; }
@@ -1889,13 +1886,13 @@
 class B implements A {
   String m() { return 'a'; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
     verify([source]);
   }
 
-  void test_invalidMethodOverrideReturnType_interface_grandparent() {
+  test_invalidMethodOverrideReturnType_interface_grandparent() async {
     Source source = addSource(r'''
 abstract class A {
   int m();
@@ -1905,13 +1902,13 @@
 class C implements B {
   String m() { return 'a'; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
     verify([source]);
   }
 
-  void test_invalidMethodOverrideReturnType_mixin() {
+  test_invalidMethodOverrideReturnType_mixin() async {
     Source source = addSource(r'''
 class A {
   int m() { return 0; }
@@ -1919,13 +1916,13 @@
 class B extends Object with A {
   String m() { return 'a'; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
     verify([source]);
   }
 
-  void test_invalidMethodOverrideReturnType_superclass() {
+  test_invalidMethodOverrideReturnType_superclass() async {
     Source source = addSource(r'''
 class A {
   int m() { return 0; }
@@ -1933,13 +1930,13 @@
 class B extends A {
   String m() { return 'a'; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
     verify([source]);
   }
 
-  void test_invalidMethodOverrideReturnType_superclass_grandparent() {
+  test_invalidMethodOverrideReturnType_superclass_grandparent() async {
     Source source = addSource(r'''
 class A {
   int m() { return 0; }
@@ -1949,13 +1946,13 @@
 class C extends B {
   String m() { return 'a'; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
     verify([source]);
   }
 
-  void test_invalidMethodOverrideReturnType_twoInterfaces() {
+  test_invalidMethodOverrideReturnType_twoInterfaces() async {
     Source source = addSource(r'''
 abstract class I {
   int m();
@@ -1967,13 +1964,13 @@
 class B extends A {
   String m() => '';
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
     verify([source]);
   }
 
-  void test_invalidMethodOverrideReturnType_void() {
+  test_invalidMethodOverrideReturnType_void() async {
     Source source = addSource(r'''
 class A {
   int m() { return 0; }
@@ -1981,13 +1978,13 @@
 class B extends A {
   void m() {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
     verify([source]);
   }
 
-  void test_invalidOverride_defaultOverridesNonDefault() {
+  test_invalidOverride_defaultOverridesNonDefault() async {
     // If the base class provided an explicit value for a default parameter,
     // then it is a static warning for the derived class to provide a different
     // value, even if implicitly.
@@ -1999,14 +1996,14 @@
   foo([x]) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL
     ]);
     verify([source]);
   }
 
-  void test_invalidOverride_defaultOverridesNonDefault_named() {
+  test_invalidOverride_defaultOverridesNonDefault_named() async {
     // If the base class provided an explicit value for a default parameter,
     // then it is a static warning for the derived class to provide a different
     // value, even if implicitly.
@@ -2018,13 +2015,13 @@
   foo({x}) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED]);
     verify([source]);
   }
 
-  void test_invalidOverride_defaultOverridesNonDefaultNull() {
+  test_invalidOverride_defaultOverridesNonDefaultNull() async {
     // If the base class provided an explicit null value for a default
     // parameter, then it is ok for the derived class to let the default value
     // be implicit, because the implicit default value of null matches the
@@ -2037,12 +2034,12 @@
   foo([x]) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverride_defaultOverridesNonDefaultNull_named() {
+  test_invalidOverride_defaultOverridesNonDefaultNull_named() async {
     // If the base class provided an explicit null value for a default
     // parameter, then it is ok for the derived class to let the default value
     // be implicit, because the implicit default value of null matches the
@@ -2055,12 +2052,12 @@
   foo({x}) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverride_nonDefaultOverridesDefault() {
+  test_invalidOverride_nonDefaultOverridesDefault() async {
     // If the base class lets the default parameter be implicit, then it is ok
     // for the derived class to provide an explicit default value, even if it's
     // not null.
@@ -2072,12 +2069,12 @@
   foo([x = 1]) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverride_nonDefaultOverridesDefault_named() {
+  test_invalidOverride_nonDefaultOverridesDefault_named() async {
     // If the base class lets the default parameter be implicit, then it is ok
     // for the derived class to provide an explicit default value, even if it's
     // not null.
@@ -2089,12 +2086,12 @@
   foo({x: 1}) {}
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_invalidOverrideDifferentDefaultValues_named() {
+  test_invalidOverrideDifferentDefaultValues_named() async {
     Source source = addSource(r'''
 class A {
   m({int p : 0}) {}
@@ -2102,13 +2099,13 @@
 class B extends A {
   m({int p : 1}) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED]);
     verify([source]);
   }
 
-  void test_invalidOverrideDifferentDefaultValues_positional() {
+  test_invalidOverrideDifferentDefaultValues_positional() async {
     Source source = addSource(r'''
 class A {
   m([int p = 0]) {}
@@ -2116,14 +2113,14 @@
 class B extends A {
   m([int p = 1]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL
     ]);
     verify([source]);
   }
 
-  void test_invalidOverrideNamed_fewerNamedParameters() {
+  test_invalidOverrideNamed_fewerNamedParameters() async {
     Source source = addSource(r'''
 class A {
   m({a, b}) {}
@@ -2131,12 +2128,12 @@
 class B extends A {
   m({a}) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_NAMED]);
     verify([source]);
   }
 
-  void test_invalidOverrideNamed_missingNamedParameter() {
+  test_invalidOverrideNamed_missingNamedParameter() async {
     Source source = addSource(r'''
 class A {
   m({a, b}) {}
@@ -2144,12 +2141,12 @@
 class B extends A {
   m({a, c}) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_NAMED]);
     verify([source]);
   }
 
-  void test_invalidOverridePositional_optional() {
+  test_invalidOverridePositional_optional() async {
     Source source = addSource(r'''
 class A {
   m([a, b]) {}
@@ -2157,12 +2154,12 @@
 class B extends A {
   m([a]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_POSITIONAL]);
     verify([source]);
   }
 
-  void test_invalidOverridePositional_optionalAndRequired() {
+  test_invalidOverridePositional_optionalAndRequired() async {
     Source source = addSource(r'''
 class A {
   m(a, b, [c, d]) {}
@@ -2170,12 +2167,12 @@
 class B extends A {
   m(a, b, [c]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_POSITIONAL]);
     verify([source]);
   }
 
-  void test_invalidOverridePositional_optionalAndRequired2() {
+  test_invalidOverridePositional_optionalAndRequired2() async {
     Source source = addSource(r'''
 class A {
   m(a, b, [c, d]) {}
@@ -2183,12 +2180,12 @@
 class B extends A {
   m(a, [c, d]) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_POSITIONAL]);
     verify([source]);
   }
 
-  void test_invalidOverrideRequired() {
+  test_invalidOverrideRequired() async {
     Source source = addSource(r'''
 class A {
   m(a) {}
@@ -2196,12 +2193,12 @@
 class B extends A {
   m(a, b) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_REQUIRED]);
     verify([source]);
   }
 
-  void test_invalidSetterOverrideNormalParamType() {
+  test_invalidSetterOverrideNormalParamType() async {
     Source source = addSource(r'''
 class A {
   void set s(int v) {}
@@ -2209,13 +2206,13 @@
 class B extends A {
   void set s(String v) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE]);
     verify([source]);
   }
 
-  void test_invalidSetterOverrideNormalParamType_superclass_interface() {
+  test_invalidSetterOverrideNormalParamType_superclass_interface() async {
     Source source = addSource(r'''
 abstract class I {
   set setter14(int _) => null;
@@ -2227,13 +2224,13 @@
 class B extends A {
   set setter14(String _) => null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE]);
     verify([source]);
   }
 
-  void test_invalidSetterOverrideNormalParamType_twoInterfaces() {
+  test_invalidSetterOverrideNormalParamType_twoInterfaces() async {
     // test from language/override_inheritance_field_test_34.dart
     Source source = addSource(r'''
 abstract class I {
@@ -2246,13 +2243,13 @@
 class B extends A {
   set setter14(String _) => null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE]);
     verify([source]);
   }
 
-  void test_invalidSetterOverrideNormalParamType_twoInterfaces_conflicting() {
+  test_invalidSetterOverrideNormalParamType_twoInterfaces_conflicting() async {
     Source source = addSource(r'''
 abstract class I<U> {
   set s(U u) {}
@@ -2263,46 +2260,46 @@
 class B implements I<int>, J<String> {
   set s(double d) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE]);
     verify([source]);
   }
 
-  void test_listElementTypeNotAssignable() {
+  test_listElementTypeNotAssignable() async {
     Source source = addSource("var v = <String> [42];");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_mapKeyTypeNotAssignable() {
+  test_mapKeyTypeNotAssignable() async {
     Source source = addSource("var v = <String, int > {1 : 2};");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_mapValueTypeNotAssignable() {
+  test_mapValueTypeNotAssignable() async {
     Source source = addSource("var v = <String, String> {'a' : 2};");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_mismatchedAccessorTypes_class() {
+  test_mismatchedAccessorTypes_class() async {
     Source source = addSource(r'''
 class A {
   int get g { return 0; }
   set g(String v) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES]);
     verify([source]);
   }
 
-  void test_mismatchedAccessorTypes_getterAndSuperSetter() {
+  test_mismatchedAccessorTypes_getterAndSuperSetter() async {
     Source source = addSource(r'''
 class A {
   int get g { return 0; }
@@ -2310,13 +2307,13 @@
 class B extends A {
   set g(String v) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE]);
     verify([source]);
   }
 
-  void test_mismatchedAccessorTypes_setterAndSuperGetter() {
+  test_mismatchedAccessorTypes_setterAndSuperGetter() async {
     Source source = addSource(r'''
 class A {
   set g(int v) {}
@@ -2324,23 +2321,23 @@
 class B extends A {
   String get g { return ''; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE]);
     verify([source]);
   }
 
-  void test_mismatchedAccessorTypes_topLevel() {
+  test_mismatchedAccessorTypes_topLevel() async {
     Source source = addSource(r'''
 int get g { return 0; }
 set g(String v) {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES]);
     verify([source]);
   }
 
-  void test_missingEnumConstantInSwitch() {
+  test_missingEnumConstantInSwitch() async {
     Source source = addSource(r'''
 enum E { ONE, TWO, THREE, FOUR }
 bool odd(E e) {
@@ -2350,7 +2347,7 @@
   }
   return false;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH,
       StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH
@@ -2358,7 +2355,7 @@
     verify([source]);
   }
 
-  void test_mixedReturnTypes_localFunction() {
+  test_mixedReturnTypes_localFunction() async {
     Source source = addSource(r'''
 class C {
   m(int x) {
@@ -2370,7 +2367,7 @@
     };
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.MIXED_RETURN_TYPES,
       StaticWarningCode.MIXED_RETURN_TYPES
@@ -2378,7 +2375,7 @@
     verify([source]);
   }
 
-  void test_mixedReturnTypes_method() {
+  test_mixedReturnTypes_method() async {
     Source source = addSource(r'''
 class C {
   m(int x) {
@@ -2388,7 +2385,7 @@
     return 0;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.MIXED_RETURN_TYPES,
       StaticWarningCode.MIXED_RETURN_TYPES
@@ -2396,7 +2393,7 @@
     verify([source]);
   }
 
-  void test_mixedReturnTypes_topLevelFunction() {
+  test_mixedReturnTypes_topLevelFunction() async {
     Source source = addSource(r'''
 f(int x) {
   if (x < 0) {
@@ -2404,7 +2401,7 @@
   }
   return 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.MIXED_RETURN_TYPES,
       StaticWarningCode.MIXED_RETURN_TYPES
@@ -2412,62 +2409,62 @@
     verify([source]);
   }
 
-  void test_newWithAbstractClass() {
+  test_newWithAbstractClass() async {
     Source source = addSource(r'''
 abstract class A {}
 void f() {
   A a = new A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.NEW_WITH_ABSTRACT_CLASS]);
     verify([source]);
   }
 
-  void test_newWithInvalidTypeParameters() {
+  test_newWithInvalidTypeParameters() async {
     Source source = addSource(r'''
 class A {}
 f() { return new A<A>(); }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.NEW_WITH_INVALID_TYPE_PARAMETERS]);
     verify([source]);
   }
 
-  void test_newWithInvalidTypeParameters_tooFew() {
+  test_newWithInvalidTypeParameters_tooFew() async {
     Source source = addSource(r'''
 class A {}
 class C<K, V> {}
 f(p) {
   return new C<A>();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.NEW_WITH_INVALID_TYPE_PARAMETERS]);
     verify([source]);
   }
 
-  void test_newWithInvalidTypeParameters_tooMany() {
+  test_newWithInvalidTypeParameters_tooMany() async {
     Source source = addSource(r'''
 class A {}
 class C<E> {}
 f(p) {
   return new C<A, A>();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.NEW_WITH_INVALID_TYPE_PARAMETERS]);
     verify([source]);
   }
 
-  void test_newWithNonType() {
+  test_newWithNonType() async {
     Source source = addSource(r'''
 var A = 0;
 void f() {
   var a = new A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.NEW_WITH_NON_TYPE]);
     verify([source]);
   }
 
-  void test_newWithNonType_fromLibrary() {
+  test_newWithNonType_fromLibrary() async {
     Source source1 = addNamedSource("/lib.dart", "class B {}");
     Source source2 = addNamedSource(
         "/lib2.dart",
@@ -2477,13 +2474,13 @@
   var a = new lib.A();
 }
 lib.B b;''');
-    computeLibrarySourceErrors(source1);
-    computeLibrarySourceErrors(source2);
+    await computeAnalysisResult(source1);
+    await computeAnalysisResult(source2);
     assertErrors(source2, [StaticWarningCode.NEW_WITH_NON_TYPE]);
     verify([source1]);
   }
 
-  void test_newWithUndefinedConstructor() {
+  test_newWithUndefinedConstructor() async {
     Source source = addSource(r'''
 class A {
   A() {}
@@ -2491,12 +2488,12 @@
 f() {
   new A.name();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR]);
     // no verify(), 'name' is not resolved
   }
 
-  void test_newWithUndefinedConstructorDefault() {
+  test_newWithUndefinedConstructorDefault() async {
     Source source = addSource(r'''
 class A {
   A.name() {}
@@ -2504,13 +2501,13 @@
 f() {
   new A();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT]);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberFivePlus() {
+  test_nonAbstractClassInheritsAbstractMemberFivePlus() async {
     Source source = addSource(r'''
 abstract class A {
   m();
@@ -2521,14 +2518,14 @@
 }
 class C extends A {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS
     ]);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberFour() {
+  test_nonAbstractClassInheritsAbstractMemberFour() async {
     Source source = addSource(r'''
 abstract class A {
   m();
@@ -2538,14 +2535,13 @@
 }
 class C extends A {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR]);
     verify([source]);
   }
 
-  void
-      test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_interface() {
+  test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_interface() async {
     // 15979
     Source source = addSource(r'''
 abstract class M {}
@@ -2554,13 +2550,13 @@
   m();
 }
 class B = A with M implements I;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_mixin() {
+  test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_mixin() async {
     // 15979
     Source source = addSource(r'''
 abstract class M {
@@ -2568,14 +2564,13 @@
 }
 abstract class A {}
 class B = A with M;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
-  void
-      test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_superclass() {
+  test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_superclass() async {
     // 15979
     Source source = addSource(r'''
 class M {}
@@ -2583,14 +2578,13 @@
   m();
 }
 class B = A with M;''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
-  void
-      test_nonAbstractClassInheritsAbstractMemberOne_ensureCorrectFunctionSubtypeIsUsedInImplementation() {
+  test_nonAbstractClassInheritsAbstractMemberOne_ensureCorrectFunctionSubtypeIsUsedInImplementation() async {
     // 15028
     Source source = addSource(r'''
 class C {
@@ -2600,66 +2594,65 @@
   foo(x, [y]);
 }
 class E extends C implements D {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_getter_fromInterface() {
+  test_nonAbstractClassInheritsAbstractMemberOne_getter_fromInterface() async {
     Source source = addSource(r'''
 class I {
   int get g {return 1;}
 }
 class C implements I {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_getter_fromSuperclass() {
+  test_nonAbstractClassInheritsAbstractMemberOne_getter_fromSuperclass() async {
     Source source = addSource(r'''
 abstract class A {
   int get g;
 }
 class C extends A {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_method_fromInterface() {
+  test_nonAbstractClassInheritsAbstractMemberOne_method_fromInterface() async {
     Source source = addSource(r'''
 class I {
   m(p) {}
 }
 class C implements I {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_method_fromSuperclass() {
+  test_nonAbstractClassInheritsAbstractMemberOne_method_fromSuperclass() async {
     Source source = addSource(r'''
 abstract class A {
   m(p);
 }
 class C extends A {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
-  void
-      test_nonAbstractClassInheritsAbstractMemberOne_method_optionalParamCount() {
+  test_nonAbstractClassInheritsAbstractMemberOne_method_optionalParamCount() async {
     // 7640
     Source source = addSource(r'''
 abstract class A {
@@ -2670,46 +2663,46 @@
 }
 class C implements A, B {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_mixinInherits_getter() {
+  test_nonAbstractClassInheritsAbstractMemberOne_mixinInherits_getter() async {
     // 15001
     Source source = addSource(r'''
 abstract class A { get g1; get g2; }
 abstract class B implements A { get g1 => 1; }
 class C extends Object with B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_mixinInherits_method() {
+  test_nonAbstractClassInheritsAbstractMemberOne_mixinInherits_method() async {
     // 15001
     Source source = addSource(r'''
 abstract class A { m1(); m2(); }
 abstract class B implements A { m1() => 1; }
 class C extends Object with B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_mixinInherits_setter() {
+  test_nonAbstractClassInheritsAbstractMemberOne_mixinInherits_setter() async {
     // 15001
     Source source = addSource(r'''
 abstract class A { set s1(v); set s2(v); }
 abstract class B implements A { set s1(v) {} }
 class C extends Object with B {}''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_interface() {
+  test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_interface() async {
     // 15979
     Source source = addSource(r'''
 class I {
@@ -2720,14 +2713,13 @@
 }
 class B extends A implements I {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
-  void
-      test_nonAbstractClassInheritsAbstractMemberOne_setter_and_implicitSetter() {
+  test_nonAbstractClassInheritsAbstractMemberOne_setter_and_implicitSetter() async {
     // test from language/override_inheritance_abstract_test_14.dart
     Source source = addSource(r'''
 abstract class A {
@@ -2739,39 +2731,39 @@
 class B extends A implements I {
   get field => 0;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_setter_fromInterface() {
+  test_nonAbstractClassInheritsAbstractMemberOne_setter_fromInterface() async {
     Source source = addSource(r'''
 class I {
   set s(int i) {}
 }
 class C implements I {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_setter_fromSuperclass() {
+  test_nonAbstractClassInheritsAbstractMemberOne_setter_fromSuperclass() async {
     Source source = addSource(r'''
 abstract class A {
   set s(int i);
 }
 class C extends A {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberOne_superclasses_interface() {
+  test_nonAbstractClassInheritsAbstractMemberOne_superclasses_interface() async {
     // bug 11154
     Source source = addSource(r'''
 class A {
@@ -2782,14 +2774,13 @@
 }
 class C extends B {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
-  void
-      test_nonAbstractClassInheritsAbstractMemberOne_variable_fromInterface_missingGetter() {
+  test_nonAbstractClassInheritsAbstractMemberOne_variable_fromInterface_missingGetter() async {
     // 16133
     Source source = addSource(r'''
 class I {
@@ -2798,14 +2789,13 @@
 class C implements I {
   set v(_) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
-  void
-      test_nonAbstractClassInheritsAbstractMemberOne_variable_fromInterface_missingSetter() {
+  test_nonAbstractClassInheritsAbstractMemberOne_variable_fromInterface_missingSetter() async {
     // 16133
     Source source = addSource(r'''
 class I {
@@ -2814,13 +2804,13 @@
 class C implements I {
   get v => 1;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberThree() {
+  test_nonAbstractClassInheritsAbstractMemberThree() async {
     Source source = addSource(r'''
 abstract class A {
   m();
@@ -2829,13 +2819,13 @@
 }
 class C extends A {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE]);
     verify([source]);
   }
 
-  void test_nonAbstractClassInheritsAbstractMemberTwo() {
+  test_nonAbstractClassInheritsAbstractMemberTwo() async {
     Source source = addSource(r'''
 abstract class A {
   m();
@@ -2843,14 +2833,13 @@
 }
 class C extends A {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO]);
     verify([source]);
   }
 
-  void
-      test_nonAbstractClassInheritsAbstractMemberTwo_variable_fromInterface_missingBoth() {
+  test_nonAbstractClassInheritsAbstractMemberTwo_variable_fromInterface_missingBoth() async {
     // 16133
     Source source = addSource(r'''
 class I {
@@ -2858,16 +2847,15 @@
 }
 class C implements I {
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO]);
     verify([source]);
   }
 
-  void
-      test_nonAbstractClassInheritsAbstractMemberTwo_variable_fromMixin_missingBoth() {
+  test_nonAbstractClassInheritsAbstractMemberTwo_variable_fromMixin_missingBoth() async {
     // 26411
-    resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
+    resetWith(options: new AnalysisOptionsImpl()..enableSuperMixins = true);
     Source source = addSource(r'''
 class A {
   int f;
@@ -2875,25 +2863,25 @@
 class B extends A {}
 class C extends Object with B {}
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source,
         [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO]);
     verify([source]);
   }
 
-  void test_nonTypeInCatchClause_noElement() {
+  test_nonTypeInCatchClause_noElement() async {
     Source source = addSource(r'''
 f() {
   try {
   } on T catch (e) {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE]);
     verify([source]);
   }
 
-  void test_nonTypeInCatchClause_notType() {
+  test_nonTypeInCatchClause_notType() async {
     Source source = addSource(r'''
 var T = 0;
 f() {
@@ -2901,98 +2889,98 @@
   } on T catch (e) {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE]);
     verify([source]);
   }
 
-  void test_nonVoidReturnForOperator() {
+  test_nonVoidReturnForOperator() async {
     Source source = addSource(r'''
 class A {
   int operator []=(a, b) { return a; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.NON_VOID_RETURN_FOR_OPERATOR]);
     verify([source]);
   }
 
-  void test_nonVoidReturnForSetter_function() {
+  test_nonVoidReturnForSetter_function() async {
     Source source = addSource(r'''
 int set x(int v) {
   return 42;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.NON_VOID_RETURN_FOR_SETTER]);
     verify([source]);
   }
 
-  void test_nonVoidReturnForSetter_method() {
+  test_nonVoidReturnForSetter_method() async {
     Source source = addSource(r'''
 class A {
   int set x(int v) {
     return 42;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.NON_VOID_RETURN_FOR_SETTER]);
     verify([source]);
   }
 
-  void test_notAType() {
+  test_notAType() async {
     Source source = addSource(r'''
 f() {}
 main() {
   f v = null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.NOT_A_TYPE]);
     verify([source]);
   }
 
-  void test_notEnoughRequiredArguments() {
+  test_notEnoughRequiredArguments() async {
     Source source = addSource(r'''
 f(int a, String b) {}
 main() {
   f();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]);
     verify([source]);
   }
 
-  void test_notEnoughRequiredArguments_functionExpression() {
+  test_notEnoughRequiredArguments_functionExpression() async {
     Source source = addSource(r'''
 main() {
   (int x) {} ();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]);
     verify([source]);
   }
 
-  void test_notEnoughRequiredArguments_getterReturningFunction() {
+  test_notEnoughRequiredArguments_getterReturningFunction() async {
     Source source = addSource(r'''
 typedef Getter(self);
 Getter getter = (x) => x;
 main() {
   getter();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]);
     verify([source]);
   }
 
-  void test_partOfDifferentLibrary() {
+  test_partOfDifferentLibrary() async {
     Source source = addSource(r'''
 library lib;
 part 'part.dart';''');
     addNamedSource("/part.dart", "part of lub;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.PART_OF_DIFFERENT_LIBRARY]);
     verify([source]);
   }
 
-  void test_redirectToInvalidFunctionType() {
+  test_redirectToInvalidFunctionType() async {
     Source source = addSource(r'''
 class A implements B {
   A(int p) {}
@@ -3000,12 +2988,12 @@
 class B {
   factory B() = A;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.REDIRECT_TO_INVALID_FUNCTION_TYPE]);
     verify([source]);
   }
 
-  void test_redirectToInvalidReturnType() {
+  test_redirectToInvalidReturnType() async {
     Source source = addSource(r'''
 class A {
   A() {}
@@ -3013,12 +3001,12 @@
 class B {
   factory B() = A;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.REDIRECT_TO_INVALID_RETURN_TYPE]);
     verify([source]);
   }
 
-  void test_redirectToMissingConstructor_named() {
+  test_redirectToMissingConstructor_named() async {
     Source source = addSource(r'''
 class A implements B{
   A() {}
@@ -3026,11 +3014,11 @@
 class B {
   factory B() = A.name;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.REDIRECT_TO_MISSING_CONSTRUCTOR]);
   }
 
-  void test_redirectToMissingConstructor_unnamed() {
+  test_redirectToMissingConstructor_unnamed() async {
     Source source = addSource(r'''
 class A implements B{
   A.name() {}
@@ -3038,65 +3026,65 @@
 class B {
   factory B() = A;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.REDIRECT_TO_MISSING_CONSTRUCTOR]);
   }
 
-  void test_redirectToNonClass_notAType() {
+  test_redirectToNonClass_notAType() async {
     Source source = addSource(r'''
 class B {
   int A;
   factory B() = A;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.REDIRECT_TO_NON_CLASS]);
     verify([source]);
   }
 
-  void test_redirectToNonClass_undefinedIdentifier() {
+  test_redirectToNonClass_undefinedIdentifier() async {
     Source source = addSource(r'''
 class B {
   factory B() = A;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.REDIRECT_TO_NON_CLASS]);
     verify([source]);
   }
 
-  void test_returnWithoutValue_async() {
+  test_returnWithoutValue_async() async {
     Source source = addSource('''
 import 'dart:async';
 Future<int> f() async {
   return;
 }
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.RETURN_WITHOUT_VALUE]);
     verify([source]);
   }
 
-  void test_returnWithoutValue_factoryConstructor() {
+  test_returnWithoutValue_factoryConstructor() async {
     Source source = addSource("class A { factory A() { return; } }");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.RETURN_WITHOUT_VALUE]);
     verify([source]);
   }
 
-  void test_returnWithoutValue_function() {
+  test_returnWithoutValue_function() async {
     Source source = addSource("int f() { return; }");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.RETURN_WITHOUT_VALUE]);
     verify([source]);
   }
 
-  void test_returnWithoutValue_method() {
+  test_returnWithoutValue_method() async {
     Source source = addSource("class A { int m() { return; } }");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.RETURN_WITHOUT_VALUE]);
     verify([source]);
   }
 
-  void test_returnWithoutValue_mixedReturnTypes_function() {
+  test_returnWithoutValue_mixedReturnTypes_function() async {
     // Tests that only the RETURN_WITHOUT_VALUE warning is created, and no
     // MIXED_RETURN_TYPES are created.
     Source source = addSource(r'''
@@ -3106,12 +3094,12 @@
   }
   return;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.RETURN_WITHOUT_VALUE]);
     verify([source]);
   }
 
-  void test_staticAccessToInstanceMember_method_invocation() {
+  test_staticAccessToInstanceMember_method_invocation() async {
     Source source = addSource(r'''
 class A {
   m() {}
@@ -3119,12 +3107,12 @@
 main() {
   A.m();
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]);
     verify([source]);
   }
 
-  void test_staticAccessToInstanceMember_method_reference() {
+  test_staticAccessToInstanceMember_method_reference() async {
     Source source = addSource(r'''
 class A {
   m() {}
@@ -3132,12 +3120,12 @@
 main() {
   A.m;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]);
     verify([source]);
   }
 
-  void test_staticAccessToInstanceMember_propertyAccess_field() {
+  test_staticAccessToInstanceMember_propertyAccess_field() async {
     Source source = addSource(r'''
 class A {
   var f;
@@ -3145,12 +3133,12 @@
 main() {
   A.f;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]);
     verify([source]);
   }
 
-  void test_staticAccessToInstanceMember_propertyAccess_getter() {
+  test_staticAccessToInstanceMember_propertyAccess_getter() async {
     Source source = addSource(r'''
 class A {
   get f => 42;
@@ -3158,12 +3146,12 @@
 main() {
   A.f;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]);
     verify([source]);
   }
 
-  void test_staticAccessToInstanceMember_propertyAccess_setter() {
+  test_staticAccessToInstanceMember_propertyAccess_setter() async {
     Source source = addSource(r'''
 class A {
   set f(x) {}
@@ -3171,25 +3159,25 @@
 main() {
   A.f = 42;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]);
     verify([source]);
   }
 
-  void test_switchExpressionNotAssignable() {
+  test_switchExpressionNotAssignable() async {
     Source source = addSource(r'''
 f(int p) {
   switch (p) {
     case 'a': break;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
-  void test_typeAnnotationDeferredClass_asExpression() {
-    resolveWithErrors(<String>[
+  test_typeAnnotationDeferredClass_asExpression() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -3204,8 +3192,8 @@
     ]);
   }
 
-  void test_typeAnnotationDeferredClass_catchClause() {
-    resolveWithErrors(<String>[
+  test_typeAnnotationDeferredClass_catchClause() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -3222,8 +3210,8 @@
     ]);
   }
 
-  void test_typeAnnotationDeferredClass_fieldFormalParameter() {
-    resolveWithErrors(<String>[
+  test_typeAnnotationDeferredClass_fieldFormalParameter() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -3239,8 +3227,8 @@
     ]);
   }
 
-  void test_typeAnnotationDeferredClass_functionDeclaration_returnType() {
-    resolveWithErrors(<String>[
+  test_typeAnnotationDeferredClass_functionDeclaration_returnType() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -3253,9 +3241,8 @@
     ]);
   }
 
-  void
-      test_typeAnnotationDeferredClass_functionTypedFormalParameter_returnType() {
-    resolveWithErrors(<String>[
+  test_typeAnnotationDeferredClass_functionTypedFormalParameter_returnType() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -3268,8 +3255,8 @@
     ]);
   }
 
-  void test_typeAnnotationDeferredClass_isExpression() {
-    resolveWithErrors(<String>[
+  test_typeAnnotationDeferredClass_isExpression() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -3284,8 +3271,8 @@
     ]);
   }
 
-  void test_typeAnnotationDeferredClass_methodDeclaration_returnType() {
-    resolveWithErrors(<String>[
+  test_typeAnnotationDeferredClass_methodDeclaration_returnType() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -3300,8 +3287,8 @@
     ]);
   }
 
-  void test_typeAnnotationDeferredClass_simpleFormalParameter() {
-    resolveWithErrors(<String>[
+  test_typeAnnotationDeferredClass_simpleFormalParameter() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -3314,8 +3301,8 @@
     ]);
   }
 
-  void test_typeAnnotationDeferredClass_typeArgumentList() {
-    resolveWithErrors(<String>[
+  test_typeAnnotationDeferredClass_typeArgumentList() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -3329,8 +3316,8 @@
     ]);
   }
 
-  void test_typeAnnotationDeferredClass_typeArgumentList2() {
-    resolveWithErrors(<String>[
+  test_typeAnnotationDeferredClass_typeArgumentList2() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -3345,8 +3332,8 @@
     ]);
   }
 
-  void test_typeAnnotationDeferredClass_typeParameter_bound() {
-    resolveWithErrors(<String>[
+  test_typeAnnotationDeferredClass_typeParameter_bound() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -3359,8 +3346,8 @@
     ]);
   }
 
-  void test_typeAnnotationDeferredClass_variableDeclarationList() {
-    resolveWithErrors(<String>[
+  test_typeAnnotationDeferredClass_variableDeclarationList() async {
+    await resolveWithErrors(<String>[
       r'''
 library lib1;
 class A {}''',
@@ -3373,7 +3360,7 @@
     ]);
   }
 
-  void test_typeAnnotationGenericFunctionParameter_localFunction() {
+  test_typeAnnotationGenericFunctionParameter_localFunction() async {
     Source source = addSource(r'''
 class A {
   void method() {
@@ -3382,105 +3369,105 @@
     }
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.TYPE_ANNOTATION_GENERIC_FUNCTION_PARAMETER]);
     verify([source]);
   }
 
-  void test_typeAnnotationGenericFunctionParameter_method() {
+  test_typeAnnotationGenericFunctionParameter_method() async {
     Source source = addSource(r'''
 class A {
   T method<T>(Object t) {
     return (t is T) ? t : null;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.TYPE_ANNOTATION_GENERIC_FUNCTION_PARAMETER]);
     verify([source]);
   }
 
-  void test_typeAnnotationGenericFunctionParameter_topLevelFunction() {
+  test_typeAnnotationGenericFunctionParameter_topLevelFunction() async {
     Source source = addSource(r'''
 T function<T>(Object t) {
   return (t is T) ? t : null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.TYPE_ANNOTATION_GENERIC_FUNCTION_PARAMETER]);
     verify([source]);
   }
 
-  void test_typeParameterReferencedByStatic_field() {
+  test_typeParameterReferencedByStatic_field() async {
     Source source = addSource(r'''
 class A<K> {
   static K k;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
     verify([source]);
   }
 
-  void test_typeParameterReferencedByStatic_getter() {
+  test_typeParameterReferencedByStatic_getter() async {
     Source source = addSource(r'''
 class A<K> {
   static K get k => null;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
     verify([source]);
   }
 
-  void test_typeParameterReferencedByStatic_methodBodyReference() {
+  test_typeParameterReferencedByStatic_methodBodyReference() async {
     Source source = addSource(r'''
 class A<K> {
   static m() {
     K k;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
     verify([source]);
   }
 
-  void test_typeParameterReferencedByStatic_methodParameter() {
+  test_typeParameterReferencedByStatic_methodParameter() async {
     Source source = addSource(r'''
 class A<K> {
   static m(K k) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
     verify([source]);
   }
 
-  void test_typeParameterReferencedByStatic_methodReturn() {
+  test_typeParameterReferencedByStatic_methodReturn() async {
     Source source = addSource(r'''
 class A<K> {
   static K m() { return null; }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
     verify([source]);
   }
 
-  void test_typeParameterReferencedByStatic_setter() {
+  test_typeParameterReferencedByStatic_setter() async {
     Source source = addSource(r'''
 class A<K> {
   static set s(K k) {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(
         source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
     verify([source]);
   }
 
-  void test_typePromotion_functionType_arg_InterToDyn() {
+  test_typePromotion_functionType_arg_InterToDyn() async {
     Source source = addSource(r'''
 typedef FuncDyn(x);
 typedef FuncA(A a);
@@ -3491,52 +3478,52 @@
     f(new B());
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
   }
 
-  void test_typeTestNonType() {
+  test_typeTestNonType() async {
     Source source = addSource(r'''
 var A = 0;
 f(var p) {
   if (p is A) {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.TYPE_TEST_WITH_NON_TYPE]);
     verify([source]);
   }
 
-  void test_typeTestWithUndefinedName() {
+  test_typeTestWithUndefinedName() async {
     Source source = addSource(r'''
 f(var p) {
   if (p is A) {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.TYPE_TEST_WITH_UNDEFINED_NAME]);
     verify([source]);
   }
 
-  void test_undefinedClass_instanceCreation() {
+  test_undefinedClass_instanceCreation() async {
     Source source = addSource("f() { new C(); }");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]);
   }
 
-  void test_undefinedClass_variableDeclaration() {
+  test_undefinedClass_variableDeclaration() async {
     Source source = addSource("f() { C c; }");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]);
   }
 
-  void test_undefinedClassBoolean_variableDeclaration() {
+  test_undefinedClassBoolean_variableDeclaration() async {
     Source source = addSource("f() { boolean v; }");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS_BOOLEAN]);
   }
 
-  void test_undefinedGetter_fromLibrary() {
+  test_undefinedGetter_fromLibrary() async {
     Source source1 = addNamedSource("/lib.dart", "");
     Source source2 = addNamedSource(
         "/lib2.dart",
@@ -3545,52 +3532,52 @@
 void f() {
   var g = lib.gg;
 }''');
-    computeLibrarySourceErrors(source1);
-    computeLibrarySourceErrors(source2);
+    await computeAnalysisResult(source1);
+    await computeAnalysisResult(source2);
     assertErrors(source2, [StaticWarningCode.UNDEFINED_GETTER]);
     verify([source1]);
   }
 
-  void test_undefinedIdentifier_for() {
+  test_undefinedIdentifier_for() async {
     Source source = addSource(r'''
 f(var l) {
   for (e in l) {
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
   }
 
-  void test_undefinedIdentifier_function() {
+  test_undefinedIdentifier_function() async {
     Source source = addSource("int a() => b;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
   }
 
-  void test_undefinedIdentifier_importCore_withShow() {
+  test_undefinedIdentifier_importCore_withShow() async {
     Source source = addSource(r'''
 import 'dart:core' show List;
 main() {
   List;
   String;
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
   }
 
-  void test_undefinedIdentifier_initializer() {
+  test_undefinedIdentifier_initializer() async {
     Source source = addSource("var a = b;");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
   }
 
-  void test_undefinedIdentifier_methodInvocation() {
+  test_undefinedIdentifier_methodInvocation() async {
     Source source = addSource("f() { C.m(); }");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
   }
 
-  void test_undefinedIdentifier_private_getter() {
+  test_undefinedIdentifier_private_getter() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -3605,11 +3592,11 @@
     var v = _foo;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
   }
 
-  void test_undefinedIdentifier_private_setter() {
+  test_undefinedIdentifier_private_setter() async {
     addNamedSource(
         "/lib.dart",
         r'''
@@ -3624,29 +3611,29 @@
     _foo = 42;
   }
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
   }
 
-  void test_undefinedIdentifierAwait_function() {
+  test_undefinedIdentifierAwait_function() async {
     Source source = addSource("void a() { await; }");
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER_AWAIT]);
   }
 
-  void test_undefinedNamedParameter() {
+  test_undefinedNamedParameter() async {
     Source source = addSource(r'''
 f({a, b}) {}
 main() {
   f(c: 1);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.UNDEFINED_NAMED_PARAMETER]);
     // no verify(), 'c' is not resolved
   }
 
-  void test_undefinedSetter() {
-    Source source1 = addNamedSource("/lib.dart", "");
+  test_undefinedSetter() async {
+    addNamedSource("/lib.dart", "");
     Source source2 = addNamedSource(
         "/lib2.dart",
         r'''
@@ -3654,22 +3641,21 @@
 void f() {
   lib.gg = null;
 }''');
-    computeLibrarySourceErrors(source1);
-    computeLibrarySourceErrors(source2);
+    await computeAnalysisResult(source2);
     assertErrors(source2, [StaticWarningCode.UNDEFINED_SETTER]);
   }
 
-  void test_undefinedStaticMethodOrGetter_getter() {
+  test_undefinedStaticMethodOrGetter_getter() async {
     Source source = addSource(r'''
 class C {}
 f(var p) {
   f(C.m);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_undefinedStaticMethodOrGetter_getter_inSuperclass() {
+  test_undefinedStaticMethodOrGetter_getter_inSuperclass() async {
     Source source = addSource(r'''
 class S {
   static int get g => 0;
@@ -3678,21 +3664,21 @@
 f(var p) {
   f(C.g);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  void test_undefinedStaticMethodOrGetter_method() {
+  test_undefinedStaticMethodOrGetter_method() async {
     Source source = addSource(r'''
 class C {}
 f(var p) {
   f(C.m());
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
   }
 
-  void test_undefinedStaticMethodOrGetter_method_inSuperclass() {
+  test_undefinedStaticMethodOrGetter_method_inSuperclass() async {
     Source source = addSource(r'''
 class S {
   static m() {}
@@ -3701,11 +3687,11 @@
 f(var p) {
   f(C.m());
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
   }
 
-  void test_undefinedStaticMethodOrGetter_setter_inSuperclass() {
+  test_undefinedStaticMethodOrGetter_setter_inSuperclass() async {
     Source source = addSource(r'''
 class S {
   static set s(int i) {}
@@ -3714,16 +3700,16 @@
 f(var p) {
   f(C.s = 1);
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
   }
 
-  void test_voidReturnForGetter() {
+  test_voidReturnForGetter() async {
     Source source = addSource(r'''
 class S {
   void get value {}
 }''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [StaticWarningCode.VOID_RETURN_FOR_GETTER]);
   }
 }
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index 3d1948f..920eb12 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -4,6 +4,8 @@
 
 library analyzer.test.generated.strong_mode_test;
 
+import 'dart:async';
+
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -23,6 +25,9 @@
     defineReflectiveTests(StrongModeDownwardsInferenceTest);
     defineReflectiveTests(StrongModeStaticTypeAnalyzer2Test);
     defineReflectiveTests(StrongModeTypePropagationTest);
+    defineReflectiveTests(StrongModeDownwardsInferenceTest_Driver);
+    defineReflectiveTests(StrongModeStaticTypeAnalyzer2Test_Driver);
+    defineReflectiveTests(StrongModeTypePropagationTest_Driver);
   });
 }
 
@@ -52,14 +57,14 @@
   AsserterBuilder<DartType, DartType> _isType;
 
   AsserterBuilder<Element, DartType> _hasElement;
-  AsserterBuilder<DartType, DartType> _sameElement;
+  AsserterBuilder<DartType, DartType> _hasElementOf;
 
   @override
   void setUp() {
     super.setUp();
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.strongMode = true;
-    resetWithOptions(options);
+    resetWith(options: options);
     _assertions = new TypeAssertions(typeProvider);
     _isType = _assertions.isType;
     _hasElement = _assertions.hasElement;
@@ -71,14 +76,14 @@
     _isListOf = _assertions.isListOf;
     _isMapOf = _assertions.isMapOf;
     _isFunction2Of = _assertions.isFunction2Of;
-    _sameElement = _assertions.sameElement;
-    _isFutureOf = _isInstantiationOf(_sameElement(typeProvider.futureType));
+    _hasElementOf = _assertions.hasElementOf;
+    _isFutureOf = _isInstantiationOf(_hasElementOf(typeProvider.futureType));
     _isFutureOfDynamic = _isFutureOf([_isDynamic]);
     _isFutureOfInt = _isFutureOf([_isInt]);
-    _isStreamOf = _isInstantiationOf(_sameElement(typeProvider.streamType));
+    _isStreamOf = _isInstantiationOf(_hasElementOf(typeProvider.streamType));
   }
 
-  void test_async_method_propagation() {
+  test_async_method_propagation() async {
     String code = r'''
       import "dart:async";
       class A {
@@ -99,7 +104,7 @@
         Future<int> g5() async { return await new Future.value(3); }
       }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
 
     void check(String name, Asserter<InterfaceType> typeTest) {
       MethodDeclaration test = AstFinder.getMethodInClass(unit, "A", name);
@@ -135,7 +140,7 @@
     check("g5", _isFutureOfInt);
   }
 
-  void test_async_propagation() {
+  test_async_propagation() async {
     String code = r'''
       import "dart:async";
 
@@ -155,7 +160,7 @@
       Future<int> g4() async { return new Future.value(3); }
       Future<int> g5() async { return await new Future.value(3); }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
 
     void check(String name, Asserter<InterfaceType> typeTest) {
       FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, name);
@@ -191,7 +196,7 @@
     check("g5", _isFutureOfInt);
   }
 
-  void test_async_star_method_propagation() {
+  test_async_star_method_propagation() async {
     String code = r'''
       import "dart:async";
       class A {
@@ -202,7 +207,7 @@
         Stream<List<int>> g3() async* { yield* new Stream(); }
       }
     ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
 
     void check(String name, Asserter<InterfaceType> typeTest) {
       MethodDeclaration test = AstFinder.getMethodInClass(unit, "A", name);
@@ -219,7 +224,7 @@
     check("g3", _isStreamOf([(DartType type) => _isListOf(_isInt)(type)]));
   }
 
-  void test_async_star_propagation() {
+  test_async_star_propagation() async {
     String code = r'''
       import "dart:async";
 
@@ -229,7 +234,7 @@
       Stream<List<int>> g2() async* { yield []; }
       Stream<List<int>> g3() async* { yield* new Stream(); }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
 
     void check(String name, Asserter<InterfaceType> typeTest) {
       FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, name);
@@ -246,7 +251,7 @@
     check("g3", _isStreamOf([(DartType type) => _isListOf(_isInt)(type)]));
   }
 
-  void test_cascadeExpression() {
+  test_cascadeExpression() async {
     String code = r'''
       class A<T> {
         List<T> map(T a, List<T> mapper(T x)) => mapper(a);
@@ -256,7 +261,7 @@
         A<int> a = new A()..map(0, (x) => [x]);
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     CascadeExpression fetch(int i) {
@@ -277,14 +282,14 @@
     expect(f0.type.normalParameterTypes[0], typeProvider.intType);
   }
 
-  void test_constructorInitializer_propagation() {
+  test_constructorInitializer_propagation() async {
     String code = r'''
       class A {
         List<String> x;
         A() : this.x = [];
       }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     ConstructorDeclaration constructor =
         AstFinder.getConstructorInClass(unit, "A", null);
     ConstructorFieldInitializer assignment = constructor.initializers[0];
@@ -292,14 +297,14 @@
     _isListOf(_isString)(exp.staticType);
   }
 
-  void test_factoryConstructor_propagation() {
+  test_factoryConstructor_propagation() async {
     String code = r'''
       class A<T> {
         factory A() { return new B(); }
       }
       class B<S> extends A<S> {}
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
 
     ConstructorDeclaration constructor =
         AstFinder.getConstructorInClass(unit, "A", null);
@@ -314,20 +319,20 @@
         [_isType(elementA.typeParameters[0].type)])(exp.staticType);
   }
 
-  void test_fieldDeclaration_propagation() {
+  test_fieldDeclaration_propagation() async {
     String code = r'''
       class A {
         List<String> f0 = ["hello"];
       }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
 
     VariableDeclaration field = AstFinder.getFieldInClass(unit, "A", "f0");
 
     _isListOf(_isString)(field.initializer.staticType);
   }
 
-  void test_functionDeclaration_body_propagation() {
+  test_functionDeclaration_body_propagation() async {
     String code = r'''
       typedef T Function2<S, T>(S x);
 
@@ -340,7 +345,7 @@
         return (x) => x;
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
 
     Asserter<InterfaceType> assertListOfInt = _isListOf(_isInt);
 
@@ -367,7 +372,7 @@
     expect(type1.normalParameterTypes[0], typeProvider.intType);
   }
 
-  void test_functionLiteral_assignment_typedArguments() {
+  test_functionLiteral_assignment_typedArguments() async {
     String code = r'''
       typedef T Function2<S, T>(S x);
 
@@ -379,7 +384,7 @@
         Function2<int, String> l4 = (int x) {return 3;};
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     DartType literal(int i) {
@@ -396,7 +401,7 @@
     _isFunction2Of(_isInt, _isString)(literal(4));
   }
 
-  void test_functionLiteral_assignment_unTypedArguments() {
+  test_functionLiteral_assignment_unTypedArguments() async {
     String code = r'''
       typedef T Function2<S, T>(S x);
 
@@ -408,7 +413,7 @@
         Function2<int, String> l4 = (x) {return 3;};
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     DartType literal(int i) {
@@ -425,7 +430,7 @@
     _isFunction2Of(_isInt, _isString)(literal(4));
   }
 
-  void test_functionLiteral_body_propagation() {
+  test_functionLiteral_body_propagation() async {
     String code = r'''
       typedef T Function2<S, T>(S x);
 
@@ -436,7 +441,7 @@
         Function2<int, List<String>> l3 = (int x) {return [3];};
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     Expression functionReturnValue(int i) {
@@ -459,7 +464,7 @@
     assertListOfString(functionReturnValue(3).staticType);
   }
 
-  void test_functionLiteral_functionExpressionInvocation_typedArguments() {
+  test_functionLiteral_functionExpressionInvocation_typedArguments() async {
     String code = r'''
       class Mapper<F, T> {
         T map(T mapper(F x)) => mapper(null);
@@ -473,7 +478,7 @@
         (new Mapper<int, String>().map)((int x) {return 3;});
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     DartType literal(int i) {
@@ -490,7 +495,7 @@
     _isFunction2Of(_isInt, _isString)(literal(4));
   }
 
-  void test_functionLiteral_functionExpressionInvocation_unTypedArguments() {
+  test_functionLiteral_functionExpressionInvocation_unTypedArguments() async {
     String code = r'''
       class Mapper<F, T> {
         T map(T mapper(F x)) => mapper(null);
@@ -504,7 +509,7 @@
         (new Mapper<int, String>().map)((x) {return 3;});
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     DartType literal(int i) {
@@ -521,7 +526,7 @@
     _isFunction2Of(_isInt, _isString)(literal(4));
   }
 
-  void test_functionLiteral_functionInvocation_typedArguments() {
+  test_functionLiteral_functionInvocation_typedArguments() async {
     String code = r'''
       String map(String mapper(int x)) => mapper(null);
 
@@ -533,7 +538,7 @@
         map((int x) {return 3;});
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     DartType literal(int i) {
@@ -550,7 +555,7 @@
     _isFunction2Of(_isInt, _isString)(literal(4));
   }
 
-  void test_functionLiteral_functionInvocation_unTypedArguments() {
+  test_functionLiteral_functionInvocation_unTypedArguments() async {
     String code = r'''
       String map(String mapper(int x)) => mapper(null);
 
@@ -562,7 +567,7 @@
         map((x) {return 3;});
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     DartType literal(int i) {
@@ -579,7 +584,7 @@
     _isFunction2Of(_isInt, _isString)(literal(4));
   }
 
-  void test_functionLiteral_methodInvocation_typedArguments() {
+  test_functionLiteral_methodInvocation_typedArguments() async {
     String code = r'''
       class Mapper<F, T> {
         T map(T mapper(F x)) => mapper(null);
@@ -593,7 +598,7 @@
         new Mapper<int, String>().map((int x) {return 3;});
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     DartType literal(int i) {
@@ -610,7 +615,7 @@
     _isFunction2Of(_isInt, _isString)(literal(4));
   }
 
-  void test_functionLiteral_methodInvocation_unTypedArguments() {
+  test_functionLiteral_methodInvocation_unTypedArguments() async {
     String code = r'''
       class Mapper<F, T> {
         T map(T mapper(F x)) => mapper(null);
@@ -624,7 +629,7 @@
         new Mapper<int, String>().map((x) {return 3;});
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     DartType literal(int i) {
@@ -641,7 +646,7 @@
     _isFunction2Of(_isInt, _isString)(literal(4));
   }
 
-  void test_functionLiteral_unTypedArgument_propagation() {
+  test_functionLiteral_unTypedArgument_propagation() async {
     String code = r'''
       typedef T Function2<S, T>(S x);
 
@@ -653,7 +658,7 @@
         Function2<String, String> l4 = (x) => x.toLowerCase();
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     Expression functionReturnValue(int i) {
@@ -676,7 +681,7 @@
     expect(functionReturnValue(4).staticType, typeProvider.stringType);
   }
 
-  void test_inference_hints() {
+  test_inference_hints() async {
     Source source = addSource(r'''
       void main () {
         var x = 3;
@@ -684,11 +689,12 @@
      }
    ''');
     resolve2(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_inferredFieldDeclaration_propagation() {
+  test_inferredFieldDeclaration_propagation() async {
     // Regression test for https://github.com/dart-lang/sdk/issues/25546
     String code = r'''
       abstract class A {
@@ -701,7 +707,7 @@
         get map => { 43: [] };
       }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
 
     Asserter<InterfaceType> assertListOfInt = _isListOf(_isInt);
     Asserter<InterfaceType> assertMapOfIntToListOfInt =
@@ -725,7 +731,7 @@
     assertListOfInt(listLiteralC.staticType);
   }
 
-  void test_instanceCreation() {
+  test_instanceCreation() async {
     String code = r'''
       class A<S, T> {
         S x;
@@ -818,7 +824,7 @@
         A<int, String> a5 = new F.named(3, "hello", "hello");
       }
     }''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
 
     Expression rhs(VariableDeclarationStatement stmt) {
       VariableDeclaration decl = stmt.variables.variables[0];
@@ -944,7 +950,7 @@
     }
   }
 
-  void test_listLiteral_nested() {
+  test_listLiteral_nested() async {
     String code = r'''
       void main () {
         List<List<int>> l0 = [[]];
@@ -953,7 +959,7 @@
         List<List<int>> l3 = [["hello", 3], []];
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     ListLiteral literal(int i) {
@@ -977,7 +983,7 @@
     assertListOfInt(literal(3).elements[0].staticType);
   }
 
-  void test_listLiteral_simple() {
+  test_listLiteral_simple() async {
     String code = r'''
       void main () {
         List<int> l0 = [];
@@ -986,7 +992,7 @@
         List<int> l3 = ["hello", 3];
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     DartType literal(int i) {
@@ -1004,7 +1010,7 @@
     assertListOfInt(literal(3));
   }
 
-  void test_listLiteral_simple_const() {
+  test_listLiteral_simple_const() async {
     String code = r'''
       void main () {
         const List<int> c0 = const [];
@@ -1013,7 +1019,7 @@
         const List<int> c3 = const ["hello", 3];
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     DartType literal(int i) {
@@ -1031,7 +1037,7 @@
     assertListOfInt(literal(3));
   }
 
-  void test_listLiteral_simple_disabled() {
+  test_listLiteral_simple_disabled() async {
     String code = r'''
       void main () {
         List<int> l0 = <num>[];
@@ -1040,7 +1046,7 @@
         List<int> l3 = <dynamic>["hello", 3];
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     DartType literal(int i) {
@@ -1056,7 +1062,7 @@
     _isListOf(_isDynamic)(literal(3));
   }
 
-  void test_listLiteral_simple_subtype() {
+  test_listLiteral_simple_subtype() async {
     String code = r'''
       void main () {
         Iterable<int> l0 = [];
@@ -1065,7 +1071,7 @@
         Iterable<int> l3 = ["hello", 3];
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     DartType literal(int i) {
@@ -1083,7 +1089,7 @@
     assertListOfInt(literal(3));
   }
 
-  void test_mapLiteral_nested() {
+  test_mapLiteral_nested() async {
     String code = r'''
       void main () {
         Map<int, List<String>> l0 = {};
@@ -1093,7 +1099,7 @@
         Map<int, List<String>> l4 = {3:["hello"], "hello": [3]};
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     MapLiteral literal(int i) {
@@ -1119,7 +1125,7 @@
     assertListOfString(literal(4).entries[0].value.staticType);
   }
 
-  void test_mapLiteral_simple() {
+  test_mapLiteral_simple() async {
     String code = r'''
       void main () {
         Map<int, String> l0 = {};
@@ -1129,7 +1135,7 @@
         Map<int, String> l4 = {3:"hello", "hello": 3};
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     DartType literal(int i) {
@@ -1148,7 +1154,7 @@
     assertMapOfIntToString(literal(3));
   }
 
-  void test_mapLiteral_simple_disabled() {
+  test_mapLiteral_simple_disabled() async {
     String code = r'''
       void main () {
         Map<int, String> l0 = <int, dynamic>{};
@@ -1157,7 +1163,7 @@
         Map<int, String> l3 = <int, dynamic>{3: 3};
      }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     List<Statement> statements =
         AstFinder.getStatementsInTopLevelFunction(unit, "main");
     DartType literal(int i) {
@@ -1176,14 +1182,14 @@
     assertMapOfIntToDynamic(literal(3));
   }
 
-  void test_methodDeclaration_body_propagation() {
+  test_methodDeclaration_body_propagation() async {
     String code = r'''
       class A {
         List<String> m0(int x) => ["hello"];
         List<String> m1(int x) {return [3];};
       }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
     Expression methodReturnValue(String methodName) {
       MethodDeclaration method =
           AstFinder.getMethodInClass(unit, "A", methodName);
@@ -1201,14 +1207,14 @@
     assertListOfString(methodReturnValue("m1").staticType);
   }
 
-  void test_redirectingConstructor_propagation() {
+  test_redirectingConstructor_propagation() async {
     String code = r'''
       class A {
         A() : this.named([]);
         A.named(List<String> x);
       }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
 
     ConstructorDeclaration constructor =
         AstFinder.getConstructorInClass(unit, "A", null);
@@ -1217,7 +1223,7 @@
     _isListOf(_isString)(exp.staticType);
   }
 
-  void test_superConstructorInvocation_propagation() {
+  test_superConstructorInvocation_propagation() async {
     String code = r'''
       class B {
         B(List<String>);
@@ -1226,7 +1232,7 @@
         A() : super([]);
       }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
 
     ConstructorDeclaration constructor =
         AstFinder.getConstructorInClass(unit, "A", null);
@@ -1235,7 +1241,7 @@
     _isListOf(_isString)(exp.staticType);
   }
 
-  void test_sync_star_method_propagation() {
+  test_sync_star_method_propagation() async {
     String code = r'''
       import "dart:async";
       class A {
@@ -1246,7 +1252,7 @@
         Iterable<List<int>> f3() sync* { yield* new List(); }
       }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
 
     void check(String name, Asserter<InterfaceType> typeTest) {
       MethodDeclaration test = AstFinder.getMethodInClass(unit, "A", name);
@@ -1263,7 +1269,7 @@
     check("f3", _isListOf((DartType type) => _isListOf(_isInt)(type)));
   }
 
-  void test_sync_star_propagation() {
+  test_sync_star_propagation() async {
     String code = r'''
       import "dart:async";
 
@@ -1273,7 +1279,7 @@
       Iterable<List<int>> f2() sync* { yield []; }
       Iterable<List<int>> f3() sync* { yield* new List(); }
    ''';
-    CompilationUnit unit = resolveSource(code);
+    CompilationUnit unit = await resolveSource(code);
 
     void check(String name, Asserter<InterfaceType> typeTest) {
       FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, name);
@@ -1291,13 +1297,26 @@
   }
 }
 
+@reflectiveTest
+class StrongModeDownwardsInferenceTest_Driver
+    extends StrongModeDownwardsInferenceTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+
+  @failingTest
+  @override
+  test_inference_hints() {
+    return super.test_inference_hints();
+  }
+}
+
 /**
  * Strong mode static analyzer end to end tests
  */
 @reflectiveTest
 class StrongModeStaticTypeAnalyzer2Test extends StaticTypeAnalyzer2TestShared {
-  void fail_genericMethod_tearoff_instantiated() {
-    resolveTestUnit(r'''
+  fail_genericMethod_tearoff_instantiated() async {
+    await resolveTestUnit(r'''
 class C<E> {
   /*=T*/ f/*<T>*/(E e) => null;
   static /*=T*/ g/*<T>*/(/*=T*/ e) => null;
@@ -1327,47 +1346,37 @@
     expectIdentifierType('paramTearOffInst', "(int) → int");
   }
 
-  void objectMethodOnFunctions_helper(String code) {
-    resolveTestUnit(code);
-    expectIdentifierType('t0', "String");
-    expectIdentifierType('t1', "() → String");
-    expectIdentifierType('t2', "int");
-    expectIdentifierType('t3', "String");
-    expectIdentifierType('t4', "() → String");
-    expectIdentifierType('t5', "int");
-  }
-
   void setUp() {
     super.setUp();
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.strongMode = true;
-    resetWithOptions(options);
+    resetWith(options: options);
   }
 
-  void test_dynamicObjectGetter_hashCode() {
+  test_dynamicObjectGetter_hashCode() async {
     String code = r'''
 main() {
   dynamic a = null;
   var foo = a.hashCode;
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectInitializerType('foo', 'int', isNull);
   }
 
-  void test_dynamicObjectMethod_toString() {
+  test_dynamicObjectMethod_toString() async {
     String code = r'''
 main() {
   dynamic a = null;
   var foo = a.toString();
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectInitializerType('foo', 'String', isNull);
   }
 
-  void test_genericFunction() {
-    resolveTestUnit(r'/*=T*/ f/*<T>*/(/*=T*/ x) => null;');
+  test_genericFunction() async {
+    await resolveTestUnit(r'/*=T*/ f/*<T>*/(/*=T*/ x) => null;');
     expectFunctionType('f', '<T>(T) → T',
         elementTypeParams: '[T]', typeFormals: '[T]');
     SimpleIdentifier f = findIdentifier('f');
@@ -1376,14 +1385,14 @@
     expect(ft.toString(), '(String) → String');
   }
 
-  void test_genericFunction_bounds() {
-    resolveTestUnit(r'/*=T*/ f/*<T extends num>*/(/*=T*/ x) => null;');
+  test_genericFunction_bounds() async {
+    await resolveTestUnit(r'/*=T*/ f/*<T extends num>*/(/*=T*/ x) => null;');
     expectFunctionType('f', '<T extends num>(T) → T',
         elementTypeParams: '[T extends num]', typeFormals: '[T extends num]');
   }
 
-  void test_genericFunction_parameter() {
-    resolveTestUnit(r'''
+  test_genericFunction_parameter() async {
+    await resolveTestUnit(r'''
 void g(/*=T*/ f/*<T>*/(/*=T*/ x)) {}
 ''');
     expectFunctionType('f', '<T>(T) → T',
@@ -1395,8 +1404,8 @@
     expect(ft.toString(), '(String) → String');
   }
 
-  void test_genericFunction_static() {
-    resolveTestUnit(r'''
+  test_genericFunction_static() async {
+    await resolveTestUnit(r'''
 class C<E> {
   static /*=T*/ f/*<T>*/(/*=T*/ x) => null;
 }
@@ -1409,7 +1418,7 @@
     expect(ft.toString(), '(String) → String');
   }
 
-  void test_genericFunction_typedef() {
+  test_genericFunction_typedef() async {
     String code = r'''
 typedef T F<T>(T x);
 F f0;
@@ -1440,7 +1449,7 @@
   }
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
 
     checkBody(String className) {
       List<Statement> statements =
@@ -1456,14 +1465,14 @@
     checkBody("D");
   }
 
-  void test_genericFunction_upwardsAndDownwards() {
+  test_genericFunction_upwardsAndDownwards() async {
     // Regression tests for https://github.com/dart-lang/sdk/issues/27151.
-    resolveTestUnit(r'List<num> x = [1, 2];');
+    await resolveTestUnit(r'List<num> x = [1, 2];');
     expectInitializerType('x', 'List<int>');
   }
 
-  void test_genericMethod() {
-    resolveTestUnit(r'''
+  test_genericMethod() async {
+    await resolveTestUnit(r'''
 class C<E> {
   List/*<T>*/ f/*<T>*/(E e) => null;
 }
@@ -1484,8 +1493,8 @@
     expect('${ft.typeArguments}/${ft.typeParameters}', '[String, int]/[E, T]');
   }
 
-  void test_genericMethod_explicitTypeParams() {
-    resolveTestUnit(r'''
+  test_genericMethod_explicitTypeParams() async {
+    await resolveTestUnit(r'''
 class C<E> {
   List/*<T>*/ f/*<T>*/(E e) => null;
 }
@@ -1504,8 +1513,8 @@
         typeProvider.listType.instantiate([typeProvider.intType]));
   }
 
-  void test_genericMethod_functionExpressionInvocation_explicit() {
-    resolveTestUnit(r'''
+  test_genericMethod_functionExpressionInvocation_explicit() async {
+    await resolveTestUnit(r'''
 class C<E> {
   /*=T*/ f/*<T>*/(/*=T*/ e) => null;
   static /*=T*/ g/*<T>*/(/*=T*/ e) => null;
@@ -1538,8 +1547,8 @@
     expectIdentifierType('lambdaCall', "int");
   }
 
-  void test_genericMethod_functionExpressionInvocation_inferred() {
-    resolveTestUnit(r'''
+  test_genericMethod_functionExpressionInvocation_inferred() async {
+    await resolveTestUnit(r'''
 class C<E> {
   /*=T*/ f/*<T>*/(/*=T*/ e) => null;
   static /*=T*/ g/*<T>*/(/*=T*/ e) => null;
@@ -1572,8 +1581,8 @@
     expectIdentifierType('lambdaCall', "int");
   }
 
-  void test_genericMethod_functionInvocation_explicit() {
-    resolveTestUnit(r'''
+  test_genericMethod_functionInvocation_explicit() async {
+    await resolveTestUnit(r'''
 class C<E> {
   /*=T*/ f/*<T>*/(/*=T*/ e) => null;
   static /*=T*/ g/*<T>*/(/*=T*/ e) => null;
@@ -1603,8 +1612,8 @@
     expectIdentifierType('paramCall', "int");
   }
 
-  void test_genericMethod_functionInvocation_inferred() {
-    resolveTestUnit(r'''
+  test_genericMethod_functionInvocation_inferred() async {
+    await resolveTestUnit(r'''
 class C<E> {
   /*=T*/ f/*<T>*/(/*=T*/ e) => null;
   static /*=T*/ g/*<T>*/(/*=T*/ e) => null;
@@ -1634,8 +1643,8 @@
     expectIdentifierType('paramCall', "int");
   }
 
-  void test_genericMethod_functionTypedParameter() {
-    resolveTestUnit(r'''
+  test_genericMethod_functionTypedParameter() async {
+    await resolveTestUnit(r'''
 class C<E> {
   List/*<T>*/ f/*<T>*/(/*=T*/ f(E e)) => null;
 }
@@ -1656,11 +1665,11 @@
     expect(ft.toString(), '((String) → int) → List<int>');
   }
 
-  void test_genericMethod_implicitDynamic() {
+  test_genericMethod_implicitDynamic() async {
     // Regression test for:
     // https://github.com/dart-lang/sdk/issues/25100#issuecomment-162047588
     // These should not cause any hints or warnings.
-    resolveTestUnit(r'''
+    await resolveTestUnit(r'''
 class List<E> {
   /*=T*/ map/*<T>*/(/*=T*/ f(E e)) => null;
 }
@@ -1678,62 +1687,62 @@
     expect(m2.staticInvokeType.toString(), '((dynamic) → int) → int');
   }
 
-  void test_genericMethod_max_doubleDouble() {
+  test_genericMethod_max_doubleDouble() async {
     String code = r'''
 import 'dart:math';
 main() {
   var foo = max(1.0, 2.0);
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectInitializerType('foo', 'double', isNull);
   }
 
-  void test_genericMethod_max_doubleDouble_prefixed() {
+  test_genericMethod_max_doubleDouble_prefixed() async {
     String code = r'''
 import 'dart:math' as math;
 main() {
   var foo = math.max(1.0, 2.0);
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectInitializerType('foo', 'double', isNull);
   }
 
-  void test_genericMethod_max_doubleInt() {
+  test_genericMethod_max_doubleInt() async {
     String code = r'''
 import 'dart:math';
 main() {
   var foo = max(1.0, 2);
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectInitializerType('foo', 'num', isNull);
   }
 
-  void test_genericMethod_max_intDouble() {
+  test_genericMethod_max_intDouble() async {
     String code = r'''
 import 'dart:math';
 main() {
   var foo = max(1, 2.0);
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectInitializerType('foo', 'num', isNull);
   }
 
-  void test_genericMethod_max_intInt() {
+  test_genericMethod_max_intInt() async {
     String code = r'''
 import 'dart:math';
 main() {
   var foo = max(1, 2);
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectInitializerType('foo', 'int', isNull);
   }
 
-  void test_genericMethod_nestedBound() {
+  test_genericMethod_nestedBound() async {
     String code = r'''
 class Foo<T extends num> {
   void method/*<U extends T>*/(dynamic/*=U*/ u) {
@@ -1742,11 +1751,11 @@
 }
 ''';
     // Just validate that there is no warning on the call to `.abs()`.
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
   }
 
-  void test_genericMethod_nestedCapture() {
-    resolveTestUnit(r'''
+  test_genericMethod_nestedCapture() async {
+    await resolveTestUnit(r'''
 class C<T> {
   /*=T*/ f/*<S>*/(/*=S*/ x) {
     new C<S>().f/*<int>*/(3);
@@ -1763,8 +1772,8 @@
     expectIdentifierType('f;', '<Sâ‚€>(Sâ‚€) → S');
   }
 
-  void test_genericMethod_nestedFunctions() {
-    resolveTestUnit(r'''
+  test_genericMethod_nestedFunctions() async {
+    await resolveTestUnit(r'''
 /*=S*/ f/*<S>*/(/*=S*/ x) {
   g/*<S>*/(/*=S*/ x) => f;
   return null;
@@ -1774,8 +1783,8 @@
     expectIdentifierType('g', '<S>(S) → <S>(S) → S');
   }
 
-  void test_genericMethod_override() {
-    resolveTestUnit(r'''
+  test_genericMethod_override() async {
+    await resolveTestUnit(r'''
 class C {
   /*=T*/ f/*<T>*/(/*=T*/ x) => null;
 }
@@ -1792,8 +1801,8 @@
     expect(ft.toString(), '(String) → String');
   }
 
-  void test_genericMethod_override_bounds() {
-    resolveTestUnit(r'''
+  test_genericMethod_override_bounds() async {
+    await resolveTestUnit(r'''
 class A {}
 class B extends A {}
 class C {
@@ -1805,7 +1814,7 @@
 ''');
   }
 
-  void test_genericMethod_override_invalidReturnType() {
+  test_genericMethod_override_invalidReturnType() async {
     Source source = addSource(r'''
 class C {
   Iterable/*<T>*/ f/*<T>*/(/*=T*/ x) => null;
@@ -1813,11 +1822,12 @@
 class D extends C {
   String f/*<S>*/(/*=S*/ x) => null;
 }''');
+    await computeAnalysisResult(source);
     assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
     verify([source]);
   }
 
-  void test_genericMethod_override_invalidTypeParamBounds() {
+  test_genericMethod_override_invalidTypeParamBounds() async {
     Source source = addSource(r'''
 class A {}
 class B extends A {}
@@ -1827,11 +1837,12 @@
 class D extends C {
   /*=T*/ f/*<T extends B>*/(/*=T*/ x) => null;
 }''');
+    await computeAnalysisResult(source);
     assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
     verify([source]);
   }
 
-  void test_genericMethod_override_invalidTypeParamCount() {
+  test_genericMethod_override_invalidTypeParamCount() async {
     Source source = addSource(r'''
 class C {
   /*=T*/ f/*<T>*/(/*=T*/ x) => null;
@@ -1839,11 +1850,12 @@
 class D extends C {
   /*=S*/ f/*<T, S>*/(/*=T*/ x) => null;
 }''');
+    await computeAnalysisResult(source);
     assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
     verify([source]);
   }
 
-  void test_genericMethod_propagatedType_promotion() {
+  test_genericMethod_propagatedType_promotion() async {
     // Regression test for:
     // https://github.com/dart-lang/sdk/issues/25340
 
@@ -1851,7 +1863,7 @@
     // example won't work, as we now compute a static type and therefore discard
     // the propagated type. So a new test was created that doesn't run under
     // strong mode.
-    resolveTestUnit(r'''
+    await resolveTestUnit(r'''
 abstract class Iter {
   List/*<S>*/ map/*<S>*/(/*=S*/ f(x));
 }
@@ -1865,8 +1877,8 @@
     expectIdentifierType('y = ', 'List<C>', isNull);
   }
 
-  void test_genericMethod_tearoff() {
-    resolveTestUnit(r'''
+  test_genericMethod_tearoff() async {
+    await resolveTestUnit(r'''
 class C<E> {
   /*=T*/ f/*<T>*/(E e) => null;
   static /*=T*/ g/*<T>*/(/*=T*/ e) => null;
@@ -1896,7 +1908,7 @@
     expectIdentifierType('paramTearOff', "<T>(T) → T");
   }
 
-  void test_genericMethod_then() {
+  test_genericMethod_then() async {
     String code = r'''
 import 'dart:async';
 String toString(int x) => x.toString();
@@ -1905,11 +1917,11 @@
   var foo = bar.then(toString);
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectInitializerType('foo', 'Future<String>', isNull);
   }
 
-  void test_genericMethod_then_prefixed() {
+  test_genericMethod_then_prefixed() async {
     String code = r'''
 import 'dart:async' as async;
 String toString(int x) => x.toString();
@@ -1918,11 +1930,11 @@
   var foo = bar.then(toString);
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectInitializerType('foo', 'Future<String>', isNull);
   }
 
-  void test_genericMethod_then_propagatedType() {
+  test_genericMethod_then_propagatedType() async {
     // Regression test for https://github.com/dart-lang/sdk/issues/25482.
     String code = r'''
 import 'dart:async';
@@ -1932,11 +1944,11 @@
 }
 ''';
     // This should produce no hints or warnings.
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectInitializerType('foo', 'Future<String>', isNull);
   }
 
-  void test_implicitBounds() {
+  test_implicitBounds() async {
     String code = r'''
 class A<T> {}
 
@@ -1954,7 +1966,7 @@
   var cc = new C();
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectIdentifierType('ai', "A<dynamic>");
     expectIdentifierType('bi', "B<num>");
     expectIdentifierType('ci', "C<int, B<int>, B<dynamic>>");
@@ -1963,7 +1975,7 @@
     expectIdentifierType('cc', "C<int, B<int>, B<dynamic>>");
   }
 
-  void test_objectMethodOnFunctions_Anonymous() {
+  test_objectMethodOnFunctions_Anonymous() async {
     String code = r'''
 void main() {
   var f = (x) => 3;
@@ -1987,10 +1999,10 @@
   (f)..toString;
   (f)..hashCode;
 }''';
-    objectMethodOnFunctions_helper(code);
+    await _objectMethodOnFunctions_helper2(code);
   }
 
-  void test_objectMethodOnFunctions_Function() {
+  test_objectMethodOnFunctions_Function() async {
     String code = r'''
 void main() {
   Function f;
@@ -2014,10 +2026,10 @@
   (f)..toString;
   (f)..hashCode;
 }''';
-    objectMethodOnFunctions_helper(code);
+    await _objectMethodOnFunctions_helper2(code);
   }
 
-  void test_objectMethodOnFunctions_Static() {
+  test_objectMethodOnFunctions_Static() async {
     String code = r'''
 int f(int x) => null;
 void main() {
@@ -2041,10 +2053,10 @@
   (f)..toString;
   (f)..hashCode;
 }''';
-    objectMethodOnFunctions_helper(code);
+    await _objectMethodOnFunctions_helper2(code);
   }
 
-  void test_objectMethodOnFunctions_Typedef() {
+  test_objectMethodOnFunctions_Typedef() async {
     String code = r'''
 typedef bool Predicate<T>(T object);
 
@@ -2070,17 +2082,17 @@
   (f)..toString;
   (f)..hashCode;
 }''';
-    objectMethodOnFunctions_helper(code);
+    await _objectMethodOnFunctions_helper2(code);
   }
 
-  void test_setterWithDynamicTypeIsError() {
+  test_setterWithDynamicTypeIsError() async {
     Source source = addSource(r'''
 class A {
   dynamic set f(String s) => null;
 }
 dynamic set g(int x) => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.NON_VOID_RETURN_FOR_SETTER,
       StaticWarningCode.NON_VOID_RETURN_FOR_SETTER
@@ -2088,7 +2100,7 @@
     verify([source]);
   }
 
-  void test_setterWithExplicitVoidType_returningVoid() {
+  test_setterWithExplicitVoidType_returningVoid() async {
     Source source = addSource(r'''
 void returnsVoid() {}
 class A {
@@ -2096,12 +2108,12 @@
 }
 void set g(int x) => returnsVoid();
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_setterWithNoVoidType() {
+  test_setterWithNoVoidType() async {
     Source source = addSource(r'''
 class A {
   set f(String s) {
@@ -2110,14 +2122,14 @@
 }
 set g(int x) => 42;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticTypeWarningCode.RETURN_OF_INVALID_TYPE,
     ]);
     verify([source]);
   }
 
-  void test_setterWithNoVoidType_returningVoid() {
+  test_setterWithNoVoidType_returningVoid() async {
     Source source = addSource(r'''
 void returnsVoid() {}
 class A {
@@ -2125,19 +2137,19 @@
 }
 set g(int x) => returnsVoid();
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
   }
 
-  void test_setterWithOtherTypeIsError() {
+  test_setterWithOtherTypeIsError() async {
     Source source = addSource(r'''
 class A {
   String set f(String s) => null;
 }
 Object set g(x) => null;
 ''');
-    computeLibrarySourceErrors(source);
+    await computeAnalysisResult(source);
     assertErrors(source, [
       StaticWarningCode.NON_VOID_RETURN_FOR_SETTER,
       StaticWarningCode.NON_VOID_RETURN_FOR_SETTER
@@ -2145,25 +2157,78 @@
     verify([source]);
   }
 
-  void test_ternaryOperator_null_left() {
+  test_ternaryOperator_null_left() async {
     String code = r'''
 main() {
   var foo = (true) ? null : 3;
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectInitializerType('foo', 'int', isNull);
   }
 
-  void test_ternaryOperator_null_right() {
+  test_ternaryOperator_null_right() async {
     String code = r'''
 main() {
   var foo = (true) ? 3 : null;
 }
 ''';
-    resolveTestUnit(code);
+    await resolveTestUnit(code);
     expectInitializerType('foo', 'int', isNull);
   }
+
+  Future<Null> _objectMethodOnFunctions_helper2(String code) async {
+    await resolveTestUnit(code);
+    expectIdentifierType('t0', "String");
+    expectIdentifierType('t1', "() → String");
+    expectIdentifierType('t2', "int");
+    expectIdentifierType('t3', "String");
+    expectIdentifierType('t4', "() → String");
+    expectIdentifierType('t5', "int");
+  }
+}
+
+@reflectiveTest
+class StrongModeStaticTypeAnalyzer2Test_Driver
+    extends StrongModeStaticTypeAnalyzer2Test {
+  @override
+  bool get enableNewAnalysisDriver => true;
+
+  @failingTest
+  @override
+  test_genericFunction_parameter() {
+    return super.test_genericFunction_parameter();
+  }
+
+  @failingTest
+  @override
+  test_genericMethod_functionExpressionInvocation_explicit() {
+    return super.test_genericMethod_functionExpressionInvocation_explicit();
+  }
+
+  @failingTest
+  @override
+  test_genericMethod_functionExpressionInvocation_inferred() {
+    return super.test_genericMethod_functionExpressionInvocation_inferred();
+  }
+
+  @failingTest
+  @override
+  test_genericMethod_functionInvocation_explicit() {
+    return super.test_genericMethod_functionInvocation_explicit();
+  }
+
+  @failingTest
+  @override
+  test_genericMethod_functionInvocation_inferred() {
+    return super.test_genericMethod_functionInvocation_inferred();
+  }
+
+  @failingTest
+  @override
+  test_genericMethod_tearoff() {
+    return super.test_genericMethod_tearoff();
+  }
 }
 
 @reflectiveTest
@@ -2173,10 +2238,10 @@
     super.setUp();
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.strongMode = true;
-    resetWithOptions(options);
+    resetWith(options: options);
   }
 
-  void test_foreachInference_dynamic_disabled() {
+  test_foreachInference_dynamic_disabled() async {
     String code = r'''
 main() {
   var list = <int>[];
@@ -2184,11 +2249,11 @@
     v; // marker
   }
 }''';
-    assertPropagatedIterationType(code, typeProvider.dynamicType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.dynamicType, null);
+    await assertPropagatedIterationType(code, typeProvider.dynamicType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.dynamicType, null);
   }
 
-  void test_foreachInference_reusedVar_disabled() {
+  test_foreachInference_reusedVar_disabled() async {
     String code = r'''
 main() {
   var list = <int>[];
@@ -2197,11 +2262,11 @@
     v; // marker
   }
 }''';
-    assertPropagatedIterationType(code, typeProvider.dynamicType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.dynamicType, null);
+    await assertPropagatedIterationType(code, typeProvider.dynamicType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.dynamicType, null);
   }
 
-  void test_foreachInference_var() {
+  test_foreachInference_var() async {
     String code = r'''
 main() {
   var list = <int>[];
@@ -2209,11 +2274,11 @@
     v; // marker
   }
 }''';
-    assertPropagatedIterationType(code, typeProvider.intType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+    await assertPropagatedIterationType(code, typeProvider.intType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.intType, null);
   }
 
-  void test_foreachInference_var_iterable() {
+  test_foreachInference_var_iterable() async {
     String code = r'''
 main() {
   Iterable<int> list = <int>[];
@@ -2221,11 +2286,11 @@
     v; // marker
   }
 }''';
-    assertPropagatedIterationType(code, typeProvider.intType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+    await assertPropagatedIterationType(code, typeProvider.intType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.intType, null);
   }
 
-  void test_foreachInference_var_stream() {
+  test_foreachInference_var_stream() async {
     String code = r'''
 import 'dart:async';
 main() async {
@@ -2234,52 +2299,52 @@
     v; // marker
   }
 }''';
-    assertPropagatedIterationType(code, typeProvider.intType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+    await assertPropagatedIterationType(code, typeProvider.intType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.intType, null);
   }
 
-  void test_localVariableInference_bottom_disabled() {
+  test_localVariableInference_bottom_disabled() async {
     String code = r'''
 main() {
   var v = null;
   v; // marker
 }''';
-    assertPropagatedAssignedType(code, typeProvider.dynamicType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.dynamicType, null);
+    await assertPropagatedAssignedType(code, typeProvider.dynamicType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.dynamicType, null);
   }
 
-  void test_localVariableInference_constant() {
+  test_localVariableInference_constant() async {
     String code = r'''
 main() {
   var v = 3;
   v; // marker
 }''';
-    assertPropagatedAssignedType(code, typeProvider.intType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+    await assertPropagatedAssignedType(code, typeProvider.intType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.intType, null);
   }
 
-  void test_localVariableInference_declaredType_disabled() {
+  test_localVariableInference_declaredType_disabled() async {
     String code = r'''
 main() {
   dynamic v = 3;
   v; // marker
 }''';
-    assertPropagatedAssignedType(code, typeProvider.dynamicType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.dynamicType, null);
+    await assertPropagatedAssignedType(code, typeProvider.dynamicType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.dynamicType, null);
   }
 
-  void test_localVariableInference_noInitializer_disabled() {
+  test_localVariableInference_noInitializer_disabled() async {
     String code = r'''
 main() {
   var v;
   v = 3;
   v; // marker
 }''';
-    assertPropagatedAssignedType(code, typeProvider.dynamicType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.dynamicType, null);
+    await assertPropagatedAssignedType(code, typeProvider.dynamicType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.dynamicType, null);
   }
 
-  void test_localVariableInference_transitive_field_inferred_lexical() {
+  test_localVariableInference_transitive_field_inferred_lexical() async {
     String code = r'''
 class A {
   final x = 3;
@@ -2291,11 +2356,11 @@
 main() {
 }
 ''';
-    assertPropagatedAssignedType(code, typeProvider.intType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+    await assertPropagatedAssignedType(code, typeProvider.intType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.intType, null);
   }
 
-  void test_localVariableInference_transitive_field_inferred_reversed() {
+  test_localVariableInference_transitive_field_inferred_reversed() async {
     String code = r'''
 class A {
   f() {
@@ -2307,11 +2372,11 @@
 main() {
 }
 ''';
-    assertPropagatedAssignedType(code, typeProvider.intType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+    await assertPropagatedAssignedType(code, typeProvider.intType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.intType, null);
   }
 
-  void test_localVariableInference_transitive_field_lexical() {
+  test_localVariableInference_transitive_field_lexical() async {
     String code = r'''
 class A {
   int x = 3;
@@ -2323,11 +2388,11 @@
 main() {
 }
 ''';
-    assertPropagatedAssignedType(code, typeProvider.intType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+    await assertPropagatedAssignedType(code, typeProvider.intType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.intType, null);
   }
 
-  void test_localVariableInference_transitive_field_reversed() {
+  test_localVariableInference_transitive_field_reversed() async {
     String code = r'''
 class A {
   f() {
@@ -2339,33 +2404,33 @@
 main() {
 }
 ''';
-    assertPropagatedAssignedType(code, typeProvider.intType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+    await assertPropagatedAssignedType(code, typeProvider.intType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.intType, null);
   }
 
-  void test_localVariableInference_transitive_list_local() {
+  test_localVariableInference_transitive_list_local() async {
     String code = r'''
 main() {
   var x = <int>[3];
   var v = x[0];
   v; // marker
 }''';
-    assertPropagatedAssignedType(code, typeProvider.intType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+    await assertPropagatedAssignedType(code, typeProvider.intType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.intType, null);
   }
 
-  void test_localVariableInference_transitive_local() {
+  test_localVariableInference_transitive_local() async {
     String code = r'''
 main() {
   var x = 3;
   var v = x;
   v; // marker
 }''';
-    assertPropagatedAssignedType(code, typeProvider.intType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+    await assertPropagatedAssignedType(code, typeProvider.intType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.intType, null);
   }
 
-  void test_localVariableInference_transitive_toplevel_inferred_lexical() {
+  test_localVariableInference_transitive_toplevel_inferred_lexical() async {
     String code = r'''
 final x = 3;
 main() {
@@ -2373,11 +2438,11 @@
   v; // marker
 }
 ''';
-    assertPropagatedAssignedType(code, typeProvider.intType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+    await assertPropagatedAssignedType(code, typeProvider.intType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.intType, null);
   }
 
-  void test_localVariableInference_transitive_toplevel_inferred_reversed() {
+  test_localVariableInference_transitive_toplevel_inferred_reversed() async {
     String code = r'''
 main() {
   var v = x;
@@ -2385,11 +2450,11 @@
 }
 final x = 3;
 ''';
-    assertPropagatedAssignedType(code, typeProvider.intType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+    await assertPropagatedAssignedType(code, typeProvider.intType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.intType, null);
   }
 
-  void test_localVariableInference_transitive_toplevel_lexical() {
+  test_localVariableInference_transitive_toplevel_lexical() async {
     String code = r'''
 int x = 3;
 main() {
@@ -2397,11 +2462,11 @@
   v; // marker
 }
 ''';
-    assertPropagatedAssignedType(code, typeProvider.intType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+    await assertPropagatedAssignedType(code, typeProvider.intType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.intType, null);
   }
 
-  void test_localVariableInference_transitive_toplevel_reversed() {
+  test_localVariableInference_transitive_toplevel_reversed() async {
     String code = r'''
 main() {
   var v = x;
@@ -2409,7 +2474,14 @@
 }
 int x = 3;
 ''';
-    assertPropagatedAssignedType(code, typeProvider.intType, null);
-    assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+    await assertPropagatedAssignedType(code, typeProvider.intType, null);
+    await assertTypeOfMarkedExpression(code, typeProvider.intType, null);
   }
 }
+
+@reflectiveTest
+class StrongModeTypePropagationTest_Driver
+    extends StrongModeTypePropagationTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analyzer/test/generated/test_all.dart b/pkg/analyzer/test/generated/test_all.dart
index 37c9268..4bac8af 100644
--- a/pkg/analyzer/test/generated/test_all.dart
+++ b/pkg/analyzer/test/generated/test_all.dart
@@ -10,17 +10,21 @@
 import 'bazel_test.dart' as bazel_test;
 import 'checked_mode_compile_time_error_code_test.dart'
     as checked_mode_compile_time_error_code_test;
+import 'compile_time_error_code_driver_test.dart'
+    as compile_time_error_code_driver_test;
 import 'compile_time_error_code_test.dart' as compile_time_error_code_test;
 import 'constant_test.dart' as constant_test;
 import 'declaration_resolver_test.dart' as declaration_resolver_test;
 import 'element_resolver_test.dart' as element_resolver_test;
 import 'engine_test.dart' as engine_test;
 import 'error_suppression_test.dart' as error_suppression_test;
+import 'hint_code_driver_test.dart' as hint_code_driver_test;
 import 'hint_code_test.dart' as hint_code_test;
 import 'incremental_resolver_test.dart' as incremental_resolver_test;
 import 'inheritance_manager_test.dart' as inheritance_manager_test;
 import 'java_core_test.dart' as java_core_test;
 import 'java_io_test.dart' as java_io_test;
+import 'non_error_resolver_driver_test.dart' as non_error_resolver_driver_test;
 import 'non_error_resolver_test.dart' as non_error_resolver_test;
 import 'non_hint_code_test.dart' as non_hint_code_test;
 import 'parser_test.dart' as parser_test;
@@ -31,6 +35,8 @@
 import 'source_factory_test.dart' as source_factory_test;
 import 'static_type_analyzer_test.dart' as static_type_analyzer_test;
 import 'static_type_warning_code_test.dart' as static_type_warning_code_test;
+import 'static_warning_code_driver_test.dart'
+    as static_warning_code_driver_test;
 import 'static_warning_code_test.dart' as static_warning_code_test;
 import 'strong_mode_test.dart' as strong_mode_test;
 import 'type_system_test.dart' as type_system_test;
@@ -43,17 +49,20 @@
     all_the_rest.main();
     bazel_test.main();
     checked_mode_compile_time_error_code_test.main();
+    compile_time_error_code_driver_test.main();
     compile_time_error_code_test.main();
     constant_test.main();
     declaration_resolver_test.main();
     element_resolver_test.main();
     engine_test.main();
     error_suppression_test.main();
+    hint_code_driver_test.main();
     hint_code_test.main();
     incremental_resolver_test.main();
     inheritance_manager_test.main();
     java_core_test.main();
     java_io_test.main();
+    non_error_resolver_driver_test.main();
     non_error_resolver_test.main();
     non_hint_code_test.main();
     parser_test.main();
@@ -64,6 +73,7 @@
     source_factory_test.main();
     static_type_analyzer_test.main();
     static_type_warning_code_test.main();
+    static_warning_code_driver_test.main();
     static_warning_code_test.main();
     strong_mode_test.main();
     type_system_test.main();
diff --git a/pkg/analyzer/test/generated/utilities_test.dart b/pkg/analyzer/test/generated/utilities_test.dart
index 050a6c1..51c4a560 100644
--- a/pkg/analyzer/test/generated/utilities_test.dart
+++ b/pkg/analyzer/test/generated/utilities_test.dart
@@ -1631,9 +1631,9 @@
 }
 
 class Getter_NodeReplacerTest_test_asExpression
-    implements NodeReplacerTest_Getter<AsExpression, TypeName> {
+    implements NodeReplacerTest_Getter<AsExpression, TypeAnnotation> {
   @override
-  TypeName get(AsExpression node) => node.type;
+  TypeAnnotation get(AsExpression node) => node.type;
 }
 
 class Getter_NodeReplacerTest_test_asExpression_2
@@ -1715,9 +1715,9 @@
 }
 
 class Getter_NodeReplacerTest_test_catchClause_3
-    implements NodeReplacerTest_Getter<CatchClause, TypeName> {
+    implements NodeReplacerTest_Getter<CatchClause, TypeAnnotation> {
   @override
-  TypeName get(CatchClause node) => node.exceptionType;
+  TypeAnnotation get(CatchClause node) => node.exceptionType;
 }
 
 class Getter_NodeReplacerTest_test_classDeclaration
@@ -1883,9 +1883,9 @@
 }
 
 class Getter_NodeReplacerTest_test_declaredIdentifier
-    implements NodeReplacerTest_Getter<DeclaredIdentifier, TypeName> {
+    implements NodeReplacerTest_Getter<DeclaredIdentifier, TypeAnnotation> {
   @override
-  TypeName get(DeclaredIdentifier node) => node.type;
+  TypeAnnotation get(DeclaredIdentifier node) => node.type;
 }
 
 class Getter_NodeReplacerTest_test_declaredIdentifier_2
@@ -1965,9 +1965,9 @@
 }
 
 class Getter_NodeReplacerTest_test_fieldFormalParameter_2
-    implements NodeReplacerTest_Getter<FieldFormalParameter, TypeName> {
+    implements NodeReplacerTest_Getter<FieldFormalParameter, TypeAnnotation> {
   @override
-  TypeName get(FieldFormalParameter node) => node.type;
+  TypeAnnotation get(FieldFormalParameter node) => node.type;
 }
 
 class Getter_NodeReplacerTest_test_forEachStatement_withIdentifier
@@ -2043,9 +2043,9 @@
 }
 
 class Getter_NodeReplacerTest_test_functionDeclaration
-    implements NodeReplacerTest_Getter<FunctionDeclaration, TypeName> {
+    implements NodeReplacerTest_Getter<FunctionDeclaration, TypeAnnotation> {
   @override
-  TypeName get(FunctionDeclaration node) => node.returnType;
+  TypeAnnotation get(FunctionDeclaration node) => node.returnType;
 }
 
 class Getter_NodeReplacerTest_test_functionDeclaration_2
@@ -2110,9 +2110,9 @@
 }
 
 class Getter_NodeReplacerTest_test_functionTypeAlias_3
-    implements NodeReplacerTest_Getter<FunctionTypeAlias, TypeName> {
+    implements NodeReplacerTest_Getter<FunctionTypeAlias, TypeAnnotation> {
   @override
-  TypeName get(FunctionTypeAlias node) => node.returnType;
+  TypeAnnotation get(FunctionTypeAlias node) => node.returnType;
 }
 
 class Getter_NodeReplacerTest_test_functionTypeAlias_4
@@ -2122,9 +2122,10 @@
 }
 
 class Getter_NodeReplacerTest_test_functionTypedFormalParameter
-    implements NodeReplacerTest_Getter<FunctionTypedFormalParameter, TypeName> {
+    implements
+        NodeReplacerTest_Getter<FunctionTypedFormalParameter, TypeAnnotation> {
   @override
-  TypeName get(FunctionTypedFormalParameter node) => node.returnType;
+  TypeAnnotation get(FunctionTypedFormalParameter node) => node.returnType;
 }
 
 class Getter_NodeReplacerTest_test_functionTypedFormalParameter_2
@@ -2198,9 +2199,9 @@
 }
 
 class Getter_NodeReplacerTest_test_isExpression_2
-    implements NodeReplacerTest_Getter<IsExpression, TypeName> {
+    implements NodeReplacerTest_Getter<IsExpression, TypeAnnotation> {
   @override
-  TypeName get(IsExpression node) => node.type;
+  TypeAnnotation get(IsExpression node) => node.type;
 }
 
 class Getter_NodeReplacerTest_test_label
@@ -2234,9 +2235,9 @@
 }
 
 class Getter_NodeReplacerTest_test_methodDeclaration
-    implements NodeReplacerTest_Getter<MethodDeclaration, TypeName> {
+    implements NodeReplacerTest_Getter<MethodDeclaration, TypeAnnotation> {
   @override
-  TypeName get(MethodDeclaration node) => node.returnType;
+  TypeAnnotation get(MethodDeclaration node) => node.returnType;
 }
 
 class Getter_NodeReplacerTest_test_methodDeclaration_2
@@ -2371,9 +2372,9 @@
 }
 
 class Getter_NodeReplacerTest_test_simpleFormalParameter
-    implements NodeReplacerTest_Getter<SimpleFormalParameter, TypeName> {
+    implements NodeReplacerTest_Getter<SimpleFormalParameter, TypeAnnotation> {
   @override
-  TypeName get(SimpleFormalParameter node) => node.type;
+  TypeAnnotation get(SimpleFormalParameter node) => node.type;
 }
 
 class Getter_NodeReplacerTest_test_superConstructorInvocation
@@ -2442,9 +2443,9 @@
 }
 
 class Getter_NodeReplacerTest_test_typeParameter
-    implements NodeReplacerTest_Getter<TypeParameter, TypeName> {
+    implements NodeReplacerTest_Getter<TypeParameter, TypeAnnotation> {
   @override
-  TypeName get(TypeParameter node) => node.bound;
+  TypeAnnotation get(TypeParameter node) => node.bound;
 }
 
 class Getter_NodeReplacerTest_test_typeParameter_2
@@ -2466,9 +2467,10 @@
 }
 
 class Getter_NodeReplacerTest_test_variableDeclarationList
-    implements NodeReplacerTest_Getter<VariableDeclarationList, TypeName> {
+    implements
+        NodeReplacerTest_Getter<VariableDeclarationList, TypeAnnotation> {
   @override
-  TypeName get(VariableDeclarationList node) => node.type;
+  TypeAnnotation get(VariableDeclarationList node) => node.type;
 }
 
 class Getter_NodeReplacerTest_test_variableDeclarationStatement
@@ -2764,11 +2766,11 @@
 }
 
 class ListGetter_NodeReplacerTest_test_typeArgumentList
-    extends NodeReplacerTest_ListGetter<TypeArgumentList, TypeName> {
+    extends NodeReplacerTest_ListGetter<TypeArgumentList, TypeAnnotation> {
   ListGetter_NodeReplacerTest_test_typeArgumentList(int arg0) : super(arg0);
 
   @override
-  NodeList<TypeName> getList(TypeArgumentList node) => node.arguments;
+  NodeList<TypeAnnotation> getList(TypeArgumentList node) => node.arguments;
 }
 
 class ListGetter_NodeReplacerTest_test_typeParameterList
diff --git a/pkg/analyzer/test/src/dart/analysis/base.dart b/pkg/analyzer/test/src/dart/analysis/base.dart
index bb716cf..341d4f6 100644
--- a/pkg/analyzer/test/src/dart/analysis/base.dart
+++ b/pkg/analyzer/test/src/dart/analysis/base.dart
@@ -17,7 +17,7 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:test/test.dart';
 
-import '../../context/mock_sdk.dart';
+import 'physical_sdk.dart';
 
 /**
  * Finds an [Element] with the given [name].
@@ -44,8 +44,6 @@
 typedef void _ElementVisitorFunction(Element element);
 
 class BaseAnalysisDriverTest {
-  static final MockSdk sdk = new MockSdk();
-
   final MemoryResourceProvider provider = new MemoryResourceProvider();
   final ByteStore byteStore = new MemoryByteStore();
   final FileContentOverlay contentOverlay = new FileContentOverlay();
@@ -102,7 +100,6 @@
   }
 
   void setUp() {
-    new MockSdk();
     testProject = _p('/test/lib');
     testFile = _p('/test/lib/test.dart');
     logger = new PerformanceLog(logBuffer);
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index 05b7cb2..cc79745 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -28,8 +28,8 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../context/mock_sdk.dart';
 import 'base.dart';
+import 'physical_sdk.dart';
 
 main() {
   defineReflectiveSuite(() {
@@ -54,8 +54,6 @@
 
 @reflectiveTest
 class AnalysisDriverSchedulerTest {
-  static final MockSdk sdk = new MockSdk();
-
   final MemoryResourceProvider provider = new MemoryResourceProvider();
   final ByteStore byteStore = new MemoryByteStore();
   final FileContentOverlay contentOverlay = new FileContentOverlay();
diff --git a/pkg/analyzer/test/src/dart/analysis/physical_sdk.dart b/pkg/analyzer/test/src/dart/analysis/physical_sdk.dart
new file mode 100644
index 0000000..665c80a
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/analysis/physical_sdk.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer/src/dart/sdk/sdk.dart';
+import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
+import 'package:analyzer/src/generated/sdk.dart';
+
+final DartSdk sdk = new FolderBasedDartSdk(PhysicalResourceProvider.INSTANCE,
+    FolderBasedDartSdk.defaultSdkDirectory(PhysicalResourceProvider.INSTANCE))
+  ..useSummary = true;
+
+final DartSdk strongSdk = new FolderBasedDartSdk(PhysicalResourceProvider.INSTANCE,
+    FolderBasedDartSdk.defaultSdkDirectory(PhysicalResourceProvider.INSTANCE))
+  ..analysisOptions = (new AnalysisOptionsImpl()..strongMode = true)
+  ..useSummary = true;
diff --git a/pkg/analyzer/test/src/dart/ast/utilities_test.dart b/pkg/analyzer/test/src/dart/ast/utilities_test.dart
index 8ccaa8a..f4016bc 100644
--- a/pkg/analyzer/test/src/dart/ast/utilities_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/utilities_test.dart
@@ -196,23 +196,13 @@
     expect(value, true);
   }
 
-  void test_binary_plus_string() {
-    Object value = _getConstantValue("'hello ' + 'world'");
-    expect(value, 'hello world');
-  }
-
   void test_binary_plus_double() {
     Object value = _getConstantValue("2.3 + 3.2");
     expect(value, 2.3 + 3.2);
   }
 
-  void test_binary_plus_integer() {
-    Object value = _getConstantValue("2 + 3");
-    expect(value, 5);
-  }
-
-  void test_binary_plus_string_int() {
-    Object value = _getConstantValue("5 + 'world'");
+  void test_binary_plus_double_string() {
+    Object value = _getConstantValue("'world' + 5.5");
     expect(value, ConstantEvaluator.NOT_A_CONSTANT);
   }
 
@@ -221,9 +211,14 @@
     expect(value, ConstantEvaluator.NOT_A_CONSTANT);
   }
 
-  void test_binary_plus_double_string() {
-    Object value = _getConstantValue("'world' + 5.5");
-    expect(value, ConstantEvaluator.NOT_A_CONSTANT);
+  void test_binary_plus_integer() {
+    Object value = _getConstantValue("2 + 3");
+    expect(value, 5);
+  }
+
+  void test_binary_plus_string() {
+    Object value = _getConstantValue("'hello ' + 'world'");
+    expect(value, 'hello world');
   }
 
   void test_binary_plus_string_double() {
@@ -231,6 +226,11 @@
     expect(value, ConstantEvaluator.NOT_A_CONSTANT);
   }
 
+  void test_binary_plus_string_int() {
+    Object value = _getConstantValue("5 + 'world'");
+    expect(value, ConstantEvaluator.NOT_A_CONSTANT);
+  }
+
   void test_binary_remainder_double() {
     Object value = _getConstantValue("3.2 % 2.3");
     expect(value, 3.2 % 2.3);
@@ -372,7 +372,7 @@
     CompilationUnit unit = ParserTestCase.parseCompilationUnit(code);
     TopLevelVariableDeclaration declaration = unit.declarations[0];
     VariableDeclarationList variableList = declaration.variables;
-    Identifier typeName = variableList.type.name;
+    Identifier typeName = (variableList.type as TypeName).name;
     SimpleIdentifier varName = variableList.variables[0].name;
     expect(new NodeLocator2(0).searchWithin(unit), same(unit));
     expect(new NodeLocator2(1).searchWithin(unit), same(typeName));
@@ -393,7 +393,7 @@
     CompilationUnit unit = ParserTestCase.parseCompilationUnit(code);
     TopLevelVariableDeclaration declaration = unit.declarations[0];
     VariableDeclarationList variableList = declaration.variables;
-    Identifier typeName = variableList.type.name;
+    Identifier typeName = (variableList.type as TypeName).name;
     SimpleIdentifier varName = variableList.variables[0].name;
     expect(new NodeLocator2(-1, 2).searchWithin(unit), isNull);
     expect(new NodeLocator2(0, 2).searchWithin(unit), same(unit));
@@ -696,9 +696,9 @@
         .functionExpressionInvocation(AstTestFactory.identifier3("f"));
     ClassElement elementT = ElementFactory.classElement2('T');
     fromNode.typeArguments = AstTestFactory
-        .typeArgumentList(<TypeName>[AstTestFactory.typeName(elementT)]);
+        .typeArgumentList(<TypeAnnotation>[AstTestFactory.typeName(elementT)]);
     toNode.typeArguments = AstTestFactory
-        .typeArgumentList(<TypeName>[AstTestFactory.typeName4('T')]);
+        .typeArgumentList(<TypeAnnotation>[AstTestFactory.typeName4('T')]);
 
     _copyAndVerifyInvocation(fromNode, toNode);
 
@@ -831,9 +831,9 @@
     MethodInvocation toNode = AstTestFactory.methodInvocation2("m");
     ClassElement elementT = ElementFactory.classElement2('T');
     fromNode.typeArguments = AstTestFactory
-        .typeArgumentList(<TypeName>[AstTestFactory.typeName(elementT)]);
+        .typeArgumentList(<TypeAnnotation>[AstTestFactory.typeName(elementT)]);
     toNode.typeArguments = AstTestFactory
-        .typeArgumentList(<TypeName>[AstTestFactory.typeName4('T')]);
+        .typeArgumentList(<TypeAnnotation>[AstTestFactory.typeName4('T')]);
     _copyAndVerifyInvocation(fromNode, toNode);
   }
 
@@ -1130,12 +1130,12 @@
     expect(toNode.staticType, same(staticType));
     expect(toNode.propagatedInvokeType, same(propagatedInvokeType));
     expect(toNode.staticInvokeType, same(staticInvokeType));
-    List<TypeName> fromTypeArguments = toNode.typeArguments.arguments;
-    List<TypeName> toTypeArguments = fromNode.typeArguments.arguments;
+    List<TypeAnnotation> fromTypeArguments = toNode.typeArguments.arguments;
+    List<TypeAnnotation> toTypeArguments = fromNode.typeArguments.arguments;
     if (fromTypeArguments != null) {
       for (int i = 0; i < fromTypeArguments.length; i++) {
-        TypeName toArgument = fromTypeArguments[i];
-        TypeName fromArgument = toTypeArguments[i];
+        TypeAnnotation toArgument = fromTypeArguments[i];
+        TypeAnnotation fromArgument = toTypeArguments[i];
         expect(toArgument.type, same(fromArgument.type));
       }
     }
diff --git a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
index 665dbb9..5d0bb32 100644
--- a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
@@ -4,6 +4,8 @@
 
 library analyzer.test.constant_test;
 
+import 'dart:async';
+
 import 'package:analyzer/context/declared_variables.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/standard_resolution_map.dart';
@@ -92,8 +94,8 @@
 
 @reflectiveTest
 class ConstantValueComputerTest extends ResolverTestCase {
-  void test_annotation_constConstructor() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_annotation_constConstructor() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 class A {
   final int i;
   const A(this.i);
@@ -110,8 +112,8 @@
     _assertIntField(annotationFields, 'i', 5);
   }
 
-  void test_annotation_constConstructor_named() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_annotation_constConstructor_named() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 class A {
   final int i;
   const A.named(this.i);
@@ -128,10 +130,10 @@
     _assertIntField(annotationFields, 'i', 5);
   }
 
-  void test_annotation_constConstructor_noArgs() {
+  test_annotation_constConstructor_noArgs() async {
     // Failing to pass arguments to an annotation which is a constant
     // constructor is illegal, but shouldn't crash analysis.
-    CompilationUnit compilationUnit = resolveSource(r'''
+    CompilationUnit compilationUnit = await resolveSource(r'''
 class A {
   final int i;
   const A(this.i);
@@ -145,10 +147,10 @@
     _evaluateAnnotation(compilationUnit, "C", "f");
   }
 
-  void test_annotation_constConstructor_noArgs_named() {
+  test_annotation_constConstructor_noArgs_named() async {
     // Failing to pass arguments to an annotation which is a constant
     // constructor is illegal, but shouldn't crash analysis.
-    CompilationUnit compilationUnit = resolveSource(r'''
+    CompilationUnit compilationUnit = await resolveSource(r'''
 class A {
   final int i;
   const A.named(this.i);
@@ -162,10 +164,10 @@
     _evaluateAnnotation(compilationUnit, "C", "f");
   }
 
-  void test_annotation_nonConstConstructor() {
+  test_annotation_nonConstConstructor() async {
     // Calling a non-const constructor from an annotation that is illegal, but
     // shouldn't crash analysis.
-    CompilationUnit compilationUnit = resolveSource(r'''
+    CompilationUnit compilationUnit = await resolveSource(r'''
 class A {
   final int i;
   A(this.i);
@@ -179,8 +181,8 @@
     _evaluateAnnotation(compilationUnit, "C", "f");
   }
 
-  void test_annotation_staticConst() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_annotation_staticConst() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 class C {
   static const int i = 5;
 
@@ -193,10 +195,10 @@
     expect(_assertValidInt(result), 5);
   }
 
-  void test_annotation_staticConst_args() {
+  test_annotation_staticConst_args() async {
     // Applying arguments to an annotation that is a static const is
     // illegal, but shouldn't crash analysis.
-    CompilationUnit compilationUnit = resolveSource(r'''
+    CompilationUnit compilationUnit = await resolveSource(r'''
 class C {
   static const int i = 5;
 
@@ -207,8 +209,8 @@
     _evaluateAnnotation(compilationUnit, "C", "f");
   }
 
-  void test_annotation_staticConst_otherClass() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_annotation_staticConst_otherClass() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 class A {
   static const int i = 5;
 }
@@ -223,10 +225,10 @@
     expect(_assertValidInt(result), 5);
   }
 
-  void test_annotation_staticConst_otherClass_args() {
+  test_annotation_staticConst_otherClass_args() async {
     // Applying arguments to an annotation that is a static const is
     // illegal, but shouldn't crash analysis.
-    CompilationUnit compilationUnit = resolveSource(r'''
+    CompilationUnit compilationUnit = await resolveSource(r'''
 class A {
   static const int i = 5;
 }
@@ -239,8 +241,8 @@
     _evaluateAnnotation(compilationUnit, "C", "f");
   }
 
-  void test_annotation_topLevelVariable() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_annotation_topLevelVariable() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const int i = 5;
 class C {
   @i
@@ -252,10 +254,10 @@
     expect(_assertValidInt(result), 5);
   }
 
-  void test_annotation_topLevelVariable_args() {
+  test_annotation_topLevelVariable_args() async {
     // Applying arguments to an annotation that is a top-level variable is
     // illegal, but shouldn't crash analysis.
-    CompilationUnit compilationUnit = resolveSource(r'''
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const int i = 5;
 class C {
   @i(1)
@@ -265,7 +267,7 @@
     _evaluateAnnotation(compilationUnit, "C", "f");
   }
 
-  void test_computeValues_cycle() {
+  test_computeValues_cycle() async {
     TestLogger logger = new TestLogger();
     AnalysisEngine.instance.logger = logger;
     try {
@@ -291,7 +293,7 @@
     }
   }
 
-  void test_computeValues_dependentVariables() {
+  test_computeValues_dependentVariables() async {
     Source source = addSource(r'''
 const int b = a;
 const int a = 0;''');
@@ -308,12 +310,12 @@
     _validate(true, (members[1] as TopLevelVariableDeclaration).variables);
   }
 
-  void test_computeValues_empty() {
+  test_computeValues_empty() async {
     ConstantValueComputer computer = _makeConstantValueComputer();
     computer.computeValues();
   }
 
-  void test_computeValues_multipleSources() {
+  test_computeValues_multipleSources() async {
     Source librarySource = addNamedSource(
         "/lib.dart",
         r'''
@@ -350,7 +352,7 @@
     _validate(true, (partMembers[1] as TopLevelVariableDeclaration).variables);
   }
 
-  void test_computeValues_singleVariable() {
+  test_computeValues_singleVariable() async {
     Source source = addSource("const int a = 0;");
     LibraryElement libraryElement = resolve2(source);
     CompilationUnit unit =
@@ -364,7 +366,7 @@
     _validate(true, (members[0] as TopLevelVariableDeclaration).variables);
   }
 
-  void test_computeValues_value_depends_on_enum() {
+  test_computeValues_value_depends_on_enum() async {
     Source source = addSource('''
 enum E { id0, id1 }
 const E e = E.id0;
@@ -381,18 +383,18 @@
     _validate(true, declaration.variables);
   }
 
-  void test_dependencyOnConstructor() {
+  test_dependencyOnConstructor() async {
     // x depends on "const A()"
-    _assertProperDependencies(r'''
+    await _assertProperDependencies(r'''
 class A {
   const A();
 }
 const x = const A();''');
   }
 
-  void test_dependencyOnConstructorArgument() {
+  test_dependencyOnConstructorArgument() async {
     // "const A(x)" depends on x
-    _assertProperDependencies(r'''
+    await _assertProperDependencies(r'''
 class A {
   const A(this.next);
   final A next;
@@ -401,9 +403,9 @@
 const A y = const A(x);''');
   }
 
-  void test_dependencyOnConstructorArgument_unresolvedConstructor() {
+  test_dependencyOnConstructorArgument_unresolvedConstructor() async {
     // "const A.a(x)" depends on x even if the constructor A.a can't be found.
-    _assertProperDependencies(
+    await _assertProperDependencies(
         r'''
 class A {
 }
@@ -412,9 +414,9 @@
         [CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR]);
   }
 
-  void test_dependencyOnConstructorInitializer() {
+  test_dependencyOnConstructorInitializer() async {
     // "const A()" depends on x
-    _assertProperDependencies(r'''
+    await _assertProperDependencies(r'''
 const int x = 1;
 class A {
   const A() : v = x;
@@ -422,9 +424,9 @@
 }''');
   }
 
-  void test_dependencyOnExplicitSuperConstructor() {
+  test_dependencyOnExplicitSuperConstructor() async {
     // b depends on B() depends on A()
-    _assertProperDependencies(r'''
+    await _assertProperDependencies(r'''
 class A {
   const A(this.x);
   final int x;
@@ -435,9 +437,9 @@
 const B b = const B();''');
   }
 
-  void test_dependencyOnExplicitSuperConstructorParameters() {
+  test_dependencyOnExplicitSuperConstructorParameters() async {
     // b depends on B() depends on i
-    _assertProperDependencies(r'''
+    await _assertProperDependencies(r'''
 class A {
   const A(this.x);
   final int x;
@@ -449,9 +451,9 @@
 const int i = 5;''');
   }
 
-  void test_dependencyOnFactoryRedirect() {
+  test_dependencyOnFactoryRedirect() async {
     // a depends on A.foo() depends on A.bar()
-    _assertProperDependencies(r'''
+    await _assertProperDependencies(r'''
 const A a = const A.foo();
 class A {
   factory const A.foo() = A.bar;
@@ -459,8 +461,8 @@
 }''');
   }
 
-  void test_dependencyOnFactoryRedirectWithTypeParams() {
-    _assertProperDependencies(r'''
+  test_dependencyOnFactoryRedirectWithTypeParams() async {
+    await _assertProperDependencies(r'''
 class A {
   const factory A(var a) = B<int>;
 }
@@ -473,9 +475,9 @@
 const A a = const A(10);''');
   }
 
-  void test_dependencyOnImplicitSuperConstructor() {
+  test_dependencyOnImplicitSuperConstructor() async {
     // b depends on B() depends on A()
-    _assertProperDependencies(r'''
+    await _assertProperDependencies(r'''
 class A {
   const A() : x = 5;
   final int x;
@@ -486,9 +488,9 @@
 const B b = const B();''');
   }
 
-  void test_dependencyOnInitializedFinal() {
+  test_dependencyOnInitializedFinal() async {
     // a depends on A() depends on A.x
-    _assertProperDependencies('''
+    await _assertProperDependencies('''
 class A {
   const A();
   final int x = 1;
@@ -497,11 +499,11 @@
 ''');
   }
 
-  void test_dependencyOnInitializedNonStaticConst() {
+  test_dependencyOnInitializedNonStaticConst() async {
     // Even though non-static consts are not allowed by the language, we need
     // to handle them for error recovery purposes.
     // a depends on A() depends on A.x
-    _assertProperDependencies(
+    await _assertProperDependencies(
         '''
 class A {
   const A();
@@ -512,9 +514,9 @@
         [CompileTimeErrorCode.CONST_INSTANCE_FIELD]);
   }
 
-  void test_dependencyOnNonFactoryRedirect() {
+  test_dependencyOnNonFactoryRedirect() async {
     // a depends on A.foo() depends on A.bar()
-    _assertProperDependencies(r'''
+    await _assertProperDependencies(r'''
 const A a = const A.foo();
 class A {
   const A.foo() : this.bar();
@@ -522,9 +524,9 @@
 }''');
   }
 
-  void test_dependencyOnNonFactoryRedirect_arg() {
+  test_dependencyOnNonFactoryRedirect_arg() async {
     // a depends on A.foo() depends on b
-    _assertProperDependencies(r'''
+    await _assertProperDependencies(r'''
 const A a = const A.foo();
 const int b = 1;
 class A {
@@ -534,9 +536,9 @@
 }''');
   }
 
-  void test_dependencyOnNonFactoryRedirect_defaultValue() {
+  test_dependencyOnNonFactoryRedirect_defaultValue() async {
     // a depends on A.foo() depends on A.bar() depends on b
-    _assertProperDependencies(r'''
+    await _assertProperDependencies(r'''
 const A a = const A.foo();
 const int b = 1;
 class A {
@@ -546,10 +548,10 @@
 }''');
   }
 
-  void test_dependencyOnNonFactoryRedirect_toMissing() {
+  test_dependencyOnNonFactoryRedirect_toMissing() async {
     // a depends on A.foo() which depends on nothing, since A.bar() is
     // missing.
-    _assertProperDependencies(
+    await _assertProperDependencies(
         r'''
 const A a = const A.foo();
 class A {
@@ -558,10 +560,10 @@
         [CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR]);
   }
 
-  void test_dependencyOnNonFactoryRedirect_toNonConst() {
+  test_dependencyOnNonFactoryRedirect_toNonConst() async {
     // a depends on A.foo() which depends on nothing, since A.bar() is
     // non-const.
-    _assertProperDependencies(r'''
+    await _assertProperDependencies(r'''
 const A a = const A.foo();
 class A {
   const A.foo() : this.bar();
@@ -569,9 +571,9 @@
 }''');
   }
 
-  void test_dependencyOnNonFactoryRedirect_unnamed() {
+  test_dependencyOnNonFactoryRedirect_unnamed() async {
     // a depends on A.foo() depends on A()
-    _assertProperDependencies(r'''
+    await _assertProperDependencies(r'''
 const A a = const A.foo();
 class A {
   const A.foo() : this();
@@ -579,9 +581,9 @@
 }''');
   }
 
-  void test_dependencyOnOptionalParameterDefault() {
+  test_dependencyOnOptionalParameterDefault() async {
     // a depends on A() depends on B()
-    _assertProperDependencies(r'''
+    await _assertProperDependencies(r'''
 class A {
   const A([x = const B()]) : b = x;
   final B b;
@@ -592,15 +594,15 @@
 const A a = const A();''');
   }
 
-  void test_dependencyOnVariable() {
+  test_dependencyOnVariable() async {
     // x depends on y
-    _assertProperDependencies(r'''
+    await _assertProperDependencies(r'''
 const x = y + 1;
 const y = 2;''');
   }
 
-  void test_final_initialized_at_declaration() {
-    CompilationUnit compilationUnit = resolveSource('''
+  test_final_initialized_at_declaration() async {
+    CompilationUnit compilationUnit = await resolveSource('''
 class A {
   final int i = 123;
   const A();
@@ -615,103 +617,115 @@
     _assertIntField(fields, "i", 123);
   }
 
-  void test_fromEnvironment_bool_default_false() {
-    expect(_assertValidBool(_check_fromEnvironment_bool(null, "false")), false);
-  }
-
-  void test_fromEnvironment_bool_default_overridden() {
-    expect(
-        _assertValidBool(_check_fromEnvironment_bool("false", "true")), false);
-  }
-
-  void test_fromEnvironment_bool_default_parseError() {
-    expect(_assertValidBool(_check_fromEnvironment_bool("parseError", "true")),
-        true);
-  }
-
-  void test_fromEnvironment_bool_default_true() {
-    expect(_assertValidBool(_check_fromEnvironment_bool(null, "true")), true);
-  }
-
-  void test_fromEnvironment_bool_false() {
-    expect(_assertValidBool(_check_fromEnvironment_bool("false", null)), false);
-  }
-
-  void test_fromEnvironment_bool_parseError() {
-    expect(_assertValidBool(_check_fromEnvironment_bool("parseError", null)),
+  test_fromEnvironment_bool_default_false() async {
+    expect(_assertValidBool(await _check_fromEnvironment_bool(null, "false")),
         false);
   }
 
-  void test_fromEnvironment_bool_true() {
-    expect(_assertValidBool(_check_fromEnvironment_bool("true", null)), true);
+  test_fromEnvironment_bool_default_overridden() async {
+    expect(_assertValidBool(await _check_fromEnvironment_bool("false", "true")),
+        false);
   }
 
-  void test_fromEnvironment_bool_undeclared() {
-    _assertValidUnknown(_check_fromEnvironment_bool(null, null));
-  }
-
-  void test_fromEnvironment_int_default_overridden() {
-    expect(_assertValidInt(_check_fromEnvironment_int("234", "123")), 234);
-  }
-
-  void test_fromEnvironment_int_default_parseError() {
+  test_fromEnvironment_bool_default_parseError() async {
     expect(
-        _assertValidInt(_check_fromEnvironment_int("parseError", "123")), 123);
+        _assertValidBool(
+            await _check_fromEnvironment_bool("parseError", "true")),
+        true);
   }
 
-  void test_fromEnvironment_int_default_undeclared() {
-    expect(_assertValidInt(_check_fromEnvironment_int(null, "123")), 123);
+  test_fromEnvironment_bool_default_true() async {
+    expect(_assertValidBool(await _check_fromEnvironment_bool(null, "true")),
+        true);
   }
 
-  void test_fromEnvironment_int_ok() {
-    expect(_assertValidInt(_check_fromEnvironment_int("234", null)), 234);
+  test_fromEnvironment_bool_false() async {
+    expect(_assertValidBool(await _check_fromEnvironment_bool("false", null)),
+        false);
   }
 
-  void test_fromEnvironment_int_parseError() {
-    _assertValidNull(_check_fromEnvironment_int("parseError", null));
+  test_fromEnvironment_bool_parseError() async {
+    expect(
+        _assertValidBool(await _check_fromEnvironment_bool("parseError", null)),
+        false);
   }
 
-  void test_fromEnvironment_int_parseError_nullDefault() {
-    _assertValidNull(_check_fromEnvironment_int("parseError", "null"));
+  test_fromEnvironment_bool_true() async {
+    expect(_assertValidBool(await _check_fromEnvironment_bool("true", null)),
+        true);
   }
 
-  void test_fromEnvironment_int_undeclared() {
-    _assertValidUnknown(_check_fromEnvironment_int(null, null));
+  test_fromEnvironment_bool_undeclared() async {
+    _assertValidUnknown(await _check_fromEnvironment_bool(null, null));
   }
 
-  void test_fromEnvironment_int_undeclared_nullDefault() {
-    _assertValidNull(_check_fromEnvironment_int(null, "null"));
+  test_fromEnvironment_int_default_overridden() async {
+    expect(
+        _assertValidInt(await _check_fromEnvironment_int("234", "123")), 234);
   }
 
-  void test_fromEnvironment_string_default_overridden() {
-    expect(_assertValidString(_check_fromEnvironment_string("abc", "'def'")),
+  test_fromEnvironment_int_default_parseError() async {
+    expect(
+        _assertValidInt(await _check_fromEnvironment_int("parseError", "123")),
+        123);
+  }
+
+  test_fromEnvironment_int_default_undeclared() async {
+    expect(_assertValidInt(await _check_fromEnvironment_int(null, "123")), 123);
+  }
+
+  test_fromEnvironment_int_ok() async {
+    expect(_assertValidInt(await _check_fromEnvironment_int("234", null)), 234);
+  }
+
+  test_fromEnvironment_int_parseError() async {
+    _assertValidNull(await _check_fromEnvironment_int("parseError", null));
+  }
+
+  test_fromEnvironment_int_parseError_nullDefault() async {
+    _assertValidNull(await _check_fromEnvironment_int("parseError", "null"));
+  }
+
+  test_fromEnvironment_int_undeclared() async {
+    _assertValidUnknown(await _check_fromEnvironment_int(null, null));
+  }
+
+  test_fromEnvironment_int_undeclared_nullDefault() async {
+    _assertValidNull(await _check_fromEnvironment_int(null, "null"));
+  }
+
+  test_fromEnvironment_string_default_overridden() async {
+    expect(
+        _assertValidString(await _check_fromEnvironment_string("abc", "'def'")),
         "abc");
   }
 
-  void test_fromEnvironment_string_default_undeclared() {
-    expect(_assertValidString(_check_fromEnvironment_string(null, "'def'")),
+  test_fromEnvironment_string_default_undeclared() async {
+    expect(
+        _assertValidString(await _check_fromEnvironment_string(null, "'def'")),
         "def");
   }
 
-  void test_fromEnvironment_string_empty() {
-    expect(_assertValidString(_check_fromEnvironment_string("", null)), "");
-  }
-
-  void test_fromEnvironment_string_ok() {
+  test_fromEnvironment_string_empty() async {
     expect(
-        _assertValidString(_check_fromEnvironment_string("abc", null)), "abc");
+        _assertValidString(await _check_fromEnvironment_string("", null)), "");
   }
 
-  void test_fromEnvironment_string_undeclared() {
-    _assertValidUnknown(_check_fromEnvironment_string(null, null));
+  test_fromEnvironment_string_ok() async {
+    expect(_assertValidString(await _check_fromEnvironment_string("abc", null)),
+        "abc");
   }
 
-  void test_fromEnvironment_string_undeclared_nullDefault() {
-    _assertValidNull(_check_fromEnvironment_string(null, "null"));
+  test_fromEnvironment_string_undeclared() async {
+    _assertValidUnknown(await _check_fromEnvironment_string(null, null));
   }
 
-  void test_instanceCreationExpression_computedField() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_fromEnvironment_string_undeclared_nullDefault() async {
+    _assertValidNull(await _check_fromEnvironment_string(null, "null"));
+  }
+
+  test_instanceCreationExpression_computedField() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const A(4, 5);
 class A {
   const A(int i, int j) : k = 2 * i + j;
@@ -724,28 +738,24 @@
     _assertIntField(fields, "k", 13);
   }
 
-  void
-      test_instanceCreationExpression_computedField_namedOptionalWithDefault() {
-    _checkInstanceCreationOptionalParams(false, true, true);
+  test_instanceCreationExpression_computedField_namedOptionalWithDefault() async {
+    await _checkInstanceCreationOptionalParams(false, true, true);
   }
 
-  void
-      test_instanceCreationExpression_computedField_namedOptionalWithoutDefault() {
-    _checkInstanceCreationOptionalParams(false, true, false);
+  test_instanceCreationExpression_computedField_namedOptionalWithoutDefault() async {
+    await _checkInstanceCreationOptionalParams(false, true, false);
   }
 
-  void
-      test_instanceCreationExpression_computedField_unnamedOptionalWithDefault() {
-    _checkInstanceCreationOptionalParams(false, false, true);
+  test_instanceCreationExpression_computedField_unnamedOptionalWithDefault() async {
+    await _checkInstanceCreationOptionalParams(false, false, true);
   }
 
-  void
-      test_instanceCreationExpression_computedField_unnamedOptionalWithoutDefault() {
-    _checkInstanceCreationOptionalParams(false, false, false);
+  test_instanceCreationExpression_computedField_unnamedOptionalWithoutDefault() async {
+    await _checkInstanceCreationOptionalParams(false, false, false);
   }
 
-  void test_instanceCreationExpression_computedField_usesConstConstructor() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_instanceCreationExpression_computedField_usesConstConstructor() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const A(3);
 class A {
   const A(int i) : b = const B(4);
@@ -765,8 +775,8 @@
     _assertIntField(fieldsOfB, "k", 4);
   }
 
-  void test_instanceCreationExpression_computedField_usesStaticConst() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_instanceCreationExpression_computedField_usesStaticConst() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const A(3);
 class A {
   const A(int i) : k = i + B.bar;
@@ -782,8 +792,8 @@
     _assertIntField(fields, "k", 7);
   }
 
-  void test_instanceCreationExpression_computedField_usesTopLevelConst() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_instanceCreationExpression_computedField_usesTopLevelConst() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const A(3);
 const bar = 4;
 class A {
@@ -797,8 +807,8 @@
     _assertIntField(fields, "k", 7);
   }
 
-  void test_instanceCreationExpression_explicitSuper() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_instanceCreationExpression_explicitSuper() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const B(4, 5);
 class A {
   const A(this.x);
@@ -819,8 +829,8 @@
     _assertIntField(superclassFields, "x", 8);
   }
 
-  void test_instanceCreationExpression_fieldFormalParameter() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_instanceCreationExpression_fieldFormalParameter() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const A(42);
 class A {
   int x;
@@ -833,28 +843,24 @@
     _assertIntField(fields, "x", 42);
   }
 
-  void
-      test_instanceCreationExpression_fieldFormalParameter_namedOptionalWithDefault() {
-    _checkInstanceCreationOptionalParams(true, true, true);
+  test_instanceCreationExpression_fieldFormalParameter_namedOptionalWithDefault() async {
+    await _checkInstanceCreationOptionalParams(true, true, true);
   }
 
-  void
-      test_instanceCreationExpression_fieldFormalParameter_namedOptionalWithoutDefault() {
-    _checkInstanceCreationOptionalParams(true, true, false);
+  test_instanceCreationExpression_fieldFormalParameter_namedOptionalWithoutDefault() async {
+    await _checkInstanceCreationOptionalParams(true, true, false);
   }
 
-  void
-      test_instanceCreationExpression_fieldFormalParameter_unnamedOptionalWithDefault() {
-    _checkInstanceCreationOptionalParams(true, false, true);
+  test_instanceCreationExpression_fieldFormalParameter_unnamedOptionalWithDefault() async {
+    await _checkInstanceCreationOptionalParams(true, false, true);
   }
 
-  void
-      test_instanceCreationExpression_fieldFormalParameter_unnamedOptionalWithoutDefault() {
-    _checkInstanceCreationOptionalParams(true, false, false);
+  test_instanceCreationExpression_fieldFormalParameter_unnamedOptionalWithoutDefault() async {
+    await _checkInstanceCreationOptionalParams(true, false, false);
   }
 
-  void test_instanceCreationExpression_implicitSuper() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_instanceCreationExpression_implicitSuper() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const B(4);
 class A {
   const A() : x = 3;
@@ -875,8 +881,8 @@
     _assertIntField(superclassFields, "x", 3);
   }
 
-  void test_instanceCreationExpression_nonFactoryRedirect() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_instanceCreationExpression_nonFactoryRedirect() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const A.a1();
 class A {
   const A.a1() : this.a2();
@@ -888,8 +894,8 @@
     _assertIntField(aFields, 'x', 5);
   }
 
-  void test_instanceCreationExpression_nonFactoryRedirect_arg() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_instanceCreationExpression_nonFactoryRedirect_arg() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const A.a1(1);
 class A {
   const A.a1(x) : this.a2(x + 100);
@@ -901,11 +907,11 @@
     _assertIntField(aFields, 'y', 111);
   }
 
-  void test_instanceCreationExpression_nonFactoryRedirect_cycle() {
+  test_instanceCreationExpression_nonFactoryRedirect_cycle() async {
     // It is an error to have a cycle in non-factory redirects; however, we
     // need to make sure that even if the error occurs, attempting to evaluate
     // the constant will terminate.
-    CompilationUnit compilationUnit = resolveSource(r'''
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const A();
 class A {
   const A() : this.b();
@@ -914,8 +920,8 @@
     _assertValidUnknown(_evaluateTopLevelVariable(compilationUnit, "foo"));
   }
 
-  void test_instanceCreationExpression_nonFactoryRedirect_defaultArg() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_instanceCreationExpression_nonFactoryRedirect_defaultArg() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const A.a1();
 class A {
   const A.a1() : this.a2();
@@ -927,8 +933,8 @@
     _assertIntField(aFields, 'y', 110);
   }
 
-  void test_instanceCreationExpression_nonFactoryRedirect_toMissing() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_instanceCreationExpression_nonFactoryRedirect_toMissing() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const A.a1();
 class A {
   const A.a1() : this.a2();
@@ -939,8 +945,8 @@
     _assertType(_evaluateTopLevelVariable(compilationUnit, "foo"), "A");
   }
 
-  void test_instanceCreationExpression_nonFactoryRedirect_toNonConst() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_instanceCreationExpression_nonFactoryRedirect_toNonConst() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const A.a1();
 class A {
   const A.a1() : this.a2();
@@ -952,8 +958,8 @@
     _assertType(_evaluateTopLevelVariable(compilationUnit, "foo"), "A");
   }
 
-  void test_instanceCreationExpression_nonFactoryRedirect_unnamed() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_instanceCreationExpression_nonFactoryRedirect_unnamed() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const A.a1();
 class A {
   const A.a1() : this();
@@ -965,8 +971,8 @@
     _assertIntField(aFields, 'x', 5);
   }
 
-  void test_instanceCreationExpression_redirect() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_instanceCreationExpression_redirect() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const A();
 class A {
   const factory A() = B;
@@ -977,11 +983,11 @@
     _assertType(_evaluateTopLevelVariable(compilationUnit, "foo"), "B");
   }
 
-  void test_instanceCreationExpression_redirect_cycle() {
+  test_instanceCreationExpression_redirect_cycle() async {
     // It is an error to have a cycle in factory redirects; however, we need
     // to make sure that even if the error occurs, attempting to evaluate the
     // constant will terminate.
-    CompilationUnit compilationUnit = resolveSource(r'''
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const A();
 class A {
   const factory A() = A.b;
@@ -990,8 +996,8 @@
     _assertValidUnknown(_evaluateTopLevelVariable(compilationUnit, "foo"));
   }
 
-  void test_instanceCreationExpression_redirect_external() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_instanceCreationExpression_redirect_external() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const A();
 class A {
   external const factory A();
@@ -999,11 +1005,11 @@
     _assertValidUnknown(_evaluateTopLevelVariable(compilationUnit, "foo"));
   }
 
-  void test_instanceCreationExpression_redirect_nonConst() {
+  test_instanceCreationExpression_redirect_nonConst() async {
     // It is an error for a const factory constructor redirect to a non-const
     // constructor; however, we need to make sure that even if the error
     // attempting to evaluate the constant won't cause a crash.
-    CompilationUnit compilationUnit = resolveSource(r'''
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const foo = const A();
 class A {
   const factory A() = A.b;
@@ -1012,8 +1018,8 @@
     _assertValidUnknown(_evaluateTopLevelVariable(compilationUnit, "foo"));
   }
 
-  void test_instanceCreationExpression_redirectWithTypeParams() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_instanceCreationExpression_redirectWithTypeParams() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 class A {
   const factory A(var a) = B<int>;
 }
@@ -1031,11 +1037,11 @@
     _assertIntField(fields, "x", 10);
   }
 
-  void test_instanceCreationExpression_redirectWithTypeSubstitution() {
+  test_instanceCreationExpression_redirectWithTypeSubstitution() async {
     // To evaluate the redirection of A<int>,
     // A's template argument (T=int) must be substituted
     // into B's template argument (B<U> where U=T) to get B<int>.
-    CompilationUnit compilationUnit = resolveSource(r'''
+    CompilationUnit compilationUnit = await resolveSource(r'''
 class A<T> {
   const factory A(var a) = B<T>;
 }
@@ -1053,9 +1059,9 @@
     _assertIntField(fields, "x", 10);
   }
 
-  void test_instanceCreationExpression_symbol() {
+  test_instanceCreationExpression_symbol() async {
     CompilationUnit compilationUnit =
-        resolveSource("const foo = const Symbol('a');");
+        await resolveSource("const foo = const Symbol('a');");
     EvaluationResultImpl evaluationResult =
         _evaluateTopLevelVariable(compilationUnit, "foo");
     expect(evaluationResult.value, isNotNull);
@@ -1064,16 +1070,16 @@
     expect(value.toSymbolValue(), "a");
   }
 
-  void test_instanceCreationExpression_withSupertypeParams_explicit() {
-    _checkInstanceCreation_withSupertypeParams(true);
+  test_instanceCreationExpression_withSupertypeParams_explicit() async {
+    await _checkInstanceCreation_withSupertypeParams(true);
   }
 
-  void test_instanceCreationExpression_withSupertypeParams_implicit() {
-    _checkInstanceCreation_withSupertypeParams(false);
+  test_instanceCreationExpression_withSupertypeParams_implicit() async {
+    await _checkInstanceCreation_withSupertypeParams(false);
   }
 
-  void test_instanceCreationExpression_withTypeParams() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_instanceCreationExpression_withTypeParams() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 class C<E> {
   const C();
 }
@@ -1090,7 +1096,7 @@
     expect(c_int_value == c_num_value, isFalse);
   }
 
-  void test_isValidSymbol() {
+  test_isValidSymbol() async {
     expect(ConstantEvaluationEngine.isValidPublicSymbol(""), isTrue);
     expect(ConstantEvaluationEngine.isValidPublicSymbol("foo"), isTrue);
     expect(ConstantEvaluationEngine.isValidPublicSymbol("foo.bar"), isTrue);
@@ -1117,11 +1123,11 @@
     expect(ConstantEvaluationEngine.isValidPublicSymbol("foo.void"), isFalse);
   }
 
-  void test_length_of_improperly_typed_string_expression() {
+  test_length_of_improperly_typed_string_expression() async {
     // Since type annotations are ignored in unchecked mode, the improper
     // types on s1 and s2 shouldn't prevent us from evaluating i to
     // 'alpha'.length.
-    CompilationUnit compilationUnit = resolveSource('''
+    CompilationUnit compilationUnit = await resolveSource('''
 const int s1 = 'alpha';
 const int s2 = 'beta';
 const int i = (true ? s1 : s2).length;
@@ -1132,10 +1138,10 @@
     expect(_assertValidInt(result), 5);
   }
 
-  void test_length_of_improperly_typed_string_identifier() {
+  test_length_of_improperly_typed_string_identifier() async {
     // Since type annotations are ignored in unchecked mode, the improper type
     // on s shouldn't prevent us from evaluating i to 'alpha'.length.
-    CompilationUnit compilationUnit = resolveSource('''
+    CompilationUnit compilationUnit = await resolveSource('''
 const int s = 'alpha';
 const int i = s.length;
 ''');
@@ -1145,10 +1151,10 @@
     expect(_assertValidInt(result), 5);
   }
 
-  void test_non_static_const_initialized_at_declaration() {
+  test_non_static_const_initialized_at_declaration() async {
     // Even though non-static consts are not allowed by the language, we need
     // to handle them for error recovery purposes.
-    CompilationUnit compilationUnit = resolveSource('''
+    CompilationUnit compilationUnit = await resolveSource('''
 class A {
   const int i = 123;
   const A();
@@ -1163,9 +1169,9 @@
     _assertIntField(fields, "i", 123);
   }
 
-  void test_symbolLiteral_void() {
+  test_symbolLiteral_void() async {
     CompilationUnit compilationUnit =
-        resolveSource("const voidSymbol = #void;");
+        await resolveSource("const voidSymbol = #void;");
     VariableDeclaration voidSymbol =
         findTopLevelDeclaration(compilationUnit, "voidSymbol");
     EvaluationResultImpl voidSymbolResult =
@@ -1196,8 +1202,8 @@
     expect(field.isNull, isTrue);
   }
 
-  void _assertProperDependencies(String sourceText,
-      [List<ErrorCode> expectedErrorCodes = const <ErrorCode>[]]) {
+  Future<Null> _assertProperDependencies(String sourceText,
+      [List<ErrorCode> expectedErrorCodes = const <ErrorCode>[]]) async {
     Source source = addSource(sourceText);
     LibraryElement element = resolve2(source);
     CompilationUnit unit =
@@ -1206,6 +1212,7 @@
     ConstantValueComputer computer = _makeConstantValueComputer();
     computer.add(unit);
     computer.computeValues();
+    await computeAnalysisResult(source);
     assertErrors(source, expectedErrorCodes);
   }
 
@@ -1253,8 +1260,8 @@
     expect(value.isUnknown, isTrue);
   }
 
-  EvaluationResultImpl _check_fromEnvironment_bool(
-      String valueInEnvironment, String defaultExpr) {
+  Future<EvaluationResultImpl> _check_fromEnvironment_bool(
+      String valueInEnvironment, String defaultExpr) async {
     String envVarName = "x";
     String varName = "foo";
     if (valueInEnvironment != null) {
@@ -1262,13 +1269,13 @@
     }
     String defaultArg =
         defaultExpr == null ? "" : ", defaultValue: $defaultExpr";
-    CompilationUnit compilationUnit = resolveSource(
+    CompilationUnit compilationUnit = await resolveSource(
         "const $varName = const bool.fromEnvironment('$envVarName'$defaultArg);");
     return _evaluateTopLevelVariable(compilationUnit, varName);
   }
 
-  EvaluationResultImpl _check_fromEnvironment_int(
-      String valueInEnvironment, String defaultExpr) {
+  Future<EvaluationResultImpl> _check_fromEnvironment_int(
+      String valueInEnvironment, String defaultExpr) async {
     String envVarName = "x";
     String varName = "foo";
     if (valueInEnvironment != null) {
@@ -1276,13 +1283,13 @@
     }
     String defaultArg =
         defaultExpr == null ? "" : ", defaultValue: $defaultExpr";
-    CompilationUnit compilationUnit = resolveSource(
+    CompilationUnit compilationUnit = await resolveSource(
         "const $varName = const int.fromEnvironment('$envVarName'$defaultArg);");
     return _evaluateTopLevelVariable(compilationUnit, varName);
   }
 
-  EvaluationResultImpl _check_fromEnvironment_string(
-      String valueInEnvironment, String defaultExpr) {
+  Future<EvaluationResultImpl> _check_fromEnvironment_string(
+      String valueInEnvironment, String defaultExpr) async {
     String envVarName = "x";
     String varName = "foo";
     if (valueInEnvironment != null) {
@@ -1290,14 +1297,15 @@
     }
     String defaultArg =
         defaultExpr == null ? "" : ", defaultValue: $defaultExpr";
-    CompilationUnit compilationUnit = resolveSource(
+    CompilationUnit compilationUnit = await resolveSource(
         "const $varName = const String.fromEnvironment('$envVarName'$defaultArg);");
     return _evaluateTopLevelVariable(compilationUnit, varName);
   }
 
-  void _checkInstanceCreation_withSupertypeParams(bool isExplicit) {
+  Future<Null> _checkInstanceCreation_withSupertypeParams(
+      bool isExplicit) async {
     String superCall = isExplicit ? " : super()" : "";
-    CompilationUnit compilationUnit = resolveSource("""
+    CompilationUnit compilationUnit = await resolveSource("""
 class A<T> {
   const A();
 }
@@ -1321,13 +1329,13 @@
     _assertFieldType(c_int_num_fields, GenericState.SUPERCLASS_FIELD, "A<num>");
   }
 
-  void _checkInstanceCreationOptionalParams(
-      bool isFieldFormal, bool isNamed, bool hasDefault) {
+  Future<Null> _checkInstanceCreationOptionalParams(
+      bool isFieldFormal, bool isNamed, bool hasDefault) async {
     String fieldName = "j";
     String paramName = isFieldFormal ? fieldName : "i";
     String formalParam =
         "${isFieldFormal ? "this." : "int "}$paramName${hasDefault ? " = 3" : ""}";
-    CompilationUnit compilationUnit = resolveSource("""
+    CompilationUnit compilationUnit = await resolveSource("""
 const x = const A();
 const y = const A(${isNamed ? '$paramName: ' : ''}10);
 class A {
@@ -1407,7 +1415,7 @@
 
 @reflectiveTest
 class ConstantVisitorTest extends ResolverTestCase {
-  void test_visitBinaryExpression_questionQuestion_notNull_notNull() {
+  test_visitBinaryExpression_questionQuestion_notNull_notNull() async {
     Expression left = AstTestFactory.string2('a');
     Expression right = AstTestFactory.string2('b');
     Expression expression = AstTestFactory.binaryExpression(
@@ -1423,7 +1431,7 @@
     errorListener.assertNoErrors();
   }
 
-  void test_visitBinaryExpression_questionQuestion_null_notNull() {
+  test_visitBinaryExpression_questionQuestion_null_notNull() async {
     Expression left = AstTestFactory.nullLiteral();
     Expression right = AstTestFactory.string2('b');
     Expression expression = AstTestFactory.binaryExpression(
@@ -1439,7 +1447,7 @@
     errorListener.assertNoErrors();
   }
 
-  void test_visitBinaryExpression_questionQuestion_null_null() {
+  test_visitBinaryExpression_questionQuestion_null_null() async {
     Expression left = AstTestFactory.nullLiteral();
     Expression right = AstTestFactory.nullLiteral();
     Expression expression = AstTestFactory.binaryExpression(
@@ -1454,7 +1462,7 @@
     errorListener.assertNoErrors();
   }
 
-  void test_visitConditionalExpression_false() {
+  test_visitConditionalExpression_false() async {
     Expression thenExpression = AstTestFactory.integer(1);
     Expression elseExpression = AstTestFactory.integer(0);
     ConditionalExpression expression = AstTestFactory.conditionalExpression(
@@ -1466,7 +1474,7 @@
     errorListener.assertNoErrors();
   }
 
-  void test_visitConditionalExpression_nonBooleanCondition() {
+  test_visitConditionalExpression_nonBooleanCondition() async {
     Expression thenExpression = AstTestFactory.integer(1);
     Expression elseExpression = AstTestFactory.integer(0);
     NullLiteral conditionExpression = AstTestFactory.nullLiteral();
@@ -1481,7 +1489,7 @@
         .assertErrorsWithCodes([CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL]);
   }
 
-  void test_visitConditionalExpression_nonConstantElse() {
+  test_visitConditionalExpression_nonConstantElse() async {
     Expression thenExpression = AstTestFactory.integer(1);
     Expression elseExpression = AstTestFactory.identifier3("x");
     ConditionalExpression expression = AstTestFactory.conditionalExpression(
@@ -1495,7 +1503,7 @@
         .assertErrorsWithCodes([CompileTimeErrorCode.INVALID_CONSTANT]);
   }
 
-  void test_visitConditionalExpression_nonConstantThen() {
+  test_visitConditionalExpression_nonConstantThen() async {
     Expression thenExpression = AstTestFactory.identifier3("x");
     Expression elseExpression = AstTestFactory.integer(0);
     ConditionalExpression expression = AstTestFactory.conditionalExpression(
@@ -1509,7 +1517,7 @@
         .assertErrorsWithCodes([CompileTimeErrorCode.INVALID_CONSTANT]);
   }
 
-  void test_visitConditionalExpression_true() {
+  test_visitConditionalExpression_true() async {
     Expression thenExpression = AstTestFactory.integer(1);
     Expression elseExpression = AstTestFactory.integer(0);
     ConditionalExpression expression = AstTestFactory.conditionalExpression(
@@ -1521,8 +1529,8 @@
     errorListener.assertNoErrors();
   }
 
-  void test_visitSimpleIdentifier_className() {
-    CompilationUnit compilationUnit = resolveSource('''
+  test_visitSimpleIdentifier_className() async {
+    CompilationUnit compilationUnit = await resolveSource('''
 const a = C;
 class C {}
 ''');
@@ -1531,8 +1539,8 @@
     expect(result.toTypeValue().name, 'C');
   }
 
-  void test_visitSimpleIdentifier_dynamic() {
-    CompilationUnit compilationUnit = resolveSource('''
+  test_visitSimpleIdentifier_dynamic() async {
+    CompilationUnit compilationUnit = await resolveSource('''
 const a = dynamic;
 ''');
     DartObjectImpl result = _evaluateConstant(compilationUnit, 'a', null);
@@ -1540,8 +1548,8 @@
     expect(result.toTypeValue(), typeProvider.dynamicType);
   }
 
-  void test_visitSimpleIdentifier_inEnvironment() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_visitSimpleIdentifier_inEnvironment() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const a = b;
 const b = 3;''');
     Map<String, DartObjectImpl> environment = new Map<String, DartObjectImpl>();
@@ -1551,8 +1559,8 @@
     _assertValue(6, _evaluateConstant(compilationUnit, "a", environment));
   }
 
-  void test_visitSimpleIdentifier_notInEnvironment() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_visitSimpleIdentifier_notInEnvironment() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const a = b;
 const b = 3;''');
     Map<String, DartObjectImpl> environment = new Map<String, DartObjectImpl>();
@@ -1562,8 +1570,8 @@
     _assertValue(3, _evaluateConstant(compilationUnit, "a", environment));
   }
 
-  void test_visitSimpleIdentifier_withoutEnvironment() {
-    CompilationUnit compilationUnit = resolveSource(r'''
+  test_visitSimpleIdentifier_withoutEnvironment() async {
+    CompilationUnit compilationUnit = await resolveSource(r'''
 const a = b;
 const b = 3;''');
     _assertValue(3, _evaluateConstant(compilationUnit, "a", null));
@@ -1610,6 +1618,6 @@
 class StrongConstantValueComputerTest extends ConstantValueComputerTest {
   void setUp() {
     super.setUp();
-    resetWithOptions(new AnalysisOptionsImpl()..strongMode = true);
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
   }
 }
diff --git a/pkg/analyzer/test/src/task/dart_test.dart b/pkg/analyzer/test/src/task/dart_test.dart
index 3b81e26..64901f9 100644
--- a/pkg/analyzer/test/src/task/dart_test.dart
+++ b/pkg/analyzer/test/src/task/dart_test.dart
@@ -4541,7 +4541,10 @@
 
   void _assertTypeParameterBound(TypeParameter typeParameter,
       String expectedBoundTypeString, String expectedBoundElementName) {
-    TypeName boundNode = typeParameter.bound;
+    TypeAnnotation bound = typeParameter.bound;
+    // TODO(brianwilkerson) Extend this to support function types as bounds.
+    expect(bound, new isInstanceOf<TypeName>());
+    TypeName boundNode = bound;
     Identifier boundName = boundNode.name;
     expect(boundNode.type.toString(), expectedBoundTypeString);
     expect(boundName.staticType.toString(), expectedBoundTypeString);
diff --git a/pkg/analyzer/test/utils.dart b/pkg/analyzer/test/utils.dart
index 5bd96ff..6d70357 100644
--- a/pkg/analyzer/test/utils.dart
+++ b/pkg/analyzer/test/utils.dart
@@ -201,7 +201,9 @@
   // TODO(leafp): Make these matchers.
   // https://www.dartdocs.org/documentation/matcher/0.12.0%2B1/matcher/Matcher-class.html
 
-  /* Provides primitive types for basic type assertions */
+  /**
+   * Provides primitive types for basic type assertions.
+   */
   final TypeProvider _typeProvider;
 
   TypeAssertions(this._typeProvider);
@@ -219,12 +221,12 @@
   /**
    * Primitive assertion for the list type
    */
-  Asserter<DartType> get isList => sameElement(_typeProvider.listType);
+  Asserter<DartType> get isList => hasElementOf(_typeProvider.listType);
 
   /**
    * Primitive assertion for the map type
    */
-  Asserter<DartType> get isMap => sameElement(_typeProvider.mapType);
+  Asserter<DartType> get isMap => hasElementOf(_typeProvider.mapType);
 
   /**
    * Primitive assertion for the num type
@@ -237,10 +239,16 @@
   Asserter<DartType> get isString => isType(_typeProvider.stringType);
 
   /**
-   * Given a type, produce an assertion that a type has the same element.
+   * Assert that a type has the element that is equal to the [expected].
    */
-  Asserter<DartType> hasElement(Element element) =>
-      (DartType type) => expect(element, same(type.element));
+  Asserter<DartType> hasElement(Element expected) =>
+      (DartType type) => expect(expected, type.element);
+
+  /**
+   * Assert that a type has the element that is equal to the element of the
+   * given [type].
+   */
+  Asserter<DartType> hasElementOf(DartType type) => hasElement(type.element);
 
   /**
    * Given assertions for the argument and return types, produce an
@@ -256,7 +264,7 @@
 
   /**
    * Given an assertion for the base type and assertions over the type
-   * parameters, produce an assertion over instantations.
+   * parameters, produce an assertion over instantiations.
    */
   AsserterBuilder<List<Asserter<DartType>>, DartType> isInstantiationOf(
           Asserter<DartType> baseAssert) =>
@@ -286,15 +294,9 @@
       isInstantiationOf(isMap)([argAssert0, argAssert1]);
 
   /**
-   * Assert that one type is the same as another
+   * Assert that a type is equal to the [expected].
    */
-  Asserter<DartType> isType(DartType argument) => (DartType t) {
-        expect(t, same(argument));
+  Asserter<DartType> isType(DartType expected) => (DartType t) {
+        expect(t, expected);
       };
-
-  /**
-   * Given a type, produce an assertion that a type has the same element.
-   */
-  Asserter<DartType> sameElement(DartType elementType) =>
-      hasElement(elementType.element);
 }
diff --git a/pkg/analyzer/tool/summary/generate.dart b/pkg/analyzer/tool/summary/generate.dart
index d3fd863..6db5cf0 100644
--- a/pkg/analyzer/tool/summary/generate.dart
+++ b/pkg/analyzer/tool/summary/generate.dart
@@ -268,10 +268,13 @@
         for (ClassMember classMember in decl.members) {
           if (classMember is MethodDeclaration && classMember.isGetter) {
             String desc = '$clsName.${classMember.name.name}';
-            TypeName type = classMember.returnType;
-            if (type == null) {
-              throw new Exception('Class member needs a type: $desc');
+            if (classMember.returnType is! TypeName) {
+              if (classMember.returnType == null) {
+                throw new Exception('Class member needs a type: $desc');
+              }
+              throw new Exception('Class member needs a class type: $desc');
             }
+            TypeName type = classMember.returnType;
             bool isList = false;
             if (type.name.name == 'List' &&
                 type.typeArguments != null &&
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index 95cd78e..87ce42f 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -1984,7 +1984,7 @@
   /**
    * Returns true if the element has to be resolved due to a mirrorsUsed
    * annotation. If we have insufficient mirrors used annotations, we only
-   * keep additonal elements if treeshaking has been disabled.
+   * keep additional elements if treeshaking has been disabled.
    */
   bool requiredByMirrorSystem(Element element) {
     return hasInsufficientMirrorsUsed && isTreeShakingDisabled ||
diff --git a/pkg/compiler/lib/src/js_backend/backend_helpers.dart b/pkg/compiler/lib/src/js_backend/backend_helpers.dart
index 3d7944e..a4f814f 100644
--- a/pkg/compiler/lib/src/js_backend/backend_helpers.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_helpers.dart
@@ -638,17 +638,26 @@
     return _findHelper('throwNoSuchMethod');
   }
 
-  Element get genericNoSuchMethod =>
-      _genericNoSuchMethod ??= findCoreHelper('_genericNoSuchMethod');
-  MethodElement _genericNoSuchMethod;
+  Element get malformedTypeError => _cachedCoreHelper('_malformedTypeError');
+  Element get genericNoSuchMethod => _cachedCoreHelper('_genericNoSuchMethod');
+  Element get unresolvedConstructorError =>
+      _cachedCoreHelper('_unresolvedConstructorError');
+  Element get unresolvedStaticGetterError =>
+      _cachedCoreHelper('_unresolvedStaticGetterError');
+  Element get unresolvedStaticSetterError =>
+      _cachedCoreHelper('_unresolvedStaticSetterError');
+  Element get unresolvedStaticMethodError =>
+      _cachedCoreHelper('_unresolvedStaticMethodError');
+  Element get unresolvedTopLevelGetterError =>
+      _cachedCoreHelper('_unresolvedTopLevelGetterError');
+  Element get unresolvedTopLevelSetterError =>
+      _cachedCoreHelper('_unresolvedTopLevelSetterError');
+  Element get unresolvedTopLevelMethodError =>
+      _cachedCoreHelper('_unresolvedTopLevelMethodError');
 
-  Element get unresolvedConstructorError => _unresolvedConstructorError ??=
-      findCoreHelper('_unresolvedConstructorError');
-  MethodElement _unresolvedConstructorError;
-
-  Element get malformedTypeError =>
-      _malformedTypeError ??= findCoreHelper('_malformedTypeError');
-  MethodElement _malformedTypeError;
+  Map<String, Element> _cachedCoreHelpers = <String, Element>{};
+  Element _cachedCoreHelper(String name) =>
+      _cachedCoreHelpers[name] ??= findCoreHelper(name);
 
   Element get createRuntimeType {
     return _findHelper('createRuntimeType');
diff --git a/pkg/compiler/lib/src/js_backend/backend_impact.dart b/pkg/compiler/lib/src/js_backend/backend_impact.dart
index be5e9cf..f2df00d 100644
--- a/pkg/compiler/lib/src/js_backend/backend_impact.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_impact.dart
@@ -170,6 +170,12 @@
             ? [
                 helpers.genericNoSuchMethod,
                 helpers.unresolvedConstructorError,
+                helpers.unresolvedStaticMethodError,
+                helpers.unresolvedStaticGetterError,
+                helpers.unresolvedStaticSetterError,
+                helpers.unresolvedTopLevelMethodError,
+                helpers.unresolvedTopLevelGetterError,
+                helpers.unresolvedTopLevelSetterError,
                 commonElements.symbolConstructor.declaration,
               ]
             : [
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
index 3d8ea6c..6b3a226 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
@@ -939,10 +939,14 @@
 
             prototype[getterName] = function () {
               var result = this[fieldName];
+              if (result == sentinelInProgress) {
+                // In minified mode, static name is not provided, so fall back
+                // to the minified fieldName.
+                #cyclicThrow(staticName || fieldName);
+              }
               try {
                 if (result === sentinelUndefined) {
                   this[fieldName] = sentinelInProgress;
-
                   try {
                     result = this[fieldName] = lazyValue();
                   } finally {
@@ -951,13 +955,7 @@
                     if (result === sentinelUndefined)
                       this[fieldName] = null;
                   }
-                } else {
-                  if (result === sentinelInProgress)
-                    // In minified mode, static name is not provided, so fall
-                    // back to the minified fieldName.
-                    #cyclicThrow(staticName || fieldName);
                 }
-
                 return result;
               } finally {
                 this[getterName] = function() { return this[fieldName]; };
diff --git a/pkg/compiler/lib/src/kernel/unresolved.dart b/pkg/compiler/lib/src/kernel/unresolved.dart
index 7560ccb..8a984ed 100644
--- a/pkg/compiler/lib/src/kernel/unresolved.dart
+++ b/pkg/compiler/lib/src/kernel/unresolved.dart
@@ -30,6 +30,7 @@
   bool get isVoidContext;
   ir.Arguments buildArguments(NodeList arguments);
   ir.TreeNode visitForValue(Expression node);
+  void associateCompoundComponents(Accessor accessor, Node node);
 
   // TODO(ahe): Delete this method.
   ir.InvalidExpression handleUnresolved(Node node);
@@ -124,6 +125,7 @@
   }
 
   ir.Expression buildThrowUnresolvedSuperGetter(String name) {
+    // TODO(sra): This is incorrect when the superclass defines noSuchMethod.
     return buildThrowNoSuchMethodError(kernel.getUnresolvedSuperGetterBuilder(),
         new ir.ThisExpression(), name, new ir.Arguments.empty());
   }
@@ -269,16 +271,22 @@
       MethodElement getter, Element element, IncDecOperator operator, _) {
     var accessor = new ClassStaticAccessor(
         this, getter.name, possiblyErroneousFunctionToIr(getter), null);
-    return accessor.buildPostfixIncrement(new ir.Name(operator.selectorName),
+    var result = accessor.buildPostfixIncrement(
+        new ir.Name(operator.selectorName),
         voidContext: isVoidContext);
+    associateCompoundComponents(accessor, node);
+    return result;
   }
 
   ir.Expression visitUnresolvedStaticSetterPrefix(Send node,
       MethodElement getter, Element element, IncDecOperator operator, _) {
     var accessor = new ClassStaticAccessor(
         this, getter.name, possiblyErroneousFunctionToIr(getter), null);
-    return accessor.buildPrefixIncrement(new ir.Name(operator.selectorName),
+    var result = accessor.buildPrefixIncrement(
+        new ir.Name(operator.selectorName),
         voidContext: isVoidContext);
+    associateCompoundComponents(accessor, node);
+    return result;
   }
 
   ir.Expression visitUnresolvedStaticSetterSetIfNull(
@@ -291,6 +299,7 @@
 
   ir.Expression visitUnresolvedSuperBinary(
       Send node, Element element, BinaryOperator operator, Node argument, _) {
+    // TODO(sra): This is incorrect when the superclass defines noSuchMethod.
     return buildThrowNoSuchMethodError(
         kernel.getUnresolvedSuperMethodBuilder(),
         new ir.ThisExpression(),
@@ -521,25 +530,33 @@
       _) {
     var accessor = new TopLevelStaticAccessor(
         this, getter.name, possiblyErroneousFunctionToIr(getter), null);
-    return accessor.buildCompoundAssignment(
+    var result = accessor.buildCompoundAssignment(
         new ir.Name(operator.selectorName), visitForValue(rhs),
         voidContext: isVoidContext);
+    associateCompoundComponents(accessor, node);
+    return result;
   }
 
   ir.Expression visitUnresolvedTopLevelSetterPostfix(Send node,
       MethodElement getter, Element element, IncDecOperator operator, _) {
     var accessor = new TopLevelStaticAccessor(
         this, getter.name, possiblyErroneousFunctionToIr(getter), null);
-    return accessor.buildPostfixIncrement(new ir.Name(operator.selectorName),
+    var result = accessor.buildPostfixIncrement(
+        new ir.Name(operator.selectorName),
         voidContext: isVoidContext);
+    associateCompoundComponents(accessor, node);
+    return result;
   }
 
   ir.Expression visitUnresolvedTopLevelSetterPrefix(Send node,
       MethodElement getter, Element element, IncDecOperator operator, _) {
     var accessor = new TopLevelStaticAccessor(
         this, getter.name, possiblyErroneousFunctionToIr(getter), null);
-    return accessor.buildPrefixIncrement(new ir.Name(operator.selectorName),
+    var result = accessor.buildPrefixIncrement(
+        new ir.Name(operator.selectorName),
         voidContext: isVoidContext);
+    associateCompoundComponents(accessor, node);
+    return result;
   }
 
   ir.Expression visitUnresolvedTopLevelSetterSetIfNull(
diff --git a/pkg/compiler/lib/src/mirrors_used.dart b/pkg/compiler/lib/src/mirrors_used.dart
index dde7af1..34a81a5 100644
--- a/pkg/compiler/lib/src/mirrors_used.dart
+++ b/pkg/compiler/lib/src/mirrors_used.dart
@@ -116,7 +116,7 @@
         (librariesWithUsage != null && librariesWithUsage.contains(library));
   }
 
-  /// Call-back from the resolver to analyze MirorsUsed annotations. The result
+  /// Call-back from the resolver to analyze MirrorsUsed annotations. The result
   /// is stored in [analyzer] and later used to compute
   /// [:analyzer.mergedMirrorUsage:].
   void validate(NewExpression node, TreeElements mapping) {
@@ -260,7 +260,7 @@
     return result;
   }
 
-  /// Merge all [MirrorUsage] instances accross all libraries.
+  /// Merge all [MirrorUsage] instances across all libraries.
   MirrorUsage mergeUsages(Map<LibraryElement, List<MirrorUsage>> usageMap) {
     Set<MirrorUsage> usagesToMerge = new Set<MirrorUsage>();
     usageMap.forEach((LibraryElement library, List<MirrorUsage> usages) {
diff --git a/pkg/compiler/lib/src/parser/parser.dart b/pkg/compiler/lib/src/parser/parser.dart
index 988cbf3..0ef9cb8 100644
--- a/pkg/compiler/lib/src/parser/parser.dart
+++ b/pkg/compiler/lib/src/parser/parser.dart
@@ -426,6 +426,15 @@
   Token parseFormalParameter(Token token, FormalParameterType type) {
     token = parseMetadataStar(token, forParameter: true);
     listener.beginFormalParameter(token);
+
+    // Skip over `covariant` token, if the next token is an identifier or
+    // modifier.
+    // This enables the case where `covariant` is the name of the parameter:
+    //    void foo(covariant);
+    if (identical(token.stringValue, 'covariant') &&
+        (token.next.isIdentifier() || isModifier(token.next))) {
+      token = token.next;
+    }
     token = parseModifiers(token);
     // TODO(ahe): Validate that there are formal parameters if void.
     token = parseReturnTypeOpt(token);
@@ -988,9 +997,29 @@
     return null;
   }
 
+  /// Removes the optional `covariant` token from the modifiers, if there
+  /// is no `static` in the list, and `covariant` is the first modifier.
+  Link<Token> removeOptCovariantTokenIfNotStatic(Link<Token> modifiers) {
+    if (modifiers.isEmpty ||
+        !identical(modifiers.first.stringValue, 'covariant')) {
+      return modifiers;
+    }
+    for (Token modifier in modifiers.tail) {
+      if (identical(modifier.stringValue, 'static')) {
+        return modifiers;
+      }
+    }
+    return modifiers.tail;
+  }
+
   Token parseFields(Token start, Link<Token> modifiers, Token type,
       Token getOrSet, Token name, bool isTopLevel) {
     bool hasType = type != null;
+
+    if (getOrSet == null && !isTopLevel) {
+      modifiers = removeOptCovariantTokenIfNotStatic(modifiers);
+    }
+
     Token varFinalOrConst =
         expectVarFinalOrConst(modifiers, hasType, !isTopLevel);
     bool isVar = false;
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index d978338..aab6519 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -1235,7 +1235,7 @@
   @override
   void visitTypeLiteral(ir.TypeLiteral typeLiteral) {
     ir.DartType type = typeLiteral.type;
-    if (type is ir.InterfaceType) {
+    if (type is ir.InterfaceType || type is ir.DynamicType) {
       ConstantValue constant = astAdapter.getConstantForType(type);
       stack.add(graph.addConstant(constant, closedWorld));
       return;
@@ -1253,7 +1253,7 @@
           astAdapter.createRuntimeTypeReturnType);
       return;
     }
-    // TODO(27394): 'dynamic' and function types observed. Where are they from?
+    // TODO(27394): Function types observed. Where are they from?
     defaultExpression(typeLiteral);
     return;
   }
@@ -2214,6 +2214,21 @@
   }
 
   @override
+  void visitRethrow(ir.Rethrow rethrowNode) {
+    HInstruction exception = rethrowableException;
+    if (exception == null) {
+      exception = graph.addConstantNull(closedWorld);
+      compiler.reporter.internalError(astAdapter.getNode(rethrowNode),
+          'rethrowableException should not be null.');
+    }
+    SourceInformation sourceInformation = null;
+    closeAndGotoExit(new HThrow(exception, sourceInformation, isRethrow: true));
+    // ir.Rethrow is an expression so we need to push a value - a constant with
+    // no type.
+    stack.add(graph.addConstantUnreachable(closedWorld));
+  }
+
+  @override
   void visitThisExpression(ir.ThisExpression thisExpression) {
     stack.add(localsHandler.readThis());
   }
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
index 2ce5fac..1852bce 100644
--- a/pkg/compiler/lib/src/ssa/nodes.dart
+++ b/pkg/compiler/lib/src/ssa/nodes.dart
@@ -271,6 +271,15 @@
     return addConstant(closedWorld.constantSystem.createNull(), closedWorld);
   }
 
+  HConstant addConstantUnreachable(ClosedWorld closedWorld) {
+    // A constant with an empty type used as the HInstruction of an expression
+    // in an unreachable context.
+    return addConstant(
+        new SyntheticConstantValue(
+            SyntheticConstantKind.EMPTY_VALUE, const TypeMask.nonNullEmpty()),
+        closedWorld);
+  }
+
   void finalize() {
     addBlock(exit);
     exit.open();
diff --git a/pkg/compiler/lib/src/tokens/keyword.dart b/pkg/compiler/lib/src/tokens/keyword.dart
index 4d914bc..607c4e8 100644
--- a/pkg/compiler/lib/src/tokens/keyword.dart
+++ b/pkg/compiler/lib/src/tokens/keyword.dart
@@ -53,6 +53,7 @@
 
     const Keyword("abstract", isBuiltIn: true),
     const Keyword("as", info: Precedence.AS_INFO, isBuiltIn: true),
+    const Keyword("covariant", isBuiltIn: true),
     const Keyword("dynamic", isBuiltIn: true),
     const Keyword("export", isBuiltIn: true),
     const Keyword("external", isBuiltIn: true),
@@ -77,7 +78,7 @@
     const Keyword("async", isPseudo: true),
     const Keyword("sync", isPseudo: true),
     const Keyword("await", isPseudo: true),
-    const Keyword("yield", isPseudo: true)
+    const Keyword("yield", isPseudo: true),
   ];
 
   final String syntax;
diff --git a/pkg/dev_compiler/USAGE.md b/pkg/dev_compiler/USAGE.md
index 9a3de65..dcdce9a 100644
--- a/pkg/dev_compiler/USAGE.md
+++ b/pkg/dev_compiler/USAGE.md
@@ -1,81 +1,84 @@
 # Usage
 
-The [Dart Dev Compiler](README.md) (DDC) is an **experimental**
-development compiler from Dart to EcmaScript 6.  It is
-still incomplete, under heavy development, and not yet ready for
-production use.
+The [Dart Dev Compiler](README.md) (DDC) is an **experimental** development
+compiler from Dart to EcmaScript 6. It is still incomplete, under heavy
+development, and not yet ready for production use.
 
 With those caveats, we welcome feedback for those experimenting.
 
-The easiest way to compile and run DDC generated code for now is via NodeJS.  The following instructions are in a state of flux - please expect them to change.  If you find issues, please let us know.
+The easiest way to compile and run DDC generated code for now is via NodeJS.
+The following instructions are in a state of flux -- please expect them to
+change. If you find issues, please let us know.
 
-(1) Clone the [DDC repository](https://github.com/dart-lang/dev_compiler) and set the environment variable DDC_PATH to your checkout.
+1.  Clone the [DDC repository](https://github.com/dart-lang/sdk) and
+    set the environment variable `DDC_PATH` to the `pkg/dev_compiler`
+    subdirectory within wherever you check that out.
 
-(2) Install nodejs v6.0 or later and add it to your path.  It can be installed from:
+2.  Install nodejs v6.0 or later and add it to your path. It can be installed
+    from:
 
-https://nodejs.org/
+    https://nodejs.org/
 
-Note, v6 or later is required for harmony / ES6 support.
+    Note, v6 or later is required for harmony / ES6 support.
 
-(3) Create a node compatible version of the dart_sdk:
+3.  Define a node path (you can add other directories if you want to separate
+    things out):
 
-```
-dart $DDC_PATH/tool/build_sdk.dart --dart-sdk $DDC_PATH/gen/patched_sdk/ --modules node -o dart_sdk.js
-```
+    ```sh
+    export NODE_PATH=$DDC_PATH/lib/js/common:.
+    ```
 
-You can ignore any errors or warnings for now.
+4.  Compile a test file with a `main` entry point:
 
-(4) Define a node path (you can add other directories if you want to separate things out):
+    ```sh
+    dart $DDC_PATH/bin/dartdevc.dart --modules node -o hello.js hello.dart
+    ```
 
-```
-export NODE_PATH=.
-```
+    Note, the `hello.js` built here is not fully linked. It loads the SDK via a `require` call.
 
-(5) Compile a test file with a `main` entry point:
+5.  Run it via your node built in step 1:
 
-```
-dart  $DDC_PATH/bin/dartdevc.dart --modules node -o hello.js hello.dart
-```
+    ```sh
+    node -e 'require("hello").hello.main()'
+    ```
 
-Note, the `hello.js` built here is not fully linked.  It loads the SDK via a `require` call.
+6.  Compile multiple libraries using summaries. E.g., write a `world.dart` that
+    imports `hello.dart` with it's own `main`. Step 5 above generated a summary
+    (`hello.sum`) for `hello.dart`. Build world:
 
-(6) Run it via your node built in step 1:
+    ```sh
+    dart $DDC_PATH/bin/dartdevc.dart --modules node -s hello.sum -o world.js world.dart
+    ```
 
-```
-node -e 'require("hello").hello.main()'
-```
+    Run world just like hello above:
 
-(7) Compile multiple libraries using summaries.  E.g., write a `world.dart` that imports `hello.dart` with it's own `main`.  Step 5 above generated a summary (`hello.sum`) for `hello.dart`.  Build world:
+    ```sh
+    node -e 'require("world").world.main()'
+    ```
 
-```
-dart $DDC_PATH/bin/dartdevc.dart --modules node -s hello.sum -o world.js world.dart
-```
+7.  Node modules do not run directly on the browser or v8. You can use a tool
+    like `browserify` to build a linked javascript file that can:
 
-Run world just like hello above:
+    Install:
 
-```
-node -e 'require("world").world.main()'
-```
+    ```sh
+    sudo npm install -g browserify
+    ```
 
-(8) Node modules do not run directly on the browser or v8.  You can use a tool like `browserify` to build a linked javascript file that can:
+    and run, e.g.,:
 
-Install:
-```
-sudo npm install -g browserify
-```
+    ```sh
+    echo 'require("world").world.main()' | browserify -d - > world.dart.js
+    ```
 
-and run, e.g.,:
-```
-echo 'require("world").world.main()' | browserify -d - > world.dart.js
-```
-
-The produced `world.dart.js` fully links all dependencies (`dart_sdk`, `hello`, and `world`) and executes `world.main`.  It can be loaded via script tag and run in Chrome (stable or later).
+    The produced `world.dart.js` fully links all dependencies (`dart_sdk`,
+    `hello`, and `world`) and executes `world.main`.  It can be loaded via
+    script tag and run in Chrome (stable or later).
 
 ## Feedback
 
-Please file issues in our [GitHub issue tracker](https://github.com/dart-lang/sdk/issues).
+Please file issues in our [GitHub issue
+tracker](https://github.com/dart-lang/sdk/issues).
 
-You can also view or join our [mailing list](https://groups.google.com/a/dartlang.org/forum/#!forum/dev-compiler).
-
-
-
+You can also view or join our [mailing
+list](https://groups.google.com/a/dartlang.org/forum/#!forum/dev-compiler).
diff --git a/pkg/dev_compiler/lib/js/amd/dart_sdk.js b/pkg/dev_compiler/lib/js/amd/dart_sdk.js
index 9d6ddd8..ebd0c84 100644
--- a/pkg/dev_compiler/lib/js/amd/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/amd/dart_sdk.js
@@ -1687,36 +1687,47 @@
     }
     return true;
   };
+  dart.trapRuntimeErrors = function(flag) {
+    dart._trapRuntimeErrors = flag;
+  };
   dart.throwCastError = function(object, actual, type) {
-    debugger;
-    dart.throw(new _js_helper.CastErrorImplementation(object, dart.typeName(actual), dart.typeName(type)));
+    var found = dart.typeName(actual);
+    var expected = dart.typeName(type);
+    if (dart._trapRuntimeErrors) debugger;
+    dart.throw(new _js_helper.CastErrorImplementation(object, found, expected));
   };
   dart.throwTypeError = function(object, actual, type) {
-    debugger;
-    dart.throw(new _js_helper.TypeErrorImplementation(object, dart.typeName(actual), dart.typeName(type)));
+    var found = dart.typeName(actual);
+    var expected = dart.typeName(type);
+    if (dart._trapRuntimeErrors) debugger;
+    dart.throw(new _js_helper.TypeErrorImplementation(object, found, expected));
   };
   dart.throwStrongModeCastError = function(object, actual, type) {
-    debugger;
-    dart.throw(new _js_helper.StrongModeCastError(object, dart.typeName(actual), dart.typeName(type)));
+    var found = dart.typeName(actual);
+    var expected = dart.typeName(type);
+    if (dart._trapRuntimeErrors) debugger;
+    dart.throw(new _js_helper.StrongModeCastError(object, found, expected));
   };
   dart.throwStrongModeTypeError = function(object, actual, type) {
-    debugger;
-    dart.throw(new _js_helper.StrongModeTypeError(object, dart.typeName(actual), dart.typeName(type)));
+    var found = dart.typeName(actual);
+    var expected = dart.typeName(type);
+    if (dart._trapRuntimeErrors) debugger;
+    dart.throw(new _js_helper.StrongModeTypeError(object, found, expected));
   };
   dart.throwUnimplementedError = function(message) {
-    debugger;
+    if (dart._trapRuntimeErrors) debugger;
     dart.throw(new core.UnimplementedError(message));
   };
   dart.throwAssertionError = function(message) {
     if (message === void 0) message = null;
     return (() => {
-      debugger;
+      if (dart._trapRuntimeErrors) debugger;
       let error = message != null ? new _js_helper.AssertionErrorWithMessage(message()) : new core.AssertionError();
       dart.throw(error);
     })();
   };
   dart.throwNullValueError = function() {
-    debugger;
+    if (dart._trapRuntimeErrors) debugger;
     dart.throw(new core.NoSuchMethodError(null, new core.Symbol('<Unexpected Null Value>'), null, null, null));
   };
   dart.syncStar = function(gen, E, ...args) {
@@ -2248,11 +2259,11 @@
     return Object.getOwnPropertySymbols(obj);
   };
   dart.throwStrongModeError = function(message) {
-    debugger;
+    if (dart.test(dart._trapRuntimeErrors)) debugger;
     throw new _js_helper.StrongModeErrorImplementation(message);
   };
   dart.throwInternalError = function(message) {
-    debugger;
+    if (dart.test(dart._trapRuntimeErrors)) debugger;
     throw Error(message);
   };
   dart.getOwnNamesAndSymbols = function(obj) {
@@ -2663,6 +2674,7 @@
   };
   dart._typeFormalCount = Symbol("_typeFormalCount");
   dart.isSubtype = dart._subtypeMemo((t1, t2) => t1 === t2 || dart._isSubtype(t1, t2, true));
+  dart._trapRuntimeErrors = true;
   dart._jsIterator = Symbol("_jsIterator");
   dart._current = Symbol("_current");
   dart._AsyncStarStreamController = class _AsyncStarStreamController {
@@ -45196,7 +45208,7 @@
       return r;
     }
   };
-  dart.setBaseClass(io._HttpConnection, collection.LinkedListEntry$(io._HttpConnection));
+  dart.setBaseClass(io._HttpConnection, dart.mixin(collection.LinkedListEntry$(io._HttpConnection), io._ServiceObject));
   dart.addSimpleTypeTests(io._HttpConnection);
   dart.setSignature(io._HttpConnection, {
     constructors: () => ({new: dart.definiteFunctionType(io._HttpConnection, [dart.dynamic, io._HttpServer])}),
diff --git a/pkg/dev_compiler/lib/js/common/dart_sdk.js b/pkg/dev_compiler/lib/js/common/dart_sdk.js
index 2b4c910..822f847 100644
--- a/pkg/dev_compiler/lib/js/common/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/common/dart_sdk.js
@@ -1687,36 +1687,47 @@
     }
     return true;
   };
+  dart.trapRuntimeErrors = function(flag) {
+    dart._trapRuntimeErrors = flag;
+  };
   dart.throwCastError = function(object, actual, type) {
-    debugger;
-    dart.throw(new _js_helper.CastErrorImplementation(object, dart.typeName(actual), dart.typeName(type)));
+    var found = dart.typeName(actual);
+    var expected = dart.typeName(type);
+    if (dart._trapRuntimeErrors) debugger;
+    dart.throw(new _js_helper.CastErrorImplementation(object, found, expected));
   };
   dart.throwTypeError = function(object, actual, type) {
-    debugger;
-    dart.throw(new _js_helper.TypeErrorImplementation(object, dart.typeName(actual), dart.typeName(type)));
+    var found = dart.typeName(actual);
+    var expected = dart.typeName(type);
+    if (dart._trapRuntimeErrors) debugger;
+    dart.throw(new _js_helper.TypeErrorImplementation(object, found, expected));
   };
   dart.throwStrongModeCastError = function(object, actual, type) {
-    debugger;
-    dart.throw(new _js_helper.StrongModeCastError(object, dart.typeName(actual), dart.typeName(type)));
+    var found = dart.typeName(actual);
+    var expected = dart.typeName(type);
+    if (dart._trapRuntimeErrors) debugger;
+    dart.throw(new _js_helper.StrongModeCastError(object, found, expected));
   };
   dart.throwStrongModeTypeError = function(object, actual, type) {
-    debugger;
-    dart.throw(new _js_helper.StrongModeTypeError(object, dart.typeName(actual), dart.typeName(type)));
+    var found = dart.typeName(actual);
+    var expected = dart.typeName(type);
+    if (dart._trapRuntimeErrors) debugger;
+    dart.throw(new _js_helper.StrongModeTypeError(object, found, expected));
   };
   dart.throwUnimplementedError = function(message) {
-    debugger;
+    if (dart._trapRuntimeErrors) debugger;
     dart.throw(new core.UnimplementedError(message));
   };
   dart.throwAssertionError = function(message) {
     if (message === void 0) message = null;
     return (() => {
-      debugger;
+      if (dart._trapRuntimeErrors) debugger;
       let error = message != null ? new _js_helper.AssertionErrorWithMessage(message()) : new core.AssertionError();
       dart.throw(error);
     })();
   };
   dart.throwNullValueError = function() {
-    debugger;
+    if (dart._trapRuntimeErrors) debugger;
     dart.throw(new core.NoSuchMethodError(null, new core.Symbol('<Unexpected Null Value>'), null, null, null));
   };
   dart.syncStar = function(gen, E, ...args) {
@@ -2248,11 +2259,11 @@
     return Object.getOwnPropertySymbols(obj);
   };
   dart.throwStrongModeError = function(message) {
-    debugger;
+    if (dart.test(dart._trapRuntimeErrors)) debugger;
     throw new _js_helper.StrongModeErrorImplementation(message);
   };
   dart.throwInternalError = function(message) {
-    debugger;
+    if (dart.test(dart._trapRuntimeErrors)) debugger;
     throw Error(message);
   };
   dart.getOwnNamesAndSymbols = function(obj) {
@@ -2663,6 +2674,7 @@
   };
   dart._typeFormalCount = Symbol("_typeFormalCount");
   dart.isSubtype = dart._subtypeMemo((t1, t2) => t1 === t2 || dart._isSubtype(t1, t2, true));
+  dart._trapRuntimeErrors = true;
   dart._jsIterator = Symbol("_jsIterator");
   dart._current = Symbol("_current");
   dart._AsyncStarStreamController = class _AsyncStarStreamController {
@@ -45196,7 +45208,7 @@
       return r;
     }
   };
-  dart.setBaseClass(io._HttpConnection, collection.LinkedListEntry$(io._HttpConnection));
+  dart.setBaseClass(io._HttpConnection, dart.mixin(collection.LinkedListEntry$(io._HttpConnection), io._ServiceObject));
   dart.addSimpleTypeTests(io._HttpConnection);
   dart.setSignature(io._HttpConnection, {
     constructors: () => ({new: dart.definiteFunctionType(io._HttpConnection, [dart.dynamic, io._HttpServer])}),
diff --git a/pkg/dev_compiler/lib/js/es6/dart_sdk.js b/pkg/dev_compiler/lib/js/es6/dart_sdk.js
index 10c4a9a..30fa1b5 100644
--- a/pkg/dev_compiler/lib/js/es6/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/es6/dart_sdk.js
@@ -1685,36 +1685,47 @@
   }
   return true;
 };
+dart.trapRuntimeErrors = function(flag) {
+  dart._trapRuntimeErrors = flag;
+};
 dart.throwCastError = function(object, actual, type) {
-  debugger;
-  dart.throw(new _js_helper.CastErrorImplementation(object, dart.typeName(actual), dart.typeName(type)));
+  var found = dart.typeName(actual);
+  var expected = dart.typeName(type);
+  if (dart._trapRuntimeErrors) debugger;
+  dart.throw(new _js_helper.CastErrorImplementation(object, found, expected));
 };
 dart.throwTypeError = function(object, actual, type) {
-  debugger;
-  dart.throw(new _js_helper.TypeErrorImplementation(object, dart.typeName(actual), dart.typeName(type)));
+  var found = dart.typeName(actual);
+  var expected = dart.typeName(type);
+  if (dart._trapRuntimeErrors) debugger;
+  dart.throw(new _js_helper.TypeErrorImplementation(object, found, expected));
 };
 dart.throwStrongModeCastError = function(object, actual, type) {
-  debugger;
-  dart.throw(new _js_helper.StrongModeCastError(object, dart.typeName(actual), dart.typeName(type)));
+  var found = dart.typeName(actual);
+  var expected = dart.typeName(type);
+  if (dart._trapRuntimeErrors) debugger;
+  dart.throw(new _js_helper.StrongModeCastError(object, found, expected));
 };
 dart.throwStrongModeTypeError = function(object, actual, type) {
-  debugger;
-  dart.throw(new _js_helper.StrongModeTypeError(object, dart.typeName(actual), dart.typeName(type)));
+  var found = dart.typeName(actual);
+  var expected = dart.typeName(type);
+  if (dart._trapRuntimeErrors) debugger;
+  dart.throw(new _js_helper.StrongModeTypeError(object, found, expected));
 };
 dart.throwUnimplementedError = function(message) {
-  debugger;
+  if (dart._trapRuntimeErrors) debugger;
   dart.throw(new core.UnimplementedError(message));
 };
 dart.throwAssertionError = function(message) {
   if (message === void 0) message = null;
   return (() => {
-    debugger;
+    if (dart._trapRuntimeErrors) debugger;
     let error = message != null ? new _js_helper.AssertionErrorWithMessage(message()) : new core.AssertionError();
     dart.throw(error);
   })();
 };
 dart.throwNullValueError = function() {
-  debugger;
+  if (dart._trapRuntimeErrors) debugger;
   dart.throw(new core.NoSuchMethodError(null, new core.Symbol('<Unexpected Null Value>'), null, null, null));
 };
 dart.syncStar = function(gen, E, ...args) {
@@ -2246,11 +2257,11 @@
   return Object.getOwnPropertySymbols(obj);
 };
 dart.throwStrongModeError = function(message) {
-  debugger;
+  if (dart.test(dart._trapRuntimeErrors)) debugger;
   throw new _js_helper.StrongModeErrorImplementation(message);
 };
 dart.throwInternalError = function(message) {
-  debugger;
+  if (dart.test(dart._trapRuntimeErrors)) debugger;
   throw Error(message);
 };
 dart.getOwnNamesAndSymbols = function(obj) {
@@ -2661,6 +2672,7 @@
 };
 dart._typeFormalCount = Symbol("_typeFormalCount");
 dart.isSubtype = dart._subtypeMemo((t1, t2) => t1 === t2 || dart._isSubtype(t1, t2, true));
+dart._trapRuntimeErrors = true;
 dart._jsIterator = Symbol("_jsIterator");
 dart._current = Symbol("_current");
 dart._AsyncStarStreamController = class _AsyncStarStreamController {
@@ -45194,7 +45206,7 @@
     return r;
   }
 };
-dart.setBaseClass(io._HttpConnection, collection.LinkedListEntry$(io._HttpConnection));
+dart.setBaseClass(io._HttpConnection, dart.mixin(collection.LinkedListEntry$(io._HttpConnection), io._ServiceObject));
 dart.addSimpleTypeTests(io._HttpConnection);
 dart.setSignature(io._HttpConnection, {
   constructors: () => ({new: dart.definiteFunctionType(io._HttpConnection, [dart.dynamic, io._HttpServer])}),
diff --git a/pkg/dev_compiler/lib/js/legacy/dart_library.js b/pkg/dev_compiler/lib/js/legacy/dart_library.js
index d8dfd96..f72cf9e 100644
--- a/pkg/dev_compiler/lib/js/legacy/dart_library.js
+++ b/pkg/dev_compiler/lib/js/legacy/dart_library.js
@@ -125,13 +125,15 @@
     // Force import of core.
     var dart_sdk = import_('dart_sdk');
 
-    // TODO(vsm): DOM facades?
-    // See: https://github.com/dart-lang/dev_compiler/issues/173
+    // TODO(vsm): Move this to a shared location:
+    // https://github.com/dart-lang/sdk/issues/27605
     if (typeof NodeList !== "undefined") {
+      // TODO(vsm): Do we still need these?
       NodeList.prototype.get = function(i) { return this[i]; };
       NamedNodeMap.prototype.get = function(i) { return this[i]; };
       DOMTokenList.prototype.get = function(i) { return this[i]; };
       HTMLCollection.prototype.get = function(i) { return this[i]; };
+
       // Expose constructors for DOM types dart:html needs to assume are
       // available on window.
       if (typeof PannerNode == "undefined") {
diff --git a/pkg/dev_compiler/lib/js/legacy/dart_sdk.js b/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
index 7820c1b..751f1e8 100644
--- a/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
@@ -1688,36 +1688,47 @@
     }
     return true;
   };
+  dart.trapRuntimeErrors = function(flag) {
+    dart._trapRuntimeErrors = flag;
+  };
   dart.throwCastError = function(object, actual, type) {
-    debugger;
-    dart.throw(new _js_helper.CastErrorImplementation(object, dart.typeName(actual), dart.typeName(type)));
+    var found = dart.typeName(actual);
+    var expected = dart.typeName(type);
+    if (dart._trapRuntimeErrors) debugger;
+    dart.throw(new _js_helper.CastErrorImplementation(object, found, expected));
   };
   dart.throwTypeError = function(object, actual, type) {
-    debugger;
-    dart.throw(new _js_helper.TypeErrorImplementation(object, dart.typeName(actual), dart.typeName(type)));
+    var found = dart.typeName(actual);
+    var expected = dart.typeName(type);
+    if (dart._trapRuntimeErrors) debugger;
+    dart.throw(new _js_helper.TypeErrorImplementation(object, found, expected));
   };
   dart.throwStrongModeCastError = function(object, actual, type) {
-    debugger;
-    dart.throw(new _js_helper.StrongModeCastError(object, dart.typeName(actual), dart.typeName(type)));
+    var found = dart.typeName(actual);
+    var expected = dart.typeName(type);
+    if (dart._trapRuntimeErrors) debugger;
+    dart.throw(new _js_helper.StrongModeCastError(object, found, expected));
   };
   dart.throwStrongModeTypeError = function(object, actual, type) {
-    debugger;
-    dart.throw(new _js_helper.StrongModeTypeError(object, dart.typeName(actual), dart.typeName(type)));
+    var found = dart.typeName(actual);
+    var expected = dart.typeName(type);
+    if (dart._trapRuntimeErrors) debugger;
+    dart.throw(new _js_helper.StrongModeTypeError(object, found, expected));
   };
   dart.throwUnimplementedError = function(message) {
-    debugger;
+    if (dart._trapRuntimeErrors) debugger;
     dart.throw(new core.UnimplementedError(message));
   };
   dart.throwAssertionError = function(message) {
     if (message === void 0) message = null;
     return (() => {
-      debugger;
+      if (dart._trapRuntimeErrors) debugger;
       let error = message != null ? new _js_helper.AssertionErrorWithMessage(message()) : new core.AssertionError();
       dart.throw(error);
     })();
   };
   dart.throwNullValueError = function() {
-    debugger;
+    if (dart._trapRuntimeErrors) debugger;
     dart.throw(new core.NoSuchMethodError(null, new core.Symbol('<Unexpected Null Value>'), null, null, null));
   };
   dart.syncStar = function(gen, E, ...args) {
@@ -2249,11 +2260,11 @@
     return Object.getOwnPropertySymbols(obj);
   };
   dart.throwStrongModeError = function(message) {
-    debugger;
+    if (dart.test(dart._trapRuntimeErrors)) debugger;
     throw new _js_helper.StrongModeErrorImplementation(message);
   };
   dart.throwInternalError = function(message) {
-    debugger;
+    if (dart.test(dart._trapRuntimeErrors)) debugger;
     throw Error(message);
   };
   dart.getOwnNamesAndSymbols = function(obj) {
@@ -2664,6 +2675,7 @@
   };
   dart._typeFormalCount = Symbol("_typeFormalCount");
   dart.isSubtype = dart._subtypeMemo((t1, t2) => t1 === t2 || dart._isSubtype(t1, t2, true));
+  dart._trapRuntimeErrors = true;
   dart._jsIterator = Symbol("_jsIterator");
   dart._current = Symbol("_current");
   dart._AsyncStarStreamController = class _AsyncStarStreamController {
@@ -45197,7 +45209,7 @@
       return r;
     }
   };
-  dart.setBaseClass(io._HttpConnection, collection.LinkedListEntry$(io._HttpConnection));
+  dart.setBaseClass(io._HttpConnection, dart.mixin(collection.LinkedListEntry$(io._HttpConnection), io._ServiceObject));
   dart.addSimpleTypeTests(io._HttpConnection);
   dart.setSignature(io._HttpConnection, {
     constructors: () => ({new: dart.definiteFunctionType(io._HttpConnection, [dart.dynamic, io._HttpServer])}),
diff --git a/pkg/dev_compiler/lib/sdk/ddc_sdk.sum b/pkg/dev_compiler/lib/sdk/ddc_sdk.sum
index 073b986..670fd6f 100644
--- a/pkg/dev_compiler/lib/sdk/ddc_sdk.sum
+++ b/pkg/dev_compiler/lib/sdk/ddc_sdk.sum
Binary files differ
diff --git a/pkg/dev_compiler/lib/src/compiler/ast_builder.dart b/pkg/dev_compiler/lib/src/compiler/ast_builder.dart
index 46c57b1..2cbfdbf 100644
--- a/pkg/dev_compiler/lib/src/compiler/ast_builder.dart
+++ b/pkg/dev_compiler/lib/src/compiler/ast_builder.dart
@@ -35,7 +35,7 @@
     return RawAstBuilder.typeParameterList(params);
   }
 
-  static TypeArgumentList typeArgumentList(List<TypeName> args) {
+  static TypeArgumentList typeArgumentList(List<TypeAnnotation> args) {
     return RawAstBuilder.typeArgumentList(args);
   }
 
@@ -43,7 +43,7 @@
     return RawAstBuilder.argumentList(args);
   }
 
-  static TypeName typeName(Identifier id, List<TypeName> args) {
+  static TypeName typeName(Identifier id, List<TypeAnnotation> args) {
     TypeArgumentList argList = null;
     if (args != null && args.length > 0) argList = typeArgumentList(args);
     return RawAstBuilder.typeName(id, argList);
@@ -411,7 +411,7 @@
     return astFactory.typeParameterList(lb, params, rb);
   }
 
-  static TypeArgumentList typeArgumentList(List<TypeName> args) {
+  static TypeArgumentList typeArgumentList(List<TypeAnnotation> args) {
     Token lb = new Token(TokenType.LT, 0);
     Token rb = new Token(TokenType.GT, 0);
     return astFactory.typeArgumentList(lb, args, rb);
diff --git a/pkg/dev_compiler/lib/src/compiler/code_generator.dart b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
index d406907..afabcf3 100644
--- a/pkg/dev_compiler/lib/src/compiler/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
@@ -1248,24 +1248,25 @@
 
     _loader.startTopLevel(element);
 
-    // Find the super type
-    JS.Expression heritage;
-    var supertype = type.superclass;
-    if (_deferIfNeeded(supertype, element)) {
-      // Fall back to raw type.
-      supertype = fillDynamicTypeArgs(supertype.element.type);
+    // List of "direct" supertypes (supertype + mixins)
+    var basetypes = [type.superclass]..addAll(type.mixins);
+
+    // If any of these are recursive (via type parameter), defer setting
+    // the real superclass.
+    if (basetypes.any((t) => _deferIfNeeded(t, element))) {
+      // Fall back to raw type
+      basetypes =
+          basetypes.map((t) => fillDynamicTypeArgs(t.element.type)).toList();
       _hasDeferredSupertype.add(element);
     }
-    // We could choose to name the superclasses, but it's
-    // not clear that there's much benefit
-    heritage = _emitType(supertype, nameType: false);
 
-    if (type.mixins.isNotEmpty) {
-      var mixins =
-          type.mixins.map((t) => _emitType(t, nameType: false)).toList();
-      mixins.insert(0, heritage);
-      heritage = _callHelper('mixin(#)', [mixins]);
-    }
+    // List of "direct" JS superclasses
+    var baseclasses =
+        basetypes.map((t) => _emitType(t, nameType: false)).toList();
+    assert(baseclasses.isNotEmpty);
+    var heritage = (baseclasses.length == 1)
+        ? baseclasses.first
+        : _callHelper('mixin(#)', [baseclasses]);
 
     _loader.finishTopLevel(element);
 
@@ -1331,7 +1332,7 @@
       // bypass the ES6 restrictions.
       //
       // TODO(jmesserly): we'll need to rethink this.
-      // See <https://github.com/dart-lang/dev_compiler/issues/51>.
+      // See https://github.com/dart-lang/sdk/issues/28322.
       // This level of indirection will hurt performance.
       jsMethods.add(new JS.Method(
           _propertyName('constructor'),
@@ -1682,8 +1683,17 @@
             'setExtensionBaseClass(#, #);', [className, newBaseClass]));
       }
     } else if (_hasDeferredSupertype.contains(classElem)) {
+      // TODO(vsm): consider just threading the deferred supertype through
+      // instead of recording classElem in a set on the class and recomputing
       var newBaseClass = _emitType(classElem.type.superclass,
           nameType: false, subClass: classElem, className: className);
+      if (classElem.type.mixins.isNotEmpty) {
+        var mixins = classElem.type.mixins
+            .map((t) => _emitType(t, nameType: false))
+            .toList();
+        mixins.insert(0, newBaseClass);
+        newBaseClass = _callHelper('mixin(#)', [mixins]);
+      }
       var deferredBaseClass = _callHelperStatement(
           'setBaseClass(#, #);', [className, newBaseClass]);
       if (typeFormals.isNotEmpty) return deferredBaseClass;
@@ -2293,7 +2303,7 @@
       }
 
       // TODO(jmesserly): various problems here, see:
-      // https://github.com/dart-lang/dev_compiler/issues/116
+      // https://github.com/dart-lang/sdk/issues/27259
       var paramType =
           resolutionMap.elementDeclaredByFormalParameter(param).type;
       if (node is MethodDeclaration &&
@@ -2648,8 +2658,7 @@
     // are not mutated inside the generator.
     //
     // In the future, we might be able to simplify this, see:
-    // https://github.com/dart-lang/dev_compiler/issues/247.
-    //
+    // https://github.com/dart-lang/sdk/issues/28320
     // `async` works the same, but uses the `dart.async` helper.
     //
     // In the body of a `sync*` and `async`, `yield`/`await` are both generated
@@ -2956,8 +2965,8 @@
     var typeFormals = type.typeFormals;
     if (typeFormals.isNotEmpty && !lowerTypedef) {
       // TODO(jmesserly): this is a suboptimal representation for universal
-      // function types (as callable functions). See discussion at:
-      // https://github.com/dart-lang/dev_compiler/issues/526
+      // function types (as callable functions). See discussion at
+      // https://github.com/dart-lang/sdk/issues/27333
       var tf = _emitTypeFormals(typeFormals);
       var names = _typeTable.discharge(typeFormals);
       var parts = new JS.ArrayInitializer(typeParts);
@@ -3615,7 +3624,15 @@
     } else if (typeArgs != null) {
       // Dynamic calls may have type arguments, even though the function types
       // are not known.
-      return typeArgs.arguments.map(visitTypeName).toList(growable: false);
+      return typeArgs.arguments.map((argument) {
+        if (argument is TypeName) {
+          return visitTypeName(argument);
+        } else {
+          // TODO(brianwilkerson) Implement support for GenericFunctionType.
+          throw new StateError(
+              'Cannot compile type argument of kind ${argument.runtimeType}');
+        }
+      }).toList(growable: false);
     }
     return null;
   }
@@ -5643,7 +5660,6 @@
         expectedType = types.streamType;
       } else {
         // Future<T> -> T
-        // TODO(vsm): Revisit with issue #228.
         expectedType = types.futureType;
       }
     } else {
diff --git a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
index 3645dc1..3947884 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
@@ -350,6 +350,7 @@
   @override
   visitYield(Yield node) {
     if (!_nestedFunction) hasYield = true;
+    super.visitYield(node);
   }
 
   @override
diff --git a/pkg/dev_compiler/lib/src/compiler/module_builder.dart b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
index d321bd0..415554a 100644
--- a/pkg/dev_compiler/lib/src/compiler/module_builder.dart
+++ b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
@@ -238,7 +238,7 @@
       }
     }
 
-    // TODO(vsm): See https://github.com/dart-lang/dev_compiler/issues/512
+    // TODO(vsm): See https://github.com/dart-lang/sdk/issues/27309
     // This extra level of indirection should be unnecessary.
     var block =
         js.statement("(function() { 'use strict'; #; })()", [statements]);
diff --git a/pkg/dev_compiler/test/browser/language_tests.js b/pkg/dev_compiler/test/browser/language_tests.js
index 593b3a0..4e1a6ad 100644
--- a/pkg/dev_compiler/test/browser/language_tests.js
+++ b/pkg/dev_compiler/test/browser/language_tests.js
@@ -9,6 +9,7 @@
   async_helper = async_helper.async_helper;
   let minitest = expect.minitest;
 
+  dart_sdk.dart.trapRuntimeErrors(false);
   dart_sdk._isolate_helper.startRootIsolate(function() {}, []);
   let html_config = unittest.html_config;
   // Test attributes are a list of strings, or a string for a single
@@ -51,7 +52,10 @@
       'assertion_test': skip_fail,
       'async_await_test_none_multi': 'unittest',
       'async_await_test_02_multi': 'unittest',
-      'async_await_test_03_multi': skip_fail,  // Flaky on travis (#634)
+
+      // Flaky on travis (https://github.com/dart-lang/sdk/issues/27224)
+      'async_await_test_03_multi': skip_fail,
+
       'async_star_await_pauses_test': skip_fail,
 
       // TODO(jmesserly): figure out why this test is hanging.
@@ -60,8 +64,7 @@
       'async_star_cancel_while_paused_test': skip_fail,
       'async_star_regression_fisk_test': skip_fail,
 
-      // TODO(vsm): Re-enable.
-      // See https://github.com/dart-lang/dev_compiler/issues/456
+      // TODO(vsm): Re-enable (https://github.com/dart-lang/sdk/issues/28319)
       'async_star_test_none_multi': ['unittest', 'skip', 'fail'],
       'async_star_test_01_multi': ['unittest', 'skip', 'fail'],
       'async_star_test_02_multi': ['unittest', 'skip', 'fail'],
@@ -94,9 +97,6 @@
       'cha_deopt1_test': skip_fail,
       'cha_deopt2_test': skip_fail,
       'cha_deopt3_test': skip_fail,
-
-      // interpolation does not call Dart's toString:
-      // https://github.com/dart-lang/dev_compiler/issues/470
       'class_syntax2_test': skip_fail,
       'classes_static_method_clash_test': skip_fail,
       'closure_call_wrong_argument_count_negative_test': skip_fail,
@@ -117,6 +117,7 @@
       'const_switch_test_04_multi': skip_fail,
       'constructor11_test': skip_fail,
       'constructor12_test': skip_fail,
+      'custom_await_stack_trace_test': skip_fail,
       'cyclic_type2_test': skip_fail,
       'cyclic_type_test_00_multi': skip_fail,
       'cyclic_type_test_01_multi': skip_fail,
@@ -151,6 +152,8 @@
       'field_optimization3_test': skip_fail,
       'final_syntax_test_08_multi': skip_fail,
       'first_class_types_test': skip_fail,
+      'flatten_test_01_multi': skip_fail,
+      'flatten_test_04_multi': skip_fail,
       'for_in2_test': skip_fail,
       'for_variable_capture_test': skip_fail,
       'function_subtype0_test': skip_fail,
@@ -223,6 +226,7 @@
       'issue13179_test': skip_fail,
       'issue21079_test': skip_fail,
       'issue21957_test': skip_fail,
+      'issue23244_test': skip_fail,
       'issue_1751477_test': skip_fail,
       'issue_22780_test_01_multi': skip_fail,
       'issue_23914_test': skip_fail,
@@ -241,6 +245,7 @@
       'mixin_forwarding_constructor3_test': skip_fail,
       'mixin_generic_test': skip_fail,
       'mixin_implements_test': skip_fail,
+      'mixin_invalid_inheritance1_test_none_multi': skip_fail,
       'mixin_issue10216_2_test': skip_fail,
       'mixin_mixin2_test': skip_fail,
       'mixin_mixin3_test': skip_fail,
@@ -406,10 +411,6 @@
     'lib/convert': {
       'encoding_test': skip_timeout,
 
-      // TODO(jmesserly): this is in an inconsistent state between our old and
-      // newer SDKs.
-      'html_escape_test': ['skip'],
-
       'json_utf8_chunk_test': skip_timeout,
       'latin1_test': skip_timeout,
 
@@ -424,7 +425,10 @@
     'lib/html': {
       'async_spawnuri_test': async_unittest,
       'async_test': async_unittest,
-      'audiocontext_test': is.chrome('<=54') ? fail : pass, // was sdk#27578, needs triage
+
+       // was https://github.com/dart-lang/sdk/issues/27578, needs triage
+      'audiocontext_test': is.chrome('<=54') ? fail : pass,
+
       'canvas_test': ['unittest'],
       'canvasrenderingcontext2d_test': ['unittest'],
       'cross_domain_iframe_test': async_unittest,
@@ -434,17 +438,24 @@
       // This is failing with a range error, I'm guessing because it's looking
       // for a stylesheet and the page has none.
       'css_rule_list_test': 'fail',
+
       'custom_element_method_clash_test': async_unittest,
       'custom_element_name_clash_test': async_unittest,
       'custom_elements_23127_test': async_unittest,
       'custom_elements_test': async_unittest,
-      'dom_constructors_test': 'fail', // was sdk#27578, needs triage
+
+      // was https://github.com/dart-lang/sdk/issues/27578, needs triage
+      'dom_constructors_test': 'fail',
+
       'element_animate_test': async_unittest,
-      'element_classes_test': 'fail', // sdk#27579.
-      'element_classes_svg_test': 'fail', // sdk#27579.
+
+      // https://github.com/dart-lang/sdk/issues/27579.
+      'element_classes_test': 'fail',
+      'element_classes_svg_test': 'fail',
 
       // Failure: 'Expected 56 to be in the inclusive range [111, 160].'.
       'element_offset_test': 'fail',
+
       'element_test': async_unittest,
       'element_types_test': firefox_fail,
       'event_customevent_test': async_unittest,
@@ -453,12 +464,14 @@
       // Failure: "Failed to execute 'dispatchEvent' on 'EventTarget': parameter
       // 1 is not of type 'Event'."
       'event_test': 'fail',
+
       'fileapi_test': async_unittest,
       'filereader_test': async_unittest,
       'fontface_loaded_test': async_unittest,
 
       // Failed because it's expecting "Ahem" but getting null. Maybe sdk#27579?
       'fontface_test': 'fail',
+
       'form_data_test': async_unittest,
       'history_test': async_unittest,
       'indexeddb_1_test': async_unittest,
@@ -466,7 +479,10 @@
       'indexeddb_3_test': async_unittest,
       'indexeddb_4_test': async_unittest,
       'indexeddb_5_test': async_unittest,
-      'input_element_test': 'fail', // was sdk#27578, needs triage
+
+      // was https://github.com/dart-lang/sdk/issues/27578, needs triage
+      'input_element_test': 'fail',
+
       'interactive_test': async_unittest,
       'isolates_test': async_unittest,
 
@@ -479,29 +495,41 @@
       'js_util_test': 'fail',
       'keyboard_event_test': async_unittest,
 
-      'mediasource_test': 'fail', // was sdk#27578, needs triage
-      'media_stream_test': 'fail', // was sdk#27578, needs triage
-      'messageevent_test': 'fail', // was sdk#27578, needs triage
+      // was https://github.com/dart-lang/sdk/issues/27578, needs triage
+      'mediasource_test': 'fail',
+      'media_stream_test': 'fail',
+      'messageevent_test': 'fail',
 
       // Should throw but does not.
       'mirrors_js_typed_interop_test': 'fail',
 
       'mutationobserver_test': async_unittest,
       'native_gc_test': async_unittest,
-      'notification_test': 'fail', // was sdk#27578, needs triage
+
+      // was https://github.com/dart-lang/sdk/issues/27578, needs triage
+      'notification_test': 'fail',
+
       'postmessage_structured_test': async_unittest,
       'queryall_test': ['slow'], // see sdk #27794
       'request_animation_frame_test': async_unittest,
       'resource_http_test': async_unittest,
-      'rtc_test': is.chrome('<=55') ? fail : pass, // was sdk#27578, needs triage
+
+      // was https://github.com/dart-lang/sdk/issues/27578, needs triage
+      'rtc_test': is.chrome('<=55') ? fail : pass,
 
       // Expected 1, got null.
       'serialized_script_value_test': 'fail',
+
       'shadow_dom_test': firefox_fail,
-      'speechrecognition_test': 'fail', // was sdk#27578, needs triage
-      'svgelement_test': chrome_fail, // was sdk#27578, needs triage
+
+      // was https://github.com/dart-lang/sdk/issues/27578, needs triage
+      'speechrecognition_test': 'fail',
+      'svgelement_test': chrome_fail,
       'text_event_test': firefox_fail,
-      'touchevent_test': 'fail', // was sdk#27578, needs triage
+
+      // was https://github.com/dart-lang/sdk/issues/27578, needs triage
+      'touchevent_test': 'fail',
+
       'transferables_test': async_unittest,
       'transition_event_test': async_unittest,
       'url_test': async_unittest,
@@ -666,6 +694,7 @@
       'relation_assignable_test': fail,
       'relation_subtype_test': fail,
       'set_field_with_final_test': fail,
+      'spawn_function_root_library_test': skip_fail,
       'symbol_validation_test_01_multi': fail,
       'symbol_validation_test_none_multi': fail,
       'to_string_test': fail,
@@ -748,6 +777,7 @@
         async_helper.asyncTestInitialize(done);
         console.debug('Running test:  ' + name);
 
+        var result = null;
         let mainLibrary = require(module)[libraryName(name)];
         let negative = /negative_test/.test(name);
         if (has('slow')) this.timeout(10000);
@@ -769,7 +799,7 @@
             if (negative) {
               assert.throws(mainLibrary.main);
             } else {
-              mainLibrary.main();
+              result = mainLibrary.main();
             }
           } finally {
             minitest.finishTests();
@@ -781,7 +811,13 @@
         document.body.innerHTML = '';
         console.log("cleared");
 
-        if (!async_helper.asyncTestStarted) done();
+        if (!async_helper.asyncTestStarted) {
+          if (!result) {
+            done();
+          } else {
+            result.then(dart_sdk.dart.dynamic)(() => done());
+          }
+        }
       });
     }
   }
diff --git a/pkg/dev_compiler/test/codegen/js_test.dart b/pkg/dev_compiler/test/codegen/js_test.dart
index 4476801..2c862d0 100644
--- a/pkg/dev_compiler/test/codegen/js_test.dart
+++ b/pkg/dev_compiler/test/codegen/js_test.dart
@@ -447,7 +447,7 @@
       var result = context.callMethod('callable');
       expect(result, 'called');
       context.deleteProperty('callable');
-    }, skip: "https://github.com/dart-lang/dev_compiler/issues/244");
+    });
 
   });
 
diff --git a/pkg/dev_compiler/test/codegen_test.dart b/pkg/dev_compiler/test/codegen_test.dart
index f33df56..4c4446c 100644
--- a/pkg/dev_compiler/test/codegen_test.dart
+++ b/pkg/dev_compiler/test/codegen_test.dart
@@ -79,9 +79,8 @@
       .where((p) => p.endsWith('.sum'))
       .toList();
 
-  var sharedCompiler = new ModuleCompiler(
-      new AnalyzerOptions.basic(
-          dartSdkSummaryPath: sdkSummaryFile, summaryPaths: summaryPaths));
+  var sharedCompiler = new ModuleCompiler(new AnalyzerOptions.basic(
+      dartSdkSummaryPath: sdkSummaryFile, summaryPaths: summaryPaths));
 
   var testDirs = [
     'language',
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
index ffeb76a..6d7a5e8 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
@@ -56,8 +56,8 @@
   static apply(Function f,
                List positionalArguments,
                [Map<Symbol, dynamic> namedArguments]) {
-    // TODO(vsm): Handle named args.
-    // See: https://github.com/dart-lang/dev_compiler/issues/176
+    // TODO(vsm): Handle named args:
+    // https://github.com/dart-lang/sdk/issues/27257
     return JS('', 'dart.dcall.apply(null, [#].concat(#))', f, positionalArguments);
   }
 
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/errors.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/errors.dart
index 0f8d0b4..49bc1cc 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/errors.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/errors.dart
@@ -3,41 +3,48 @@
 // BSD-style license that can be found in the LICENSE file.
 part of dart._runtime;
 
+bool _trapRuntimeErrors = true;
+
+// Override, e.g., for testing
+void trapRuntimeErrors(bool flag) {
+  _trapRuntimeErrors = flag;
+}
+
 throwCastError(object, actual, type) => JS('', '''(() => {
-  debugger;
-  $throw_(new $CastErrorImplementation($object,
-                                       $typeName($actual),
-                                       $typeName($type)));
+  var found = $typeName($actual);
+  var expected = $typeName($type);
+  if ($_trapRuntimeErrors) debugger;
+  $throw_(new $CastErrorImplementation($object, found, expected));
 })()''');
 
 throwTypeError(object, actual, type) => JS('', '''(() => {
-  debugger;
-  $throw_(new $TypeErrorImplementation($object,
-                                       $typeName($actual),
-                                       $typeName($type)));
+  var found = $typeName($actual);
+  var expected = $typeName($type);
+  if ($_trapRuntimeErrors) debugger;
+  $throw_(new $TypeErrorImplementation($object, found, expected));
 })()''');
 
 throwStrongModeCastError(object, actual, type) => JS('', '''(() => {
-  debugger;
-  $throw_(new $StrongModeCastError($object,
-                                   $typeName($actual),
-                                   $typeName($type)));
+  var found = $typeName($actual);
+  var expected = $typeName($type);
+  if ($_trapRuntimeErrors) debugger;
+  $throw_(new $StrongModeCastError($object, found, expected));
 })()''');
 
 throwStrongModeTypeError(object, actual, type) => JS('', '''(() => {
-  debugger;
-  $throw_(new $StrongModeTypeError($object,
-                                   $typeName($actual),
-                                   $typeName($type)));
+  var found = $typeName($actual);
+  var expected = $typeName($type);
+  if ($_trapRuntimeErrors) debugger;
+  $throw_(new $StrongModeTypeError($object, found, expected));
 })()''');
 
 throwUnimplementedError(message) => JS('', '''(() => {
-  debugger;
+  if ($_trapRuntimeErrors) debugger;
   $throw_(new $UnimplementedError($message));
 })()''');
 
 throwAssertionError([message]) => JS('', '''(() => {
-  debugger;
+  if ($_trapRuntimeErrors) debugger;
   let error = $message != null
         ? new $AssertionErrorWithMessage($message())
         : new $AssertionError();
@@ -48,7 +55,7 @@
   // TODO(vsm): Per spec, we should throw an NSM here.  Technically, we ought
   // to thread through method info, but that uglifies the code and can't
   // actually be queried ... it only affects how the error is printed.
-  debugger;
+  if ($_trapRuntimeErrors) debugger;
   $throw_(new $NoSuchMethodError(null,
       new $Symbol('<Unexpected Null Value>'), null, null, null));
 })()''');
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/generators.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/generators.dart
index b8138d7..a88138b 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/generators.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/generators.dart
@@ -5,7 +5,7 @@
 /// This library adapts ES6 generators to implement Dart's async/await.
 /// It's designed to interact with Dart's Future/Stream and follow Dart
 /// async/await semantics.
-/// See https://github.com/dart-lang/dev_compiler/issues/245 for ideas on
+/// See https://github.com/dart-lang/sdk/issues/27315 for ideas on
 /// reconciling Dart's Future and ES6 Promise.
 /// Inspired by `co`: https://github.com/tj/co/blob/master/index.js, which is a
 /// stepping stone for proposed ES7 async/await, and uses ES6 Promises.
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart
index cefbefb..629ae6b 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart
@@ -761,7 +761,7 @@
   }
   // TODO(jmesserly): restore this faster path once ES Symbol is treated as
   // an extension type (and thus hits the above code path).
-  // See https://github.com/dart-lang/dev_compiler/issues/578.
+  // See https://github.com/dart-lang/sdk/issues/28323
   // return JS('', '"" + #', obj);
   return JS('String', '#.toString()', obj);
 }
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart
index a604423..154410e 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart
@@ -24,13 +24,13 @@
 /// This error indicates a strong mode specific failure, other than a type
 /// assertion failure (TypeError) or CastError.
 void throwStrongModeError(String message) {
-  JS('', 'debugger');
+  if (_trapRuntimeErrors) JS('', 'debugger');
   JS('', 'throw new #(#);', StrongModeErrorImplementation, message);
 }
 
 /// This error indicates a bug in the runtime or the compiler.
 void throwInternalError(String message) {
-  JS('', 'debugger');
+  if (_trapRuntimeErrors) JS('', 'debugger');
   JS('', 'throw Error(#)', message);
 }
 
@@ -98,7 +98,7 @@
     // On native types, Symbol.iterator may already be present.
     // TODO(jmesserly): investigate if we still need this.
     // If so, we need to find a better solution.
-    // See: https://github.com/dart-lang/dev_compiler/issues/487
+    // See https://github.com/dart-lang/sdk/issues/28324
     var existing = getOwnPropertyDescriptor(to, name);
     if (existing != null) {
       if (JS('bool', '#.writable', existing)) {
diff --git a/pkg/dev_compiler/tool/input_sdk/private/interceptors.dart b/pkg/dev_compiler/tool/input_sdk/private/interceptors.dart
index daa0e77..4c84cc9 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/interceptors.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/interceptors.dart
@@ -98,7 +98,7 @@
 // dart:html can be used in dart2js an dev compiler.
 // Warning: calls to these methods need to be removed before custom elements
 // and cross-frame dom objects behave correctly in ddc.
-// See https://github.com/dart-lang/dev_compiler/issues/517
+// See https://github.com/dart-lang/sdk/issues/28326
 findInterceptorConstructorForType(Type type) { }
 findConstructorForNativeSubclassType(Type type, String name) { }
 getNativeInterceptor(object) {}
diff --git a/pkg/dev_compiler/tool/input_sdk/private/js_helper.dart b/pkg/dev_compiler/tool/input_sdk/private/js_helper.dart
index 336eaa2..a20547b 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/js_helper.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/js_helper.dart
@@ -878,8 +878,8 @@
 }
 
 
-// TODO(jmesserly): this adapter is to work around:
-// https://github.com/dart-lang/dev_compiler/issues/247
+// TODO(jmesserly): this adapter is to work around
+// https://github.com/dart-lang/sdk/issues/28320
 class SyncIterator<E> implements Iterator<E> {
   final dynamic _jsIterator;
   E _current;
diff --git a/pkg/dev_compiler/tool/input_sdk/private/native_helper.dart b/pkg/dev_compiler/tool/input_sdk/private/native_helper.dart
index de77f66..335805b 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/native_helper.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/native_helper.dart
@@ -24,8 +24,8 @@
 }
 
 // Warning: calls to these methods need to be removed before custom elements
-// and cross-frame dom objects behave correctly in ddc.
-// See https://github.com/dart-lang/dev_compiler/issues/517
+// and cross-frame dom objects behave correctly in ddc
+// https://github.com/dart-lang/sdk/issues/28326
 setNativeSubclassDispatchRecord(proto, interceptor) { }
 findDispatchTagForInterceptorClass(interceptorClassConstructor) {}
 makeLeafDispatchRecord(interceptor) {}
diff --git a/pkg/dev_compiler/tool/sdk_expected_errors.txt b/pkg/dev_compiler/tool/sdk_expected_errors.txt
index 0a3d26e..c3223fa 100644
--- a/pkg/dev_compiler/tool/sdk_expected_errors.txt
+++ b/pkg/dev_compiler/tool/sdk_expected_errors.txt
@@ -1,12 +1,5 @@
 [error] Couldn't infer type parameter 'T'; '_ControllerEventSinkWrapper<dynamic>' must be of type 'EventSink<T>'. (dart:async/stream.dart, line 1346, col 16)
 [error] The argument type '_ControllerEventSinkWrapper' can't be assigned to the parameter type 'EventSink<T>'. (dart:async/stream.dart, line 1346, col 53)
-[error] A value of type '<R>(Zone, ZoneDelegate, Zone, () → R) → R' can't be assigned to a parameter of type '(Zone, ZoneDelegate, Zone, () → dynamic) → dynamic'. (dart:async/zone.dart, line 1071, col 51)
-[error] A value of type '<R,T>(Zone, ZoneDelegate, Zone, (T) → R, T) → R' can't be assigned to a parameter of type '(Zone, ZoneDelegate, Zone, (dynamic) → dynamic, dynamic) → dynamic'. (dart:async/zone.dart, line 1073, col 56)
-[error] A value of type '<R,T1,T2>(Zone, ZoneDelegate, Zone, (T1, T2) → R, T1, T2) → R' can't be assigned to a parameter of type '(Zone, ZoneDelegate, Zone, (dynamic, dynamic) → dynamic, dynamic, dynamic) → dynamic'. (dart:async/zone.dart, line 1075, col 57)
-[error] A value of type '<R>(Zone, ZoneDelegate, Zone, () → R) → () → R' can't be assigned to a parameter of type '(Zone, ZoneDelegate, Zone, () → dynamic) → () → dynamic'. (dart:async/zone.dart, line 1078, col 23)
-[error] A value of type '<R,T>(Zone, ZoneDelegate, Zone, (T) → R) → (T) → R' can't be assigned to a parameter of type '(Zone, ZoneDelegate, Zone, (dynamic) → dynamic) → (dynamic) → dynamic'. (dart:async/zone.dart, line 1081, col 23)
-[error] A value of type '<R,T1,T2>(Zone, ZoneDelegate, Zone, (T1, T2) → R) → (T1, T2) → R' can't be assigned to a parameter of type '(Zone, ZoneDelegate, Zone, (dynamic, dynamic) → dynamic) → (dynamic, dynamic) → dynamic'. (dart:async/zone.dart, line 1084, col 23)
-[error] A value of type '<R>(Zone, ZoneDelegate, Zone, dynamic, StackTrace) → R' can't be assigned to a parameter of type '(Zone, ZoneDelegate, Zone, dynamic, StackTrace) → dynamic'. (dart:async/zone.dart, line 1100, col 23)
 [error] Invalid override. The type of 'ChunkedConverter.bind' ('(dynamic) → dynamic') isn't a subtype of 'Converter<S, T>.bind' ('(Stream<S>) → Stream<T>'). (dart:convert/chunked_conversion.dart, line 14, col 3)
 [error] Invalid override. The type of 'ChunkedConverter.bind' ('(dynamic) → dynamic') isn't a subtype of 'StreamTransformer<S, T>.bind' ('(Stream<S>) → Stream<T>'). (dart:convert/chunked_conversion.dart, line 14, col 3)
 [error] Invalid override. The type of 'ChunkedConverter.startChunkedConversion' ('(dynamic) → dynamic') isn't a subtype of 'Converter<S, T>.startChunkedConversion' ('(Sink<T>) → Sink<S>'). (dart:convert/chunked_conversion.dart, line 15, col 3)
diff --git a/pkg/front_end/lib/compiler_options.dart b/pkg/front_end/lib/compiler_options.dart
index 5230f4e..731344c 100644
--- a/pkg/front_end/lib/compiler_options.dart
+++ b/pkg/front_end/lib/compiler_options.dart
@@ -18,13 +18,13 @@
 ///
 /// Not intended to be implemented or extended by clients.
 class CompilerOptions {
-  /// The path to the Dart SDK.
+  /// The URI of the root of the Dart SDK (typically a "file:" URI).
   ///
   /// If `null`, the SDK will be searched for using
   /// [Platform.resolvedExecutable] as a starting point.
   ///
   /// This option is mutually exclusive with [sdkSummary].
-  String sdkPath;
+  Uri sdkRoot;
 
   /// Callback to which compilation errors should be delivered.
   ///
@@ -32,56 +32,58 @@
   /// type [CompilationError].
   ErrorHandler onError = defaultErrorHandler;
 
-  /// Path to the ".packages" file.
+  /// URI of the ".packages" file (typically a "file:" URI).
   ///
   /// If `null`, the ".packages" file will be found via the standard
   /// package_config search algorithm.
   ///
-  /// If the empty string, no packages file will be used.
-  String packagesFilePath;
+  /// If the URI's path component is empty (e.g. `new Uri()`), no packages file
+  /// will be used.
+  Uri packagesFileUri;
 
-  /// Paths to the input summary files (excluding the SDK summary).  These files
-  /// should all be linked summaries.  They should also be closed, in the sense
-  /// that any libraries they reference should also appear in [inputSummaries]
-  /// or [sdkSummary].
-  List<String> inputSummaries = [];
+  /// URIs of input summary files (excluding the SDK summary; typically these
+  /// will be "file:" URIs).  These files should all be linked summaries.  They
+  /// should also be closed, in the sense that any libraries they reference
+  /// should also appear in [inputSummaries] or [sdkSummary].
+  List<Uri> inputSummaries = [];
 
-  /// Path to the SDK summary file.
+  /// URI of the SDK summary file (typically a "file:" URI).
   ///
   /// This should be a linked summary.  If `null`, the SDK summary will be
-  /// searched for at a default location within [sdkPath].
+  /// searched for at a default location within [sdkRoot].
   ///
-  /// This option is mutually exclusive with [sdkPath].  TODO(paulberry): if the
+  /// This option is mutually exclusive with [sdkRoot].  TODO(paulberry): if the
   /// VM does not contain a pickled copy of the SDK, we might need to change
   /// this.
-  String sdkSummary;
+  Uri sdkSummary;
 
   /// URI override map.
   ///
-  /// This is a map from Uri to file path.  Any URI override listed in this map
-  /// takes precedence over the URI resolution that would be implied by the
-  /// packages file (see [packagesFilePath]) and/or [bazelRoots].
+  /// This is a map from URIs that might appear in import/export/part statements
+  /// to URIs that should be used to locate the corresponding files in the
+  /// [fileSystem].  Any URI override listed in this map takes precedence over
+  /// the URI resolution that would be implied by the packages file (see
+  /// [packagesFileUri]) and/or [multiRoots].
   ///
   /// If a URI is not listed in this map, then the normal URI resolution
   /// algorithm will be used.
   ///
   /// TODO(paulberry): transition analyzer and dev_compiler to use the
-  /// "file:///bazel-root" mechanism, and then remove this.
+  /// "multi-root:" mechanism, and then remove this.
   @deprecated
-  Map<Uri, String> uriOverride = {};
+  Map<Uri, Uri> uriOverride = {};
 
-  /// Bazel roots.
+  /// Multi-roots.
   ///
-  /// Any Uri that resolves to "file:///bazel-root/$rest" will be searched for
-  /// at "$root/$rest" ("$root\\$rest" in Windows), where "$root" is drawn from
-  /// this list.  If the file is not found at any of those locations, the URI
-  /// "file:///bazel-root/$rest" will be used directly.
+  /// Any Uri that resolves to "multi-root:///$rest" will be searched for
+  /// at "$root/$rest", where "$root" is drawn from this list.
   ///
-  /// Intended use: if the Bazel workspace is located at path "$workspace", this
-  /// could be set to `['$workspace', '$workspace/bazel-bin',
-  /// '$workspace/bazel-genfiles']`, effectively overlaying source and generated
-  /// files.
-  List<String> bazelRoots = [];
+  /// Intended use: if the user has a Bazel workspace located at path
+  /// "$workspace", this could be set to the file URIs corresponding to the
+  /// paths for "$workspace", "$workspace/bazel-bin",
+  /// and "$workspace/bazel-genfiles", effectively overlaying source and
+  /// generated files.
+  List<Uri> multiRoots = [];
 
   /// Sets the platform bit, which determines which patch files should be
   /// applied to the SDK.
@@ -99,7 +101,7 @@
   ///
   /// All file system access performed by the front end goes through this
   /// mechanism, with one exception: if no value is specified for
-  /// [packagesFilePath], the packages file is located using the actual physical
+  /// [packagesFileUri], the packages file is located using the actual physical
   /// file system.  TODO(paulberry): fix this.
   FileSystem fileSystem = PhysicalFileSystem.instance;
 
diff --git a/pkg/front_end/lib/file_system.dart b/pkg/front_end/lib/file_system.dart
index cadf82f..6e57c26 100644
--- a/pkg/front_end/lib/file_system.dart
+++ b/pkg/front_end/lib/file_system.dart
@@ -18,22 +18,17 @@
 /// Not intended to be implemented or extended by clients.
 abstract class FileSystem {
   /// Returns a path context suitable for use with this [FileSystem].
+  ///
+  /// TODO(paulberry): try to eliminate all usages of this.  Since the
+  /// FileSystem API now uses URIs rather than paths, it should not be needed.
   path.Context get context;
 
-  /// Returns a [FileSystemEntity] corresponding to the given [path].
-  ///
-  /// Uses of `..` and `.` in path are normalized before returning (so, for
-  /// example, `entityForPath('./foo')` and `entityForPath('foo')` are
-  /// equivalent).  Relative paths are also converted to absolute paths.
-  ///
-  /// Does not check whether a file or folder exists at the given location.
-  FileSystemEntity entityForPath(String path);
-
   /// Returns a [FileSystemEntity] corresponding to the given [uri].
   ///
   /// Uses of `..` and `.` in the URI are normalized before returning.
   ///
-  /// If [uri] is not an absolute `file:` URI, an [Error] will be thrown.
+  /// If the URI scheme is not supported by this file system, an [Error] will be
+  /// thrown.
   ///
   /// Does not check whether a file or folder exists at the given location.
   FileSystemEntity entityForUri(Uri uri);
@@ -46,14 +41,12 @@
 ///
 /// Not intended to be implemented or extended by clients.
 abstract class FileSystemEntity {
-  /// Returns the absolute normalized path represented by this file system
+  /// Returns the absolute normalized URI represented by this file system
   /// entity.
   ///
-  /// Note: if the [FileSystemEntity] was created using
-  /// [FileSystem.entityForPath], this is not necessarily the same as the path
-  /// that was used to create the object, since the path might have been
-  /// normalized.
-  String get path;
+  /// Note: this is not necessarily the same as the URI that was passed to
+  /// [FileSystem.entityForUri], since the URI might have been normalized.
+  Uri get uri;
 
   /// Attempts to access this file system entity as a file and read its contents
   /// as raw bytes.
diff --git a/pkg/front_end/lib/kernel_generator.dart b/pkg/front_end/lib/kernel_generator.dart
index a87bb68..348d1f9 100644
--- a/pkg/front_end/lib/kernel_generator.dart
+++ b/pkg/front_end/lib/kernel_generator.dart
@@ -59,7 +59,7 @@
 /// which will be read are those listed in [sources],
 /// [CompilerOptions.inputSummaries], and [CompilerOptions.sdkSummary].  If a
 /// source file attempts to refer to a file which is not obtainable from these
-/// paths, that will result in an error, even if the file exists on the
+/// URIs, that will result in an error, even if the file exists on the
 /// filesystem.
 ///
 /// When [CompilerOptions.chaseDependencies] is true, this default behavior
@@ -128,7 +128,8 @@
 Future<DartLoader> _createLoader(CompilerOptions options,
     {Repository repository, Uri entry}) async {
   var kernelOptions = _convertOptions(options);
-  var packages = await createPackages(options.packagesFilePath,
+  var packages = await createPackages(
+      _uriToPath(options.packagesFileUri, options),
       discoveryPath: entry?.path);
   return new DartLoader(
       repository ?? new Repository(), kernelOptions, packages);
@@ -137,11 +138,12 @@
 DartOptions _convertOptions(CompilerOptions options) {
   return new DartOptions(
       strongMode: options.strongMode,
-      sdk: options.sdkPath,
+      sdk: _uriToPath(options.sdkRoot, options),
       // TODO(sigmund): make it possible to use summaries and still compile the
       // sdk sources.
-      sdkSummary: options.compileSdk ? null : options.sdkSummary,
-      packagePath: options.packagesFilePath,
+      sdkSummary:
+          options.compileSdk ? null : _uriToPath(options.sdkSummary, options),
+      packagePath: _uriToPath(options.packagesFileUri, options),
       declaredVariables: options.declaredVariables);
 }
 
@@ -152,6 +154,14 @@
   }
 }
 
+String _uriToPath(Uri uri, CompilerOptions options) {
+  if (uri == null) return null;
+  if (uri.scheme != 'file') {
+    throw new StateError('Only file URIs are supported');
+  }
+  return options.fileSystem.context.fromUri(uri);
+}
+
 // TODO(sigmund): delete this class. Dartk should not format errors itself, we
 // should just pass them along.
 class _DartkError implements CompilationError {
diff --git a/pkg/front_end/lib/memory_file_system.dart b/pkg/front_end/lib/memory_file_system.dart
index 267cbe3..e7382ad 100644
--- a/pkg/front_end/lib/memory_file_system.dart
+++ b/pkg/front_end/lib/memory_file_system.dart
@@ -20,26 +20,29 @@
   @override
   final p.Context context;
 
-  final Map<String, Uint8List> _files = {};
+  final Map<Uri, Uint8List> _files = {};
 
   /// The "current directory" in the in-memory virtual file system.
   ///
-  /// This is used to convert relative paths to absolute paths.
-  String currentDirectory;
+  /// This is used to convert relative URIs to absolute URIs.
+  ///
+  /// Always ends in a trailing '/'.
+  Uri currentDirectory;
 
-  MemoryFileSystem(this.context, this.currentDirectory);
-
-  @override
-  MemoryFileSystemEntity entityForPath(String path) =>
-      new MemoryFileSystemEntity._(
-          this, context.normalize(context.join(currentDirectory, path)));
+  MemoryFileSystem(this.context, Uri currentDirectory)
+      : currentDirectory = _addTrailingSlash(currentDirectory);
 
   @override
   MemoryFileSystemEntity entityForUri(Uri uri) {
-    if (uri.scheme != 'file') throw new ArgumentError('File URI expected');
-    // Note: we don't have to verify that the URI's path is absolute, because
-    // URIs with non-empty schemes always have absolute paths.
-    return entityForPath(context.fromUri(uri));
+    return new MemoryFileSystemEntity._(
+        this, currentDirectory.resolveUri(uri).normalizePath());
+  }
+
+  static Uri _addTrailingSlash(Uri uri) {
+    if (!uri.path.endsWith('/')) {
+      uri = uri.replace(path: uri.path + '/');
+    }
+    return uri;
   }
 }
 
@@ -49,22 +52,22 @@
   final MemoryFileSystem _fileSystem;
 
   @override
-  final String path;
+  final Uri uri;
 
-  MemoryFileSystemEntity._(this._fileSystem, this.path);
+  MemoryFileSystemEntity._(this._fileSystem, this.uri);
 
   @override
-  int get hashCode => path.hashCode;
+  int get hashCode => uri.hashCode;
 
   @override
   bool operator ==(Object other) =>
       other is MemoryFileSystemEntity &&
-      other.path == path &&
+      other.uri == uri &&
       identical(other._fileSystem, _fileSystem);
 
   @override
   Future<List<int>> readAsBytes() async {
-    List<int> contents = _fileSystem._files[path];
+    List<int> contents = _fileSystem._files[uri];
     if (contents != null) {
       return contents.toList();
     }
@@ -82,7 +85,7 @@
   /// If no file exists, one is created.  If a file exists already, it is
   /// overwritten.
   void writeAsBytesSync(List<int> bytes) {
-    _fileSystem._files[path] = new Uint8List.fromList(bytes);
+    _fileSystem._files[uri] = new Uint8List.fromList(bytes);
   }
 
   /// Writes the given string to this file system entity.
@@ -95,6 +98,6 @@
     // Note: the return type of UTF8.encode is List<int>, but in practice it
     // always returns Uint8List.  We rely on that for efficiency, so that we
     // don't have to make an extra copy.
-    _fileSystem._files[path] = UTF8.encode(s) as Uint8List;
+    _fileSystem._files[uri] = UTF8.encode(s) as Uint8List;
   }
 }
diff --git a/pkg/front_end/lib/physical_file_system.dart b/pkg/front_end/lib/physical_file_system.dart
index 0ed5d8b..757eb60 100644
--- a/pkg/front_end/lib/physical_file_system.dart
+++ b/pkg/front_end/lib/physical_file_system.dart
@@ -24,36 +24,38 @@
   p.Context get context => p.context;
 
   @override
-  FileSystemEntity entityForPath(String path) =>
-      new _PhysicalFileSystemEntity(context.normalize(context.absolute(path)));
-
-  @override
   FileSystemEntity entityForUri(Uri uri) {
-    if (uri.scheme != 'file') throw new ArgumentError('File URI expected');
+    if (uri.scheme != 'file' && uri.scheme != '') {
+      throw new ArgumentError('File URI expected');
+    }
     // Note: we don't have to verify that the URI's path is absolute, because
     // URIs with non-empty schemes always have absolute paths.
-    return entityForPath(context.fromUri(uri));
+    var path = context.fromUri(uri);
+    return new _PhysicalFileSystemEntity(
+        context.normalize(context.absolute(path)));
   }
 }
 
 /// Concrete implementation of [FileSystemEntity] for use by
 /// [PhysicalFileSystem].
 class _PhysicalFileSystemEntity implements FileSystemEntity {
-  @override
-  final String path;
+  final String _path;
 
-  _PhysicalFileSystemEntity(this.path);
+  _PhysicalFileSystemEntity(this._path);
 
   @override
-  int get hashCode => path.hashCode;
+  int get hashCode => _path.hashCode;
+
+  @override
+  Uri get uri => p.toUri(_path);
 
   @override
   bool operator ==(Object other) =>
-      other is _PhysicalFileSystemEntity && other.path == path;
+      other is _PhysicalFileSystemEntity && other._path == _path;
 
   @override
-  Future<List<int>> readAsBytes() => new io.File(path).readAsBytes();
+  Future<List<int>> readAsBytes() => new io.File(_path).readAsBytes();
 
   @override
-  Future<String> readAsString() => new io.File(path).readAsString();
+  Future<String> readAsString() => new io.File(_path).readAsString();
 }
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index e1a4ef4..60ef2ec 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -4,6 +4,7 @@
 
 import 'dart:async';
 
+import 'package:analyzer/src/summary/idl.dart';
 import 'package:front_end/compiler_options.dart';
 import 'package:front_end/file_system.dart';
 import 'package:front_end/src/base/uri_resolver.dart';
@@ -29,6 +30,13 @@
   /// been computed yet.
   UriResolver _uriResolver;
 
+  /// The summary bundle for the SDK, or `null` if it has not been read yet.
+  PackageBundle _sdkSummary;
+
+  /// The location of the SDK, or `null` if the location hasn't been determined
+  /// yet.
+  Uri _sdkRoot;
+
   /// Initializes a [ProcessedOptions] object wrapping the given [rawOptions].
   ProcessedOptions(CompilerOptions rawOptions) : this._raw = rawOptions;
 
@@ -39,14 +47,38 @@
   /// Get the [FileSystem] which should be used by the front end to access
   /// files.
   ///
-  /// If the client supplied bazel roots using [CompilerOptions.bazelRoots], the
+  /// If the client supplied roots using [CompilerOptions.multiRoots], the
   /// returned [FileSystem] will automatically perform the appropriate mapping.
   FileSystem get fileSystem {
-    // TODO(paulberry): support bazelRoots.
-    assert(_raw.bazelRoots.isEmpty);
+    // TODO(paulberry): support multiRoots.
+    assert(_raw.multiRoots.isEmpty);
     return _raw.fileSystem;
   }
 
+  /// Get the summary bundle for the SDK.
+  ///
+  /// This is an asynchronous getter since file system operations are required.
+  Future<PackageBundle> getSdkSummary() async {
+    if (_sdkSummary == null) {
+      Uri summaryLocation;
+      if (_raw.sdkSummary != null) {
+        // Options sdkSummary and sdkRoot are mutually exclusive.
+        assert(_raw.sdkRoot == null);
+        // No need to look for the SDK; we were told where the SDK summary is.
+        summaryLocation = _raw.sdkSummary;
+      } else {
+        // Need to look for the SDK summary inside the SDK.
+        var sdkRoot = await _getSdkRoot();
+        summaryLocation = sdkRoot.resolve(
+            'lib/_internal/' + (_raw.strongMode ? 'strong.sum' : 'spec.sum'));
+      }
+      var summaryBytes =
+          await fileSystem.entityForUri(summaryLocation).readAsBytes();
+      _sdkSummary = new PackageBundle.fromBuffer(summaryBytes);
+    }
+    return _sdkSummary;
+  }
+
   /// Get the [UriResolver] which resolves "package:" and "dart:" URIs.
   ///
   /// This is an asynchronous getter since file system operations may be
@@ -56,8 +88,7 @@
       await _getPackages();
       var sdkLibraries =
           <String, Uri>{}; // TODO(paulberry): support SDK libraries
-      _uriResolver =
-          new UriResolver(_packages, sdkLibraries, fileSystem.context);
+      _uriResolver = new UriResolver(_packages, sdkLibraries);
     }
     return _uriResolver;
   }
@@ -68,17 +99,38 @@
   /// required to locate/read the packages file.
   Future<Map<String, Uri>> _getPackages() async {
     if (_packages == null) {
-      if (_raw.packagesFilePath == null) {
+      if (_raw.packagesFileUri == null) {
         throw new UnimplementedError(); // TODO(paulberry): search for .packages
-      } else if (_raw.packagesFilePath.isEmpty) {
+      } else if (_raw.packagesFileUri.path.isEmpty) {
         _packages = {};
       } else {
         var contents =
-            await fileSystem.entityForPath(_raw.packagesFilePath).readAsBytes();
-        var baseLocation = fileSystem.context.toUri(_raw.packagesFilePath);
-        _packages = package_config.parse(contents, baseLocation);
+            await fileSystem.entityForUri(_raw.packagesFileUri).readAsBytes();
+        _packages = package_config.parse(contents, _raw.packagesFileUri);
       }
     }
     return _packages;
   }
+
+  /// Get the location of the SDK.
+  ///
+  /// This is an asynchronous getter since file system operations may be
+  /// required to locate the SDK.
+  Future<Uri> _getSdkRoot() async {
+    if (_sdkRoot == null) {
+      // If an SDK summary location was provided, the SDK itself should not be
+      // needed.
+      assert(_raw.sdkSummary == null);
+      if (_raw.sdkRoot == null) {
+        // TODO(paulberry): implement the algorithm for finding the SDK
+        // automagically.
+        throw new UnimplementedError();
+      }
+      _sdkRoot = _raw.sdkRoot;
+      if (!_sdkRoot.path.endsWith('/')) {
+        _sdkRoot = _sdkRoot.replace(path: _sdkRoot.path + '/');
+      }
+    }
+    return _sdkRoot;
+  }
 }
diff --git a/pkg/front_end/lib/src/base/uri_resolver.dart b/pkg/front_end/lib/src/base/uri_resolver.dart
index db469f0..0c6a420 100644
--- a/pkg/front_end/lib/src/base/uri_resolver.dart
+++ b/pkg/front_end/lib/src/base/uri_resolver.dart
@@ -2,13 +2,15 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:path/path.dart' as p;
-
-/// The class `UriResolver` implements the rules for resolving URIs to file
-/// paths.
-///
-/// TODO(paulberry): Is it necessary to support the "http" scheme?
+/// The class `UriResolver` implements the rules for resolving "dart:" and
+/// "package:" URIs.
 class UriResolver {
+  /// The URI scheme used for "package" URIs.
+  static const PACKAGE_SCHEME = 'package';
+
+  /// The URI scheme used for "dart" URIs.
+  static const DART_SCHEME = 'dart';
+
   /// A map from package name to the file URI of the "lib" directory of the
   /// corresponding package.  This is equivalent to the format returned by
   /// the "package_config" package's parse() function.
@@ -18,36 +20,27 @@
   /// of the defining compilation unit of the SDK library.
   final Map<String, Uri> sdkLibraries;
 
-  /// The path context which should be used to convert from file URIs to file
-  /// paths.
-  final p.Context pathContext;
+  UriResolver(this.packages, this.sdkLibraries);
 
-  /// The URI scheme used for "package" URIs.
-  static const PACKAGE_SCHEME = 'package';
-
-  /// The URI scheme used for "dart" URIs.
-  static const DART_SCHEME = 'dart';
-
-  /// The URI scheme used for "file" URIs.
-  static const FILE_SCHEME = 'file';
-
-  UriResolver(this.packages, this.sdkLibraries, this.pathContext);
-
-  /// Converts a URI to a file path.
+  /// Converts "package:" and "dart:" URIs to the locations of the corresponding
+  /// files.
   ///
-  /// If the given URI is valid, and of a recognized form, returns the file path
-  /// it corresponds to.  Otherwise returns `null`.  It is not necessary for the
-  /// URI to be absolute (relative URIs will be converted to relative file
-  /// paths).
+  /// If the given URI is a "package:" or "dart:" URI, is well formed, and names
+  /// a package or dart library that is recognized, returns the URI it resolves
+  /// to.  If the given URI is a "package:" or "dart:" URI, and is ill-formed
+  /// or names a package or dart library that is not recognized, returns `null`.
   ///
-  /// Note that no I/O is performed; the file path that is returned will be
+  /// If the given URI has any scheme other than "package:" or "dart:", it is
+  /// returned unchanged.
+  ///
+  /// It is not necessary for the URI to be absolute (relative URIs will be
+  /// passed through unchanged).
+  ///
+  /// Note that no I/O is performed; the URI that is returned will be
   /// independent of whether or not any particular file exists on the file
   /// system.
-  String resolve(Uri uri) {
-    Uri fileUri;
-    if (uri.scheme == FILE_SCHEME) {
-      fileUri = uri;
-    } else {
+  Uri resolve(Uri uri) {
+    if (uri.scheme == DART_SCHEME || uri.scheme == PACKAGE_SCHEME) {
       var path = uri.path;
       var slashIndex = path.indexOf('/');
       String prefix;
@@ -67,9 +60,9 @@
         libUri = sdkLibraries[prefix];
       }
       if (libUri == null) return null;
-      fileUri = libUri.resolve(rest);
-      if (fileUri.scheme != FILE_SCHEME) return null;
+      return libUri.resolve(rest);
+    } else {
+      return uri;
     }
-    return pathContext.fromUri(fileUri);
   }
 }
diff --git a/pkg/front_end/lib/src/dependency_grapher_impl.dart b/pkg/front_end/lib/src/dependency_grapher_impl.dart
index 5dbe12d..0951931 100644
--- a/pkg/front_end/lib/src/dependency_grapher_impl.dart
+++ b/pkg/front_end/lib/src/dependency_grapher_impl.dart
@@ -99,13 +99,14 @@
   Future<List<_WalkerNode>> computeDependencies() async {
     var dependencies = <_WalkerNode>[];
     // TODO(paulberry): add error recovery if the file can't be read.
-    var path = walker.uriResolver.resolve(uri);
-    if (path == null) {
+    var resolvedUri = walker.uriResolver.resolve(uri);
+    if (resolvedUri == null) {
       // TODO(paulberry): If an error reporter was provided, report the error
       // in the proper way and continue.
       throw new StateError('Invalid URI: $uri');
     }
-    var contents = await walker.fileSystem.entityForPath(path).readAsString();
+    var contents =
+        await walker.fileSystem.entityForUri(resolvedUri).readAsString();
     var scanner = new _Scanner(contents);
     var token = scanner.tokenize();
     // TODO(paulberry): report errors.
diff --git a/pkg/front_end/test/dependency_grapher_test.dart b/pkg/front_end/test/dependency_grapher_test.dart
index bcfca56..826283d 100644
--- a/pkg/front_end/test/dependency_grapher_test.dart
+++ b/pkg/front_end/test/dependency_grapher_test.dart
@@ -35,15 +35,17 @@
     // If no starting points given, assume the first entry in [contents] is the
     // single starting point.
     startingPoints ??= [contents.keys.first];
-    var fileSystem = new MemoryFileSystem(pathos.posix, '/');
+    var fileSystem = new MemoryFileSystem(pathos.posix, Uri.parse('file:///'));
     contents.forEach((path, text) {
-      fileSystem.entityForPath(path).writeAsStringSync(text);
+      fileSystem.entityForUri(pathos.posix.toUri(path)).writeAsStringSync(text);
     });
     // TODO(paulberry): implement and test other option possibilities.
     var options = new CompilerOptions()
       ..fileSystem = fileSystem
       ..chaseDependencies = true
-      ..packagesFilePath = packagesFilePath;
+      ..packagesFileUri = packagesFilePath == ''
+          ? new Uri()
+          : pathos.posix.toUri(packagesFilePath);
     var graph = await graphForProgram(
         startingPoints.map(pathos.posix.toUri).toList(), options);
     return graph.topologicallySortedCycles;
diff --git a/pkg/front_end/test/memory_file_system_test.dart b/pkg/front_end/test/memory_file_system_test.dart
index b9757f3..365cd43 100644
--- a/pkg/front_end/test/memory_file_system_test.dart
+++ b/pkg/front_end/test/memory_file_system_test.dart
@@ -30,26 +30,23 @@
   setUp() {
     super.setUp();
     path = join(tempPath, 'file.txt');
-    file = fileSystem.entityForPath(path);
+    file = entityForPath(path);
   }
 
   test_equals_differentPaths() {
-    expect(
-        file == fileSystem.entityForPath(join(tempPath, 'file2.txt')), isFalse);
+    expect(file == entityForPath(join(tempPath, 'file2.txt')), isFalse);
   }
 
   test_equals_samePath() {
-    expect(
-        file == fileSystem.entityForPath(join(tempPath, 'file.txt')), isTrue);
+    expect(file == entityForPath(join(tempPath, 'file.txt')), isTrue);
   }
 
   test_hashCode_samePath() {
-    expect(file.hashCode,
-        fileSystem.entityForPath(join(tempPath, 'file.txt')).hashCode);
+    expect(file.hashCode, entityForPath(join(tempPath, 'file.txt')).hashCode);
   }
 
   test_path() {
-    expect(file.path, path);
+    expect(file.uri, fileSystem.context.toUri(path));
   }
 
   test_readAsBytes_badUtf8() async {
@@ -128,40 +125,44 @@
     tempUri = fileSystem.context.toUri(tempPath);
   }
 
-  test_entityForPath() {
-    var path = join(tempPath, 'file.txt');
-    expect(fileSystem.entityForPath(path).path, path);
+  test_currentDirectory_trailingSlash() {
+    // The currentDirectory should already end in a trailing slash.
+    expect(fileSystem.currentDirectory.path, endsWith('/'));
+    // A trailing slash should automatically be appended when creating a
+    // MemoryFileSystem.
+    var path = fileSystem.currentDirectory.path;
+    var currentDirectoryWithoutSlash = fileSystem.currentDirectory
+        .replace(path: path.substring(0, path.length - 1));
+    expect(
+        new MemoryFileSystem(fileSystem.context, currentDirectoryWithoutSlash)
+            .currentDirectory,
+        fileSystem.currentDirectory);
+    // If the currentDirectory supplied to the MemoryFileSystem constructor
+    // already has a trailing slash, no further trailing slash should be added.
+    expect(
+        new MemoryFileSystem(fileSystem.context, fileSystem.currentDirectory)
+            .currentDirectory,
+        fileSystem.currentDirectory);
   }
 
   test_entityForPath_absolutize() {
-    expect(fileSystem.entityForPath('file.txt').path,
-        join(fileSystem.currentDirectory, 'file.txt'));
+    expect(entityForPath('file.txt').uri,
+        fileSystem.currentDirectory.resolve('file.txt'));
   }
 
   test_entityForPath_normalize_dot() {
-    expect(fileSystem.entityForPath(join(tempPath, '.', 'file.txt')).path,
-        join(tempPath, 'file.txt'));
+    expect(entityForPath(join(tempPath, '.', 'file.txt')).uri,
+        Uri.parse('$tempUri/file.txt'));
   }
 
   test_entityForPath_normalize_dotDot() {
-    expect(
-        fileSystem.entityForPath(join(tempPath, 'foo', '..', 'file.txt')).path,
-        join(tempPath, 'file.txt'));
+    expect(entityForPath(join(tempPath, 'foo', '..', 'file.txt')).uri,
+        Uri.parse('$tempUri/file.txt'));
   }
 
   test_entityForUri() {
-    expect(fileSystem.entityForUri(Uri.parse('$tempUri/file.txt')).path,
-        join(tempPath, 'file.txt'));
-  }
-
-  test_entityForUri_bareUri_absolute() {
-    expect(() => fileSystem.entityForUri(Uri.parse('/file.txt')),
-        throwsA(new isInstanceOf<Error>()));
-  }
-
-  test_entityForUri_bareUri_relative() {
-    expect(() => fileSystem.entityForUri(Uri.parse('file.txt')),
-        throwsA(new isInstanceOf<Error>()));
+    expect(fileSystem.entityForUri(Uri.parse('$tempUri/file.txt')).uri,
+        Uri.parse('$tempUri/file.txt'));
   }
 
   test_entityForUri_fileUri_relative() {
@@ -184,18 +185,18 @@
   }
 
   test_entityForUri_nonFileUri() {
-    expect(() => fileSystem.entityForUri(Uri.parse('package:foo/bar.dart')),
-        throwsA(new isInstanceOf<Error>()));
+    var uri = Uri.parse('package:foo/bar.dart');
+    expect(fileSystem.entityForUri(uri).uri, uri);
   }
 
   test_entityForUri_normalize_dot() {
-    expect(fileSystem.entityForUri(Uri.parse('$tempUri/./file.txt')).path,
-        join(tempPath, 'file.txt'));
+    expect(fileSystem.entityForUri(Uri.parse('$tempUri/./file.txt')).uri,
+        Uri.parse('$tempUri/file.txt'));
   }
 
   test_entityForUri_normalize_dotDot() {
-    expect(fileSystem.entityForUri(Uri.parse('$tempUri/foo/../file.txt')).path,
-        join(tempPath, 'file.txt'));
+    expect(fileSystem.entityForUri(Uri.parse('$tempUri/foo/../file.txt')).uri,
+        Uri.parse('$tempUri/file.txt'));
   }
 }
 
@@ -213,8 +214,14 @@
 
 abstract class _BaseTest {
   MemoryFileSystem get fileSystem;
+
   String get tempPath;
+
+  MemoryFileSystemEntity entityForPath(String path) =>
+      fileSystem.entityForUri(fileSystem.context.toUri(path));
+
   String join(String path1, String path2, [String path3, String path4]);
+
   void setUp();
 }
 
@@ -227,8 +234,8 @@
 
   setUp() {
     tempPath = pathos.join(io.Directory.systemTemp.path, 'test_file_system');
-    fileSystem =
-        new MemoryFileSystem(pathos.context, io.Directory.current.path);
+    fileSystem = new MemoryFileSystem(
+        pathos.context, pathos.toUri(io.Directory.current.path));
   }
 }
 
@@ -241,7 +248,7 @@
 
   void setUp() {
     tempPath = '/test_file_system';
-    fileSystem = new MemoryFileSystem(pathos.posix, '/cwd');
+    fileSystem = new MemoryFileSystem(pathos.posix, Uri.parse('file:///cwd'));
   }
 }
 
@@ -254,6 +261,7 @@
 
   void setUp() {
     tempPath = r'c:\test_file_system';
-    fileSystem = new MemoryFileSystem(pathos.windows, r'c:\cwd');
+    fileSystem =
+        new MemoryFileSystem(pathos.windows, Uri.parse('file:///c:/cwd'));
   }
 }
diff --git a/pkg/front_end/test/physical_file_system_test.dart b/pkg/front_end/test/physical_file_system_test.dart
index 859e998..2a8cbb6 100644
--- a/pkg/front_end/test/physical_file_system_test.dart
+++ b/pkg/front_end/test/physical_file_system_test.dart
@@ -30,35 +30,19 @@
   setUp() {
     super.setUp();
     path = p.join(tempPath, 'file.txt');
-    file = PhysicalFileSystem.instance.entityForPath(path);
+    file = PhysicalFileSystem.instance.entityForUri(p.toUri(path));
   }
 
   test_equals_differentPaths() {
-    expect(
-        file ==
-            PhysicalFileSystem.instance
-                .entityForPath(p.join(tempPath, 'file2.txt')),
-        isFalse);
+    expect(file == entityForPath(p.join(tempPath, 'file2.txt')), isFalse);
   }
 
   test_equals_samePath() {
-    expect(
-        file ==
-            PhysicalFileSystem.instance
-                .entityForPath(p.join(tempPath, 'file.txt')),
-        isTrue);
+    expect(file == entityForPath(p.join(tempPath, 'file.txt')), isTrue);
   }
 
   test_hashCode_samePath() {
-    expect(
-        file.hashCode,
-        PhysicalFileSystem.instance
-            .entityForPath(p.join(tempPath, 'file.txt'))
-            .hashCode);
-  }
-
-  test_path() {
-    expect(file.path, path);
+    expect(file.hashCode, entityForPath(p.join(tempPath, 'file.txt')).hashCode);
   }
 
   test_readAsBytes_badUtf8() async {
@@ -98,6 +82,10 @@
     new io.File(path).writeAsBytesSync(bytes);
     expect(await file.readAsString(), '\u20ac');
   }
+
+  test_uri() {
+    expect(file.uri, p.toUri(path));
+  }
 }
 
 @reflectiveTest
@@ -111,48 +99,35 @@
 
   test_entityForPath() {
     var path = p.join(tempPath, 'file.txt');
-    expect(PhysicalFileSystem.instance.entityForPath(path).path, path);
+    expect(entityForPath(path).uri, p.toUri(path));
   }
 
   test_entityForPath_absolutize() {
-    expect(PhysicalFileSystem.instance.entityForPath('file.txt').path,
-        new io.File('file.txt').absolute.path);
+    expect(entityForPath('file.txt').uri,
+        p.toUri(new io.File('file.txt').absolute.path));
   }
 
   test_entityForPath_normalize_dot() {
-    expect(
-        PhysicalFileSystem.instance
-            .entityForPath(p.join(tempPath, '.', 'file.txt'))
-            .path,
-        p.join(tempPath, 'file.txt'));
+    expect(entityForPath(p.join(tempPath, '.', 'file.txt')).uri,
+        p.toUri(p.join(tempPath, 'file.txt')));
   }
 
   test_entityForPath_normalize_dotDot() {
-    expect(
-        PhysicalFileSystem.instance
-            .entityForPath(p.join(tempPath, 'foo', '..', 'file.txt'))
-            .path,
-        p.join(tempPath, 'file.txt'));
+    expect(entityForPath(p.join(tempPath, 'foo', '..', 'file.txt')).uri,
+        p.toUri(p.join(tempPath, 'file.txt')));
   }
 
   test_entityForUri() {
     expect(
         PhysicalFileSystem.instance
             .entityForUri(Uri.parse('$tempUri/file.txt'))
-            .path,
-        p.join(tempPath, 'file.txt'));
+            .uri,
+        p.toUri(p.join(tempPath, 'file.txt')));
   }
 
   test_entityForUri_bareUri_absolute() {
-    expect(
-        () => PhysicalFileSystem.instance.entityForUri(Uri.parse('/file.txt')),
-        throwsA(new isInstanceOf<Error>()));
-  }
-
-  test_entityForUri_bareUri_relative() {
-    expect(
-        () => PhysicalFileSystem.instance.entityForUri(Uri.parse('file.txt')),
-        throwsA(new isInstanceOf<Error>()));
+    expect(PhysicalFileSystem.instance.entityForUri(Uri.parse('/file.txt')).uri,
+        p.toUri(p.fromUri('/file.txt')));
   }
 
   test_entityForUri_fileUri_relative() {
@@ -185,16 +160,16 @@
     expect(
         PhysicalFileSystem.instance
             .entityForUri(Uri.parse('$tempUri/./file.txt'))
-            .path,
-        p.join(tempPath, 'file.txt'));
+            .uri,
+        p.toUri(p.join(tempPath, 'file.txt')));
   }
 
   test_entityForUri_normalize_dotDot() {
     expect(
         PhysicalFileSystem.instance
             .entityForUri(Uri.parse('$tempUri/foo/../file.txt'))
-            .path,
-        p.join(tempPath, 'file.txt'));
+            .uri,
+        p.toUri(p.join(tempPath, 'file.txt')));
   }
 }
 
@@ -202,6 +177,9 @@
   io.Directory tempDirectory;
   String tempPath;
 
+  FileSystemEntity entityForPath(String path) =>
+      PhysicalFileSystem.instance.entityForUri(p.toUri(path));
+
   setUp() {
     tempDirectory = io.Directory.systemTemp.createTempSync('test_file_system');
     tempPath = tempDirectory.absolute.path;
diff --git a/pkg/front_end/test/src/base/processed_options_test.dart b/pkg/front_end/test/src/base/processed_options_test.dart
index ff34028..94941f1 100644
--- a/pkg/front_end/test/src/base/processed_options_test.dart
+++ b/pkg/front_end/test/src/base/processed_options_test.dart
@@ -2,6 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'dart:async';
+
+import 'package:analyzer/src/summary/format.dart';
 import 'package:front_end/compiler_options.dart';
 import 'package:front_end/memory_file_system.dart';
 import 'package:front_end/src/base/processed_options.dart';
@@ -17,7 +20,18 @@
 
 @reflectiveTest
 class ProcessedOptionsTest {
-  final fileSystem = new MemoryFileSystem(pathos.posix, '/');
+  final fileSystem = new MemoryFileSystem(pathos.posix, Uri.parse('file:///'));
+
+  PackageBundleBuilder _mockSdkSummary;
+
+  PackageBundleBuilder get mockSdkSummary => _mockSdkSummary ??=
+      new PackageBundleBuilder(apiSignature: 'mock summary signature');
+
+  Future<Null> checkMockSummary(CompilerOptions raw) async {
+    var processed = new ProcessedOptions(raw);
+    var sdkSummary = await processed.getSdkSummary();
+    expect(sdkSummary.apiSignature, mockSdkSummary.apiSignature);
+  }
 
   test_compileSdk_false() {
     for (var value in [false, true]) {
@@ -35,48 +49,88 @@
     expect(processed.fileSystem, same(fileSystem));
   }
 
+  test_getSdkSummary_sdkLocationProvided_noTrailingSlash() async {
+    var uri = Uri.parse('file:///sdk');
+    writeMockSummaryTo(Uri.parse('$uri/lib/_internal/strong.sum'));
+    checkMockSummary(new CompilerOptions()
+      ..fileSystem = fileSystem
+      ..sdkRoot = uri);
+  }
+
+  test_getSdkSummary_sdkLocationProvided_spec() async {
+    var uri = Uri.parse('file:///sdk');
+    writeMockSummaryTo(Uri.parse('$uri/lib/_internal/spec.sum'));
+    checkMockSummary(new CompilerOptions()
+      ..fileSystem = fileSystem
+      ..strongMode = false
+      ..sdkRoot = uri);
+  }
+
+  test_getSdkSummary_sdkLocationProvided_trailingSlash() async {
+    var uri = Uri.parse('file:///sdk');
+    writeMockSummaryTo(Uri.parse('$uri/lib/_internal/strong.sum'));
+    checkMockSummary(new CompilerOptions()
+      ..fileSystem = fileSystem
+      ..sdkRoot = Uri.parse('$uri/'));
+  }
+
+  test_getSdkSummary_summaryLocationProvided() async {
+    var uri = Uri.parse('file:///sdkSummary');
+    writeMockSummaryTo(uri);
+    checkMockSummary(new CompilerOptions()
+      ..fileSystem = fileSystem
+      ..sdkSummary = uri);
+  }
+
   test_getUriResolver_explicitPackagesFile() async {
     // This .packages file should be ignored.
-    fileSystem.entityForPath('/.packages').writeAsStringSync('foo:bar\n');
+    fileSystem
+        .entityForUri(Uri.parse('file:///.packages'))
+        .writeAsStringSync('foo:bar\n');
     // This one should be used.
     fileSystem
-        .entityForPath('/explicit.packages')
+        .entityForUri(Uri.parse('file:///explicit.packages'))
         .writeAsStringSync('foo:baz\n');
     var raw = new CompilerOptions()
       ..fileSystem = fileSystem
-      ..packagesFilePath = '/explicit.packages';
+      ..packagesFileUri = Uri.parse('file:///explicit.packages');
     var processed = new ProcessedOptions(raw);
     var uriResolver = await processed.getUriResolver();
     expect(uriResolver.packages, {'foo': Uri.parse('file:///baz/')});
-    expect(uriResolver.pathContext, same(fileSystem.context));
   }
 
   test_getUriResolver_explicitPackagesFile_withBaseLocation() async {
     // This .packages file should be ignored.
-    fileSystem.entityForPath('/.packages').writeAsStringSync('foo:bar\n');
+    fileSystem
+        .entityForUri(Uri.parse('file:///.packages'))
+        .writeAsStringSync('foo:bar\n');
     // This one should be used.
     fileSystem
-        .entityForPath('/base/location/explicit.packages')
+        .entityForUri(Uri.parse('file:///base/location/explicit.packages'))
         .writeAsStringSync('foo:baz\n');
     var raw = new CompilerOptions()
       ..fileSystem = fileSystem
-      ..packagesFilePath = '/base/location/explicit.packages';
+      ..packagesFileUri = Uri.parse('file:///base/location/explicit.packages');
     var processed = new ProcessedOptions(raw);
     var uriResolver = await processed.getUriResolver();
     expect(
         uriResolver.packages, {'foo': Uri.parse('file:///base/location/baz/')});
-    expect(uriResolver.pathContext, same(fileSystem.context));
   }
 
   test_getUriResolver_noPackages() async {
     // .packages file should be ignored.
-    fileSystem.entityForPath('/.packages').writeAsStringSync('foo:bar\n');
+    fileSystem
+        .entityForUri(Uri.parse('file:///.packages'))
+        .writeAsStringSync('foo:bar\n');
     var raw = new CompilerOptions()
       ..fileSystem = fileSystem
-      ..packagesFilePath = '';
+      ..packagesFileUri = new Uri();
     var processed = new ProcessedOptions(raw);
     var uriResolver = await processed.getUriResolver();
     expect(uriResolver.packages, isEmpty);
-    expect(uriResolver.pathContext, same(fileSystem.context));
+  }
+
+  void writeMockSummaryTo(Uri uri) {
+    fileSystem.entityForUri(uri).writeAsBytesSync(mockSdkSummary.toBuffer());
   }
 }
diff --git a/pkg/front_end/test/src/base/uri_resolver_test.dart b/pkg/front_end/test/src/base/uri_resolver_test.dart
index 1273a19..627b466 100644
--- a/pkg/front_end/test/src/base/uri_resolver_test.dart
+++ b/pkg/front_end/test/src/base/uri_resolver_test.dart
@@ -21,7 +21,7 @@
   p.Context get pathContext;
 
   void test_badScheme() {
-    _expectResolution('foo:bar/baz.dart', null);
+    _expectResolutionUri('foo:bar/baz.dart', Uri.parse('foo:bar/baz.dart'));
   }
 
   void test_dart() {
@@ -46,19 +46,19 @@
   }
 
   void test_file() {
-    _expectResolution('file:///foo.dart', _p('foo.dart'));
+    _expectResolution(_fileUri('foo.dart'), _p('foo.dart'));
   }
 
   void test_fileLongPath() {
-    _expectResolution('file:///foo/bar.dart', _p('foo/bar.dart'));
+    _expectResolution(_fileUri('foo/bar.dart'), _p('foo/bar.dart'));
   }
 
   void test_noSchemeAbsolute() {
-    _expectResolution('/foo.dart', null);
+    _expectResolutionUri('/foo.dart', Uri.parse('/foo.dart'));
   }
 
   void test_noSchemeRelative() {
-    _expectResolution('foo.dart', null);
+    _expectResolution('foo.dart', 'foo.dart');
   }
 
   void test_package() {
@@ -102,6 +102,13 @@
   /// Verifies that the resolution of [uriString] produces the path
   /// [expectedResult].
   void _expectResolution(String uriString, String expectedResult) {
+    _expectResolutionUri(uriString,
+        expectedResult == null ? null : pathContext.toUri(expectedResult));
+  }
+
+  /// Verifies that the resolution of [uriString] produces the URI
+  /// [expectedResult].
+  void _expectResolutionUri(String uriString, Uri expectedResult) {
     var packages = {
       'foo': _u('packages/foo/lib/'),
       'bar': _u('packages/bar/lib/')
@@ -110,18 +117,31 @@
       'core': _u('sdk/lib/core/core.dart'),
       'async': _u('sdk/lib/async/async.dart')
     };
-    var uriResolver = new UriResolver(packages, sdkLibraries, pathContext);
+    var uriResolver = new UriResolver(packages, sdkLibraries);
     expect(uriResolver.resolve(Uri.parse(uriString)), expectedResult);
   }
 
+  /// Prepends "file:///", plus a Windows drive letter if applicable, to the
+  /// given path.
+  String _fileUri(String pathPart) {
+    if (pathContext.separator == '/') {
+      return 'file:///$pathPart';
+    } else {
+      return 'file:///C:/$pathPart';
+    }
+  }
+
   /// Converts a posix style path into a path appropriate for the current path
   /// context.
   String _p(String posixPath) {
-    return pathContext.fromUri(_u(posixPath));
+    if (!posixPath.startsWith('/')) posixPath = '/$posixPath';
+    if (pathContext.separator == '/') return posixPath;
+    // Windows
+    return 'C:${posixPath.replaceAll('/', pathContext.separator)}';
   }
 
   /// Converts a posix style path into a file URI.
-  Uri _u(String posixPath) => Uri.parse('file:///$posixPath');
+  Uri _u(String posixPath) => pathContext.toUri(_p(posixPath));
 }
 
 /// Override of [UriResolverTest] which uses the native path context for the
diff --git a/pkg/front_end/tool/example.dart b/pkg/front_end/tool/example.dart
index 1d49b22..d81f437 100644
--- a/pkg/front_end/tool/example.dart
+++ b/pkg/front_end/tool/example.dart
@@ -11,17 +11,19 @@
 }
 
 Future kernelToSink(Uri entry, StreamSink<List<int>> sink) async {
-  var program = await kernelForProgram(entry,
+  var program = await kernelForProgram(
+      entry,
       new CompilerOptions()
-        ..sdkPath = 'sdk'
-        ..packagesFilePath = '.packages'
+        ..sdkRoot = new Uri.file('sdk')
+        ..packagesFileUri = new Uri.file('.packages')
         ..onError = (e) => print(e.message));
 
   await dumpToSink(program, sink);
 }
 
 main(args) async {
-  kernelToSink(Uri.base.resolve(args[0]),
+  kernelToSink(
+      Uri.base.resolve(args[0]),
       // TODO(sigmund,hausner): define memory type where to dump binary data.
       new StreamController<List<int>>.broadcast().sink);
 }
diff --git a/pkg/front_end/tool/perf.dart b/pkg/front_end/tool/perf.dart
index a69251b..7c4e4cd 100644
--- a/pkg/front_end/tool/perf.dart
+++ b/pkg/front_end/tool/perf.dart
@@ -115,15 +115,16 @@
   var options = new CompilerOptions()
     ..strongMode = false
     ..compileSdk = compileSdk
-    ..packagesFilePath = '.packages'
+    ..packagesFileUri = new Uri.file('.packages')
     ..onError = ((e) => print('${e.message}'));
   if (useSdkSummary) {
     // TODO(sigmund): adjust path based on the benchmark runner architecture.
     // Possibly let the runner make the file available at an architecture
     // independent location.
-    options.sdkSummary = 'out/ReleaseX64/dart-sdk/lib/_internal/spec.sum';
+    options.sdkSummary =
+        new Uri.file('out/ReleaseX64/dart-sdk/lib/_internal/spec.sum');
   } else {
-    options.sdkPath = 'sdk';
+    options.sdkRoot = new Uri.file('sdk');
   }
   Program program = await kernelForProgram(entryUri, options);
   dartkTimer.stop();
diff --git a/pkg/kernel/bin/dartk.dart b/pkg/kernel/bin/dartk.dart
index f6a6447..b8666a4 100755
--- a/pkg/kernel/bin/dartk.dart
+++ b/pkg/kernel/bin/dartk.dart
@@ -75,7 +75,9 @@
       hide: true)
   ..addFlag('show-external',
       help: 'When printing a library as text, also print its dependencies\n'
-          'on external libraries.');
+          'on external libraries.')
+  ..addFlag('show-offsets',
+      help: 'When printing a library as text, also print node offsets');
 
 String getUsage() => """
 Usage: dartk [options] FILE
@@ -376,7 +378,9 @@
     switch (format) {
       case 'text':
         writeProgramToText(program,
-            path: outputFile, showExternal: options['show-external']);
+            path: outputFile,
+            showExternal: options['show-external'],
+            showOffsets: options['show-offsets']);
         break;
       case 'bin':
         ioFuture = writeProgramToBinary(program, outputFile);
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index a016fed..a287dd6 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -196,6 +196,7 @@
 
 type NormalClass extends Class {
   Byte tag = 2;
+  FileOffset fileOffset;
   Byte flags (isAbstract, isTypeLevel);
   StringReference name;
   // An absolute path URI to the .dart file from which the class was created.
@@ -211,6 +212,7 @@
 
 type MixinClass extends Class {
   Byte tag = 3;
+  FileOffset fileOffset;
   Byte flags (isAbstract, isTypeLevel);
   StringReference name;
   // An absolute path URI to the .dart file from which the class was created.
@@ -228,6 +230,7 @@
 type Field extends Member {
   Byte tag = 4;
   FileOffset fileOffset;
+  FileOffset fileEndOffset;
   Byte flags (isFinal, isConst, isStatic);
   Name name;
   // An absolute path URI to the .dart file from which the field was created.
@@ -240,6 +243,8 @@
 
 type Constructor extends Member {
   Byte tag = 5;
+  FileOffset fileOffset;
+  FileOffset fileEndOffset;
   Byte flags (isConst, isExternal);
   Name name;
   List<Expression> annotations;
@@ -259,6 +264,8 @@
 
 type Procedure extends Member {
   Byte tag = 6;
+  FileOffset fileOffset;
+  FileOffset fileEndOffset;
   Byte kind; // Index into the ProcedureKind enum above.
   Byte flags (isStatic, isAbstract, isExternal, isConst);
   Name name;
@@ -309,7 +316,10 @@
 
 type FunctionNode {
   // Note: there is no tag on FunctionNode.
+  FileOffset fileOffset;
+  FileOffset fileEndOffset;
   Byte asyncMarker; // Index into AsyncMarker above.
+  Byte debuggable; // 1 for yes, 0 for no
   List<TypeParameter> typeParameters;
   UInt requiredParameterCount;
   List<VariableDeclaration> positionalParameters;
@@ -350,22 +360,26 @@
 
 type VariableGet extends Expression {
   Byte tag = 20;
+  FileOffset fileOffset;
   VariableReference variable;
 }
 
 type SpecializedVariableGet extends Expression {
   Byte tag = 128 + N; // Where 0 <= N < 8.
   // Equivalent to a VariableGet with index N.
+  FileOffset fileOffset;
 }
 
 type VariableSet extends Expression {
   Byte tag = 21;
+  FileOffset fileOffset;
   VariableReference variable;
   Expression value;
 }
 
 type SpecializedVariableSet extends Expression {
   Byte tag = 136 + N; // Where 0 <= N < 8.
+  FileOffset fileOffset;
   Expression value;
   // Equivalent to VariableSet with index N.
 }
@@ -518,11 +532,13 @@
 
 type StringConcatenation extends Expression {
   Byte tag = 36;
+  FileOffset fileOffset;
   List<Expression> expressions;
 }
 
 type IsExpression extends Expression {
   Byte tag = 37;
+  FileOffset fileOffset;
   Expression operand;
   DartType type;
 }
@@ -613,6 +629,7 @@
 
 type MapLiteral extends Expression {
   Byte tag = 50;
+  FileOffset fileOffset;
   DartType keyType;
   DartType valueType;
   List<MapEntry> entries;
@@ -759,6 +776,7 @@
 
 type ReturnStatement extends Statement {
   Byte tag = 74;
+  FileOffset fileOffset;
   Option<Expression> expression;
 }
 
@@ -783,6 +801,7 @@
 
 type YieldStatement extends Statement {
   Byte tag = 77;
+  FileOffset fileOffset;
   Byte flags (isYieldStar);
   Expression expression;
 }
@@ -793,6 +812,7 @@
 }
 
 type VariableDeclaration {
+  FileOffset fileOffset;
   Byte flags (isFinal, isConst);
   // For named parameters, this is the parameter name.
   // For other variables, the name is cosmetic, may be empty,
@@ -809,6 +829,7 @@
 
 type FunctionDeclaration extends Statement {
   Byte tag = 79;
+  FileOffset fileOffset;
   // The variable binding the function.  The variable is in scope
   // within the function for use as a self-reference.
   // Some of the fields in the variable are redundant, but its presence here
diff --git a/pkg/kernel/lib/analyzer/ast_from_analyzer.dart b/pkg/kernel/lib/analyzer/ast_from_analyzer.dart
index e232b29..7bf54a7 100644
--- a/pkg/kernel/lib/analyzer/ast_from_analyzer.dart
+++ b/pkg/kernel/lib/analyzer/ast_from_analyzer.dart
@@ -307,6 +307,11 @@
 
   ast.DartType get defaultTypeParameterBound => getRootClassReference().rawType;
 
+  ast.TypeParameter tryGetTypeParameterReference(TypeParameterElement element) {
+    return localTypeParameters[element] ??
+        loader.tryGetClassTypeParameter(element);
+  }
+
   ast.TypeParameter getTypeParameterReference(TypeParameterElement element) {
     return localTypeParameters[element] ??
         loader.tryGetClassTypeParameter(element) ??
@@ -385,7 +390,8 @@
             .toList();
       }
       return new List<ast.DartType>.filled(
-          genericFunctionType.typeParameters.length, const ast.DynamicType());
+          genericFunctionType.typeParameters.length, const ast.DynamicType(),
+          growable: true);
     } else {
       return <ast.DartType>[];
     }
@@ -472,7 +478,7 @@
         positionalParameters: positional,
         namedParameters: named,
         requiredParameterCount: requiredParameterCount,
-        returnType: returnType);
+        returnType: returnType)..fileOffset = element.nameOffset;
   }
 }
 
@@ -566,6 +572,8 @@
           break;
       }
     }
+    int offset = formalParameters?.offset ?? body.offset;
+    int endOffset = body.endToken.offset;
     return new ast.FunctionNode(buildOptionalFunctionBody(body),
         typeParameters: typeParameters,
         positionalParameters: positional,
@@ -575,7 +583,9 @@
             inferredReturnType ??
             const ast.DynamicType(),
         asyncMarker: getAsyncMarker(
-            isAsync: body.isAsynchronous, isStar: body.isGenerator));
+            isAsync: body.isAsynchronous, isStar: body.isGenerator))
+      ..fileOffset = offset
+      ..fileEndOffset = endOffset;
   }
 
   ast.Expression buildOptionalTopLevelExpression(Expression node) {
@@ -636,7 +646,8 @@
   ast.VariableDeclaration getVariableReference(LocalElement element) {
     return localVariables.putIfAbsent(element, () {
       return new ast.VariableDeclaration(element.name,
-          isFinal: isFinal(element), isConst: isConst(element));
+          isFinal: isFinal(element),
+          isConst: isConst(element))..fileOffset = element.nameOffset;
     });
   }
 
@@ -900,11 +911,19 @@
   StatementBuilder(this.scope, [this.breakStack, this.continueStack]);
 
   ast.Statement build(Statement node) {
-    return node.accept(this);
+    ast.Statement result = node.accept(this);
+    result.fileOffset = _getOffset(node);
+    return result;
   }
 
   ast.Statement buildOptional(Statement node) {
-    return node?.accept(this);
+    ast.Statement result = node?.accept(this);
+    result?.fileOffset = _getOffset(node);
+    return result;
+  }
+
+  int _getOffset(AstNode node) {
+    return node.offset;
   }
 
   ast.Statement buildInScope(
@@ -1171,6 +1190,28 @@
     return loop;
   }
 
+  DartType iterableElementType(DartType iterable) {
+    if (iterable is InterfaceType) {
+      var iterator = iterable.lookUpInheritedGetter('iterator')?.returnType;
+      if (iterator is InterfaceType) {
+        return iterator.lookUpInheritedGetter('current')?.returnType;
+      }
+    }
+    return null;
+  }
+
+  DartType streamElementType(DartType stream) {
+    if (stream is InterfaceType) {
+      var class_ = stream.element;
+      if (class_.library.isDartAsync &&
+          class_.name == 'Stream' &&
+          stream.typeArguments.length == 1) {
+        return stream.typeArguments[0];
+      }
+    }
+    return null;
+  }
+
   ast.Statement visitForEachStatement(ForEachStatement node) {
     ast.VariableDeclaration variable;
     Accessor leftHand;
@@ -1180,8 +1221,16 @@
           type: scope.buildOptionalTypeAnnotation(loopVariable.type));
     } else if (node.identifier != null) {
       leftHand = scope.buildLeftHandValue(node.identifier);
-      // TODO: In strong mode, set variable type based on iterable type.
       variable = new ast.VariableDeclaration(null, isFinal: true);
+      if (scope.strongMode) {
+        var containerType = node.iterable.staticType;
+        DartType elementType = node.awaitKeyword != null
+            ? streamElementType(containerType)
+            : iterableElementType(containerType);
+        if (elementType != null) {
+          variable.type = scope.buildType(elementType);
+        }
+      }
     }
     var breakNode = new LabelStack.unlabeled(breakStack);
     var continueNode = new LabelStack.unlabeled(continueStack);
@@ -1208,7 +1257,7 @@
         variable,
         scope.buildExpression(node.iterable),
         makeBreakTarget(body, continueNode),
-        isAsync: node.awaitKeyword != null);
+        isAsync: node.awaitKeyword != null)..fileOffset = node.offset;
     return makeBreakTarget(loop, breakNode);
   }
 
@@ -1279,14 +1328,14 @@
     var declaration = node.functionDeclaration;
     var expression = declaration.functionExpression;
     LocalElement element = declaration.element as dynamic; // Cross cast.
-    // TODO: Set a function type on the variable.
     return new ast.FunctionDeclaration(
-        scope.makeVariableDeclaration(element),
+        scope.makeVariableDeclaration(element,
+            type: scope.buildType(declaration.element.type)),
         scope.buildFunctionNode(expression.parameters, expression.body,
             typeParameters: scope.buildOptionalTypeParameterList(
                 expression.typeParameters,
                 strongModeOnly: true),
-            returnType: declaration.returnType));
+            returnType: declaration.returnType))..fileOffset = node.offset;
   }
 
   @override
@@ -1320,6 +1369,14 @@
       return node.identifier.offset;
     } else if (node is AssignmentExpression) {
       return _getOffset(node.leftHandSide);
+    } else if (node is PropertyAccess) {
+      return node.propertyName.offset;
+    } else if (node is IsExpression) {
+      return node.isOperator.offset;
+    } else if (node is StringLiteral) {
+      // Use a catch-all for StringInterpolation and AdjacentStrings:
+      // the debugger stops at the end.
+      return node.end;
     }
     return node.offset;
   }
@@ -1353,6 +1410,7 @@
       // Cut off the trailing '='.
       var name = new ast.Name(operator.substring(0, operator.length - 1));
       return leftHand.buildCompoundAssignment(name, rightHand,
+          offset: node.offset,
           voidContext: voidContext,
           interfaceTarget: scope.resolveInterfaceMethod(node.staticElement));
     }
@@ -1376,7 +1434,7 @@
       ast.Expression leftOperand = build(node.leftOperand);
       if (leftOperand is ast.VariableGet) {
         return new ast.ConditionalExpression(
-            buildIsNull(leftOperand),
+            buildIsNull(leftOperand, offset: node.leftOperand.offset),
             build(node.rightOperand),
             new ast.VariableGet(leftOperand.variable),
             scope.getInferredType(node));
@@ -1385,7 +1443,8 @@
         return new ast.Let(
             variable,
             new ast.ConditionalExpression(
-                buildIsNull(new ast.VariableGet(variable)),
+                buildIsNull(new ast.VariableGet(variable),
+                    offset: leftOperand.fileOffset),
                 build(node.rightOperand),
                 new ast.VariableGet(variable),
                 scope.getInferredType(node)));
@@ -1894,7 +1953,7 @@
                   new ast.VariableGet(receiver),
                   scope.buildName(node.methodName),
                   buildArgumentsForInvocation(node),
-                  element),
+                  element)..fileOffset = node.methodName.offset,
               scope.buildType(node.staticType)));
     } else {
       return buildDecomposableMethodInvocation(
@@ -1929,6 +1988,7 @@
         var leftHand = buildLeftHandValue(node.operand);
         var binaryOperator = new ast.Name(operator[0]);
         return leftHand.buildPostfixIncrement(binaryOperator,
+            offset: node.offset,
             voidContext: isInVoidContext(node),
             interfaceTarget: scope.resolveInterfaceMethod(node.staticElement));
 
@@ -1962,6 +2022,7 @@
         var leftHand = buildLeftHandValue(node.operand);
         var binaryOperator = new ast.Name(operator[0]);
         return leftHand.buildPrefixIncrement(binaryOperator,
+            offset: node.offset,
             interfaceTarget: scope.resolveInterfaceMethod(node.staticElement));
 
       default:
@@ -2125,7 +2186,15 @@
         return const ast.DynamicType();
       }
       if (boundVariables == null || boundVariables.contains(type)) {
-        var typeParameter = scope.getTypeParameterReference(type.element);
+        var typeParameter = scope.tryGetTypeParameterReference(type.element);
+        if (typeParameter == null) {
+          // The analyzer sometimes gives us a type parameter that was not
+          // bound anywhere.  Make sure we do not emit a dangling reference.
+          if (type.element.bound != null) {
+            return convertType(type.element.bound, []);
+          }
+          return const ast.DynamicType();
+        }
         if (!scope.allowClassTypeParameters &&
             typeParameter.parent is ast.Class) {
           return const ast.InvalidType();
@@ -2353,7 +2422,8 @@
     currentClass.name = element.name;
     currentClass.supertype = scope.getRootClassReference().asRawSupertype;
     currentClass.constructors.add(
-        new ast.Constructor(new ast.FunctionNode(new ast.InvalidStatement())));
+        new ast.Constructor(new ast.FunctionNode(new ast.InvalidStatement()))
+          ..fileOffset = element.nameOffset);
   }
 
   void addAnnotations(List<Annotation> annotations) {
@@ -2487,35 +2557,55 @@
   visitEnumDeclaration(EnumDeclaration node) {
     addAnnotations(node.metadata);
     ast.Class classNode = currentClass;
+
     var intType = scope.loader.getCoreClassReference('int').rawType;
     var indexFieldElement = element.fields.firstWhere(_isIndexField);
     ast.Field indexField = scope.getMemberReference(indexFieldElement);
     indexField.type = intType;
     classNode.addMember(indexField);
-    var parameter = new ast.VariableDeclaration('index', type: intType);
+
+    var stringType = scope.loader.getCoreClassReference('String').rawType;
+    ast.Field nameField = new ast.Field(
+        new ast.Name('_name', scope.currentLibrary),
+        type: stringType,
+        isFinal: true,
+        fileUri: classNode.fileUri);
+    classNode.addMember(nameField);
+
+    var indexParameter = new ast.VariableDeclaration('index', type: intType);
+    var nameParameter = new ast.VariableDeclaration('name', type: stringType);
     var function = new ast.FunctionNode(new ast.EmptyStatement(),
-        positionalParameters: [parameter]);
+        positionalParameters: [indexParameter, nameParameter]);
     var superConstructor = scope.loader.getRootClassConstructorReference();
     var constructor = new ast.Constructor(function,
         name: new ast.Name(''),
         isConst: true,
         initializers: [
-          new ast.FieldInitializer(indexField, new ast.VariableGet(parameter)),
+          new ast.FieldInitializer(
+              indexField, new ast.VariableGet(indexParameter)),
+          new ast.FieldInitializer(
+              nameField, new ast.VariableGet(nameParameter)),
           new ast.SuperInitializer(superConstructor, new ast.Arguments.empty())
-        ]);
+        ])..fileOffset = element.nameOffset;
     classNode.addMember(constructor);
+
     int index = 0;
     var enumConstantFields = <ast.Field>[];
     for (var constant in node.constants) {
       ast.Field field = scope.getMemberReference(constant.element);
       field.initializer = new ast.ConstructorInvocation(
-          constructor, new ast.Arguments([new ast.IntLiteral(index)]),
+          constructor,
+          new ast.Arguments([
+            new ast.IntLiteral(index),
+            new ast.StringLiteral('${classNode.name}.${field.name.name}')
+          ]),
           isConst: true)..parent = field;
       field.type = classNode.rawType;
       classNode.addMember(field);
       ++index;
       enumConstantFields.add(field);
     }
+
     // Add the 'values' field.
     var valuesFieldElement = element.fields.firstWhere(_isValuesField);
     ast.Field valuesField = scope.getMemberReference(valuesFieldElement);
@@ -2527,7 +2617,15 @@
         isConst: true,
         typeArgument: enumType)..parent = valuesField;
     classNode.addMember(valuesField);
-    // TODO: Add the toString method.
+
+    // Add the 'toString()' method.
+    var body = new ast.ReturnStatement(
+        new ast.DirectPropertyGet(new ast.ThisExpression(), nameField));
+    var toStringFunction = new ast.FunctionNode(body, returnType: stringType);
+    var toStringMethod = new ast.Procedure(
+        new ast.Name('toString'), ast.ProcedureKind.Method, toStringFunction,
+        fileUri: classNode.fileUri);
+    classNode.addMember(toStringMethod);
   }
 
   visitClassTypeAlias(ClassTypeAlias node) {
@@ -2578,6 +2676,7 @@
 
   void build(AstNode node) {
     if (node != null) {
+      currentMember.fileEndOffset = node.endToken.offset;
       node.accept(this);
     } else {
       buildBrokenMember();
diff --git a/pkg/kernel/lib/analyzer/loader.dart b/pkg/kernel/lib/analyzer/loader.dart
index 43a1b3d..cba5824 100644
--- a/pkg/kernel/lib/analyzer/loader.dart
+++ b/pkg/kernel/lib/analyzer/loader.dart
@@ -268,7 +268,7 @@
     _classes[element] = classNode = new ast.Class(
         name: element.name,
         isAbstract: element.isAbstract,
-        fileUri: '${element.source.uri}');
+        fileUri: '${element.source.uri}')..fileOffset = element.nameOffset;
     classNode.level = ast.ClassLevel.Temporary;
     var library = getLibraryReference(element.library);
     library.addClass(classNode);
@@ -318,6 +318,9 @@
           // Use a shared mixin application class for this library.
           var mixinClass = getSharedMixinApplicationClass(
               scope.currentLibrary, supertype.classNode, mixinType.classNode);
+          if (mixinClass.fileOffset < 0) {
+            mixinClass.fileOffset = element.nameOffset;
+          }
           supertype = new ast.Supertype(
               mixinClass,
               supertype.typeArguments.length > mixinType.typeArguments.length
@@ -333,7 +336,7 @@
               typeParameters: freshParameters.freshTypeParameters,
               supertype: freshParameters.substituteSuper(supertype),
               mixedInType: freshParameters.substituteSuper(mixinType),
-              fileUri: classNode.fileUri);
+              fileUri: classNode.fileUri)..fileOffset = element.nameOffset;
           mixinClass.level = ast.ClassLevel.Type;
           supertype = new ast.Supertype(mixinClass,
               classNode.typeParameters.map(makeTypeParameterType).toList());
@@ -446,12 +449,14 @@
               isStatic: true,
               isExternal: constructor.isExternal,
               isConst: constructor.isConst,
-              fileUri: '${element.source.uri}');
+              fileUri: '${element.source.uri}')
+            ..fileOffset = element.nameOffset;
         }
         return new ast.Constructor(scope.buildFunctionInterface(constructor),
             name: _nameOfMember(element),
             isConst: constructor.isConst,
-            isExternal: constructor.isExternal);
+            isExternal: constructor.isExternal)
+          ..fileOffset = element.nameOffset;
 
       case ElementKind.FIELD:
       case ElementKind.TOP_LEVEL_VARIABLE:
@@ -480,7 +485,7 @@
             isAbstract: executable.isAbstract,
             isStatic: executable.isStatic,
             isExternal: executable.isExternal,
-            fileUri: '${element.source.uri}');
+            fileUri: '${element.source.uri}')..fileOffset = element.nameOffset;
 
       default:
         throw 'Unexpected member kind: $element';
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index aaf08707..f35e754 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -498,6 +498,11 @@
 }
 
 abstract class Member extends TreeNode {
+  /// End offset in the source file it comes from. Valid values are from 0 and
+  /// up, or -1 ([TreeNode.noOffset]) if the file end offset is not available
+  /// (this is the default if none is specifically set).
+  int fileEndOffset = TreeNode.noOffset;
+
   /// List of metadata annotations on the member.
   ///
   /// This defaults to an immutable empty list. Use [addAnnotation] to add
@@ -944,6 +949,10 @@
 
   _MemberAccessor get _getterInterface => _reference;
   _MemberAccessor get _setterInterface => _reference;
+
+  Location _getLocationInEnclosingFile(int offset) {
+    return enclosingProgram.getLocation(fileUri, offset);
+  }
 }
 
 enum ProcedureKind {
@@ -1104,7 +1113,13 @@
 /// This may occur in a procedure, constructor, function expression, or local
 /// function declaration.
 class FunctionNode extends TreeNode {
+  /// End offset in the source file it comes from. Valid values are from 0 and
+  /// up, or -1 ([TreeNode.noOffset]) if the file end offset is not available
+  /// (this is the default if none is specifically set).
+  int fileEndOffset = TreeNode.noOffset;
+
   AsyncMarker asyncMarker;
+  bool debuggable = true;
   List<TypeParameter> typeParameters;
   int requiredParameterCount;
   List<VariableDeclaration> positionalParameters;
@@ -3547,7 +3562,7 @@
     int lineIndex = low;
     int lineStart = lines[lineIndex];
     int lineNumber = 1 + lineIndex;
-    int columnNumber = offset - lineStart;
+    int columnNumber = 1 + offset - lineStart;
     return new Location(file, lineNumber, columnNumber);
   }
 }
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 0dee08d..8c940f6 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -321,6 +321,7 @@
   }
 
   void readNormalClass(Class node) {
+    node.fileOffset = readOffset();
     int flags = readByte();
     node.isAbstract = flags & 0x1 != 0;
     node.level = _currentLibrary.isExternal
@@ -347,6 +348,7 @@
   }
 
   void readMixinClass(Class node) {
+    node.fileOffset = readOffset();
     int flags = readByte();
     node.isAbstract = flags & 0x1 != 0;
     node.level = _currentLibrary.isExternal
@@ -384,6 +386,7 @@
     // consumed from the input.
     assert(tag == Tag.Field);
     node.fileOffset = readOffset();
+    node.fileEndOffset = readOffset();
     node.flags = readByte();
     node.name = readName();
     node.fileUri = readUriReference();
@@ -399,6 +402,8 @@
 
   void readConstructor(Constructor node, int tag) {
     assert(tag == Tag.Constructor);
+    node.fileOffset = readOffset();
+    node.fileEndOffset = readOffset();
     node.flags = readByte();
     node.name = readName();
     node.annotations = readAnnotationList(node);
@@ -414,6 +419,8 @@
 
   void readProcedure(Procedure node, int tag) {
     assert(tag == Tag.Procedure);
+    node.fileOffset = readOffset();
+    node.fileEndOffset = readOffset();
     int kindIndex = readByte();
     node.kind = ProcedureKind.values[kindIndex];
     node.flags = readByte();
@@ -451,7 +458,10 @@
   }
 
   FunctionNode readFunctionNode() {
+    int offset = readOffset();
+    int endOffset = readOffset();
     AsyncMarker asyncMarker = AsyncMarker.values[readByte()];
+    bool debuggable = readByte() == 1 ? true : false;
     int typeParameterStackHeight = typeParameterStack.length;
     var typeParameters = readAndPushTypeParameterList();
     var requiredParameterCount = readUInt();
@@ -473,7 +483,10 @@
         namedParameters: named,
         returnType: returnType,
         inferredReturnValue: inferredReturnValue,
-        asyncMarker: asyncMarker);
+        asyncMarker: asyncMarker)
+      ..fileOffset = offset
+      ..fileEndOffset = endOffset
+      ..debuggable = debuggable;
   }
 
   void pushVariableDeclaration(VariableDeclaration variable) {
@@ -520,15 +533,22 @@
       case Tag.InvalidExpression:
         return new InvalidExpression();
       case Tag.VariableGet:
-        return new VariableGet(readVariableReference(), readDartTypeOption());
+        int offset = readOffset();
+        return new VariableGet(readVariableReference(), readDartTypeOption())
+          ..fileOffset = offset;
       case Tag.SpecializedVariableGet:
         int index = tagByte & Tag.SpecializedPayloadMask;
-        return new VariableGet(variableStack[index]);
+        int offset = readOffset();
+        return new VariableGet(variableStack[index])..fileOffset = offset;
       case Tag.VariableSet:
-        return new VariableSet(readVariableReference(), readExpression());
+        int offset = readOffset();
+        return new VariableSet(readVariableReference(), readExpression())
+          ..fileOffset = offset;
       case Tag.SpecializedVariableSet:
         int index = tagByte & Tag.SpecializedPayloadMask;
-        return new VariableSet(variableStack[index], readExpression());
+        int offset = readOffset();
+        return new VariableSet(variableStack[index], readExpression())
+          ..fileOffset = offset;
       case Tag.PropertyGet:
         int offset = readOffset();
         return new PropertyGet(
@@ -597,9 +617,13 @@
         return new ConditionalExpression(readExpression(), readExpression(),
             readExpression(), readDartTypeOption());
       case Tag.StringConcatenation:
-        return new StringConcatenation(readExpressionList());
+        int offset = readOffset();
+        return new StringConcatenation(readExpressionList())
+          ..fileOffset = offset;
       case Tag.IsExpression:
-        return new IsExpression(readExpression(), readDartType());
+        int offset = readOffset();
+        return new IsExpression(readExpression(), readDartType())
+          ..fileOffset = offset;
       case Tag.AsExpression:
         return new AsExpression(readExpression(), readDartType());
       case Tag.StringLiteral:
@@ -641,15 +665,21 @@
         return new ListLiteral(readExpressionList(),
             typeArgument: typeArgument, isConst: true);
       case Tag.MapLiteral:
+        int offset = readOffset();
         var keyType = readDartType();
         var valueType = readDartType();
         return new MapLiteral(readMapEntryList(),
-            keyType: keyType, valueType: valueType, isConst: false);
+            keyType: keyType,
+            valueType: valueType,
+            isConst: false)..fileOffset = offset;
       case Tag.ConstMapLiteral:
+        int offset = readOffset();
         var keyType = readDartType();
         var valueType = readDartType();
         return new MapLiteral(readMapEntryList(),
-            keyType: keyType, valueType: valueType, isConst: true);
+            keyType: keyType,
+            valueType: valueType,
+            isConst: true)..fileOffset = offset;
       case Tag.AwaitExpression:
         return new AwaitExpression(readExpression());
       case Tag.FunctionExpression:
@@ -755,25 +785,29 @@
         return new IfStatement(
             readExpression(), readStatement(), readStatementOrNullIfEmpty());
       case Tag.ReturnStatement:
-        return new ReturnStatement(readExpressionOption());
+        int offset = readOffset();
+        return new ReturnStatement(readExpressionOption())..fileOffset = offset;
       case Tag.TryCatch:
         return new TryCatch(readStatement(), readCatchList());
       case Tag.TryFinally:
         return new TryFinally(readStatement(), readStatement());
       case Tag.YieldStatement:
+        int offset = readOffset();
         int flags = readByte();
         return new YieldStatement(readExpression(),
             isYieldStar: flags & YieldStatement.FlagYieldStar != 0,
-            isNative: flags & YieldStatement.FlagNative != 0);
+            isNative: flags & YieldStatement.FlagNative != 0)
+          ..fileOffset = offset;
       case Tag.VariableDeclaration:
         var variable = readVariableDeclaration();
         variableStack.add(variable); // Will be popped by the enclosing scope.
         return variable;
       case Tag.FunctionDeclaration:
+        int offset = readOffset();
         var variable = readVariableDeclaration();
         variableStack.add(variable); // Will be popped by the enclosing scope.
         var function = readFunctionNode();
-        return new FunctionDeclaration(variable, function);
+        return new FunctionDeclaration(variable, function)..fileOffset = offset;
       default:
         throw fail('Invalid statement tag: $tag');
     }
@@ -925,13 +959,14 @@
   }
 
   VariableDeclaration readVariableDeclaration() {
+    int offset = readOffset();
     int flags = readByte();
     return new VariableDeclaration(readStringOrNullIfEmpty(),
         type: readDartType(),
         inferredValue: readOptionalInferredValue(),
         initializer: readExpressionOption(),
         isFinal: flags & 0x1 != 0,
-        isConst: flags & 0x2 != 0);
+        isConst: flags & 0x2 != 0)..fileOffset = offset;
   }
 
   int readOffset() {
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 37dd80e..6d3dabd 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -203,11 +203,11 @@
     }
   }
 
-  writeOffset(TreeNode node) {
+  writeOffset(TreeNode node, int offset) {
     // TODO(jensj): Delta-encoding.
     // File offset ranges from -1 and up,
     // but is here saved as unsigned (thus the +1)
-    writeUInt30(node.fileOffset + 1);
+    writeUInt30(offset + 1);
   }
 
   void visitClassReference(Class node) {
@@ -290,6 +290,7 @@
     }
     if (node.isMixinApplication) {
       writeByte(Tag.MixinClass);
+      writeOffset(node, node.fileOffset);
       writeByte(flags);
       writeStringReference(node.name ?? '');
       writeUriReference(node.fileUri ?? '');
@@ -303,6 +304,7 @@
       _typeParameterIndexer.exit(node.typeParameters);
     } else {
       writeByte(Tag.NormalClass);
+      writeOffset(node, node.fileOffset);
       writeByte(flags);
       writeStringReference(node.name ?? '');
       writeUriReference(node.fileUri ?? '');
@@ -323,6 +325,8 @@
   visitConstructor(Constructor node) {
     _variableIndexer = new VariableIndexer();
     writeByte(Tag.Constructor);
+    writeOffset(node, node.fileOffset);
+    writeOffset(node, node.fileEndOffset);
     writeByte(node.flags);
     writeName(node.name ?? _emptyName);
     writeAnnotationList(node.annotations);
@@ -338,6 +342,8 @@
   visitProcedure(Procedure node) {
     _variableIndexer = new VariableIndexer();
     writeByte(Tag.Procedure);
+    writeOffset(node, node.fileOffset);
+    writeOffset(node, node.fileEndOffset);
     writeByte(node.kind.index);
     writeByte(node.flags);
     writeName(node.name ?? '');
@@ -350,7 +356,8 @@
   visitField(Field node) {
     _variableIndexer = new VariableIndexer();
     writeByte(Tag.Field);
-    writeOffset(node);
+    writeOffset(node, node.fileOffset);
+    writeOffset(node, node.fileEndOffset);
     writeByte(node.flags);
     writeName(node.name ?? '');
     writeUriReference(node.fileUri ?? '');
@@ -397,7 +404,10 @@
     _switchCaseIndexer = new SwitchCaseIndexer();
     // Note: FunctionNode has no tag.
     _typeParameterIndexer.enter(node.typeParameters);
+    writeOffset(node, node.fileOffset);
+    writeOffset(node, node.fileEndOffset);
     writeByte(node.asyncMarker.index);
+    writeByte(node.debuggable ? 1 : 0);
     writeNodeList(node.typeParameters);
     writeUInt30(node.requiredParameterCount);
     writeVariableDeclarationList(node.positionalParameters);
@@ -422,8 +432,10 @@
     if (index & Tag.SpecializedPayloadMask == index &&
         node.promotedType == null) {
       writeByte(Tag.SpecializedVariableGet + index);
+      writeOffset(node, node.fileOffset);
     } else {
       writeByte(Tag.VariableGet);
+      writeOffset(node, node.fileOffset);
       writeUInt30(_variableIndexer[node.variable]);
       writeOptionalNode(node.promotedType);
     }
@@ -434,9 +446,11 @@
     int index = _variableIndexer[node.variable];
     if (index & Tag.SpecializedPayloadMask == index) {
       writeByte(Tag.SpecializedVariableSet + index);
+      writeOffset(node, node.fileOffset);
       writeNode(node.value);
     } else {
       writeByte(Tag.VariableSet);
+      writeOffset(node, node.fileOffset);
       writeUInt30(_variableIndexer[node.variable]);
       writeNode(node.value);
     }
@@ -444,7 +458,7 @@
 
   visitPropertyGet(PropertyGet node) {
     writeByte(Tag.PropertyGet);
-    writeOffset(node);
+    writeOffset(node, node.fileOffset);
     writeNode(node.receiver);
     writeName(node.name);
     writeMemberReference(node.interfaceTarget, allowNull: true);
@@ -452,7 +466,7 @@
 
   visitPropertySet(PropertySet node) {
     writeByte(Tag.PropertySet);
-    writeOffset(node);
+    writeOffset(node, node.fileOffset);
     writeNode(node.receiver);
     writeName(node.name);
     writeNode(node.value);
@@ -487,7 +501,7 @@
 
   visitStaticGet(StaticGet node) {
     writeByte(Tag.StaticGet);
-    writeOffset(node);
+    writeOffset(node, node.fileOffset);
     writeMemberReference(node.target);
   }
 
@@ -499,7 +513,7 @@
 
   visitMethodInvocation(MethodInvocation node) {
     writeByte(Tag.MethodInvocation);
-    writeOffset(node);
+    writeOffset(node, node.fileOffset);
     writeNode(node.receiver);
     writeName(node.name);
     writeNode(node.arguments);
@@ -508,7 +522,7 @@
 
   visitSuperMethodInvocation(SuperMethodInvocation node) {
     writeByte(Tag.SuperMethodInvocation);
-    writeOffset(node);
+    writeOffset(node, node.fileOffset);
     writeName(node.name);
     writeNode(node.arguments);
     writeMemberReference(node.interfaceTarget, allowNull: true);
@@ -523,7 +537,7 @@
 
   visitStaticInvocation(StaticInvocation node) {
     writeByte(node.isConst ? Tag.ConstStaticInvocation : Tag.StaticInvocation);
-    writeOffset(node);
+    writeOffset(node, node.fileOffset);
     writeMemberReference(node.target);
     writeNode(node.arguments);
   }
@@ -532,7 +546,7 @@
     writeByte(node.isConst
         ? Tag.ConstConstructorInvocation
         : Tag.ConstructorInvocation);
-    writeOffset(node);
+    writeOffset(node, node.fileOffset);
     writeMemberReference(node.target);
     writeNode(node.arguments);
   }
@@ -580,11 +594,13 @@
 
   visitStringConcatenation(StringConcatenation node) {
     writeByte(Tag.StringConcatenation);
+    writeOffset(node, node.fileOffset);
     writeNodeList(node.expressions);
   }
 
   visitIsExpression(IsExpression node) {
     writeByte(Tag.IsExpression);
+    writeOffset(node, node.fileOffset);
     writeNode(node.operand);
     writeNode(node.type);
   }
@@ -655,7 +671,7 @@
 
   visitThrow(Throw node) {
     writeByte(Tag.Throw);
-    writeOffset(node);
+    writeOffset(node, node.fileOffset);
     writeNode(node.expression);
   }
 
@@ -667,6 +683,7 @@
 
   visitMapLiteral(MapLiteral node) {
     writeByte(node.isConst ? Tag.ConstMapLiteral : Tag.MapLiteral);
+    writeOffset(node, node.fileOffset);
     writeNode(node.keyType);
     writeNode(node.valueType);
     writeNodeList(node.entries);
@@ -801,6 +818,7 @@
 
   visitReturnStatement(ReturnStatement node) {
     writeByte(Tag.ReturnStatement);
+    writeOffset(node, node.fileOffset);
     writeOptionalNode(node.expression);
   }
 
@@ -828,6 +846,7 @@
 
   visitYieldStatement(YieldStatement node) {
     writeByte(Tag.YieldStatement);
+    writeOffset(node, node.fileOffset);
     writeByte(node.flags);
     writeNode(node.expression);
   }
@@ -838,6 +857,7 @@
   }
 
   void writeVariableDeclaration(VariableDeclaration node) {
+    writeOffset(node, node.fileOffset);
     writeByte(node.flags);
     writeStringReference(node.name ?? '');
     writeNode(node.type);
@@ -863,6 +883,7 @@
 
   visitFunctionDeclaration(FunctionDeclaration node) {
     writeByte(Tag.FunctionDeclaration);
+    writeOffset(node, node.fileOffset);
     writeVariableDeclaration(node.variable);
     writeNode(node.function);
   }
diff --git a/pkg/kernel/lib/class_hierarchy.dart b/pkg/kernel/lib/class_hierarchy.dart
index c538127..6771cc4 100644
--- a/pkg/kernel/lib/class_hierarchy.dart
+++ b/pkg/kernel/lib/class_hierarchy.dart
@@ -232,6 +232,15 @@
     }
   }
 
+  /// True if the program contains another class that is a subtype of given one.
+  bool hasProperSubtypes(Class class_) {
+    var info = _infoFor[class_];
+    var subtypes = info.subtypeIntervalList;
+    return !(subtypes.length == 2 &&
+        subtypes[0] == info.topDownIndex &&
+        subtypes[1] == info.topDownIndex + 1);
+  }
+
   ClassHierarchy._internal(Program program, int numberOfClasses)
       : classes = new List<Class>(numberOfClasses) {
     // Build the class ordering based on a topological sort.
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index 4cfb9e8..3b9a6a2 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -341,7 +341,8 @@
         isConst: node.isConst,
         isExternal: node.isExternal,
         initializers: node.initializers.map(clone).toList(),
-        transformerFlags: node.transformerFlags);
+        transformerFlags: node.transformerFlags)
+      ..fileEndOffset = node.fileEndOffset;
   }
 
   visitProcedure(Procedure node) {
@@ -351,7 +352,7 @@
         isExternal: node.isExternal,
         isConst: node.isConst,
         transformerFlags: node.transformerFlags,
-        fileUri: node.fileUri);
+        fileUri: node.fileUri)..fileEndOffset = node.fileEndOffset;
   }
 
   visitField(Field node) {
@@ -364,7 +365,7 @@
         hasImplicitGetter: node.hasImplicitGetter,
         hasImplicitSetter: node.hasImplicitSetter,
         transformerFlags: node.transformerFlags,
-        fileUri: node.fileUri);
+        fileUri: node.fileUri)..fileEndOffset = node.fileEndOffset;
   }
 
   visitTypeParameter(TypeParameter node) {
@@ -386,7 +387,7 @@
         namedParameters: named,
         requiredParameterCount: node.requiredParameterCount,
         returnType: visitType(node.returnType),
-        asyncMarker: node.asyncMarker);
+        asyncMarker: node.asyncMarker)..fileEndOffset = node.fileEndOffset;
   }
 
   visitArguments(Arguments node) {
diff --git a/pkg/kernel/lib/frontend/accessors.dart b/pkg/kernel/lib/frontend/accessors.dart
index 17355b0..48bb2c5 100644
--- a/pkg/kernel/lib/frontend/accessors.dart
+++ b/pkg/kernel/lib/frontend/accessors.dart
@@ -42,30 +42,39 @@
   }
 
   Expression buildCompoundAssignment(Name binaryOperator, Expression value,
-      {bool voidContext: false, Procedure interfaceTarget}) {
+      {int offset: TreeNode.noOffset,
+      bool voidContext: false,
+      Procedure interfaceTarget}) {
     return _finish(_makeWrite(
-        builtBinary =
-            makeBinary(_makeRead(), binaryOperator, interfaceTarget, value),
+        builtBinary = makeBinary(
+            _makeRead(), binaryOperator, interfaceTarget, value,
+            offset: offset),
         voidContext));
   }
 
   Expression buildPrefixIncrement(Name binaryOperator,
-      {bool voidContext: false, Procedure interfaceTarget}) {
+      {int offset: TreeNode.noOffset,
+      bool voidContext: false,
+      Procedure interfaceTarget}) {
     return buildCompoundAssignment(binaryOperator, new IntLiteral(1),
-        voidContext: voidContext, interfaceTarget: interfaceTarget);
+        offset: offset,
+        voidContext: voidContext,
+        interfaceTarget: interfaceTarget);
   }
 
   Expression buildPostfixIncrement(Name binaryOperator,
-      {bool voidContext: false, Procedure interfaceTarget}) {
+      {int offset: TreeNode.noOffset,
+      bool voidContext: false,
+      Procedure interfaceTarget}) {
     if (voidContext) {
-      return buildPrefixIncrement(binaryOperator,
+      return buildPrefixIncrement(binaryOperator, offset: offset,
           voidContext: true, interfaceTarget: interfaceTarget);
     }
     var value = new VariableDeclaration.forValue(_makeRead());
     valueAccess() => new VariableGet(value);
     var dummy = new VariableDeclaration.forValue(_makeWrite(
-        builtBinary = makeBinary(
-            valueAccess(), binaryOperator, interfaceTarget, new IntLiteral(1)),
+        builtBinary = makeBinary(valueAccess(), binaryOperator, interfaceTarget,
+            new IntLiteral(1), offset: offset),
         true));
     return _finish(makeLet(value, makeLet(dummy, valueAccess())));
   }
@@ -400,16 +409,19 @@
   return new Let(variable, body);
 }
 
-Expression makeBinary(Expression left, Name operator, Procedure interfaceTarget,
-    Expression right) {
+Expression makeBinary(
+    Expression left, Name operator, Procedure interfaceTarget, Expression right,
+    {int offset: TreeNode.noOffset}) {
   return new MethodInvocation(
-      left, operator, new Arguments(<Expression>[right]), interfaceTarget);
+      left, operator, new Arguments(<Expression>[right]), interfaceTarget)
+    ..fileOffset = offset;
 }
 
 final Name _equalOperator = new Name('==');
 
-Expression buildIsNull(Expression value) {
-  return makeBinary(value, _equalOperator, null, new NullLiteral());
+Expression buildIsNull(Expression value, {int offset: TreeNode.noOffset}) {
+  return makeBinary(value, _equalOperator, null, new NullLiteral(),
+      offset: offset);
 }
 
 VariableDeclaration makeOrReuseVariable(Expression value) {
diff --git a/pkg/kernel/lib/kernel.dart b/pkg/kernel/lib/kernel.dart
index 7675c9c..1d67fb3 100644
--- a/pkg/kernel/lib/kernel.dart
+++ b/pkg/kernel/lib/kernel.dart
@@ -51,9 +51,10 @@
 }
 
 void writeProgramToText(Program program,
-    {String path, bool showExternal: false}) {
+    {String path, bool showExternal: false, bool showOffsets: false}) {
   StringBuffer buffer = new StringBuffer();
-  new Printer(buffer, showExternal: showExternal).writeProgramFile(program);
+  new Printer(buffer, showExternal: showExternal, showOffsets: showOffsets)
+      .writeProgramFile(program);
   if (path == null) {
     print(buffer);
   } else {
diff --git a/pkg/kernel/lib/repository.dart b/pkg/kernel/lib/repository.dart
index 265a75c..73cc1a9 100644
--- a/pkg/kernel/lib/repository.dart
+++ b/pkg/kernel/lib/repository.dart
@@ -20,7 +20,7 @@
 
   Library _buildLibraryReference(Uri uri) {
     assert(uri.hasScheme);
-    var library = new Library(uri, isExternal: true);
+    var library = new Library(uri, isExternal: true)..fileUri = '$uri';
     libraries.add(library);
     return library;
   }
diff --git a/pkg/kernel/lib/target/vm.dart b/pkg/kernel/lib/target/vm.dart
index e6c5d94..58c229d 100644
--- a/pkg/kernel/lib/target/vm.dart
+++ b/pkg/kernel/lib/target/vm.dart
@@ -4,8 +4,11 @@
 library kernel.target.vm;
 
 import '../ast.dart';
+import '../core_types.dart';
 import '../transformations/continuation.dart' as cont;
 import '../transformations/erasure.dart';
+import '../transformations/insert_covariance_checks.dart';
+import '../transformations/insert_type_checks.dart';
 import '../transformations/mixin_full_resolution.dart' as mix;
 import '../transformations/sanitize_for_vm.dart';
 import '../transformations/setup_builtin_library.dart' as setup_builtin_library;
@@ -51,7 +54,18 @@
       ];
 
   void transformProgram(Program program) {
-    new mix.MixinFullResolution().transform(program);
+    var mixins = new mix.MixinFullResolution();
+    mixins.transform(program);
+
+    if (strongMode) {
+      var hierarchy = mixins.hierarchy;
+      var coreTypes = new CoreTypes(program);
+      new InsertTypeChecks(hierarchy: hierarchy, coreTypes: coreTypes)
+          .transformProgram(program);
+      new InsertCovarianceChecks(hierarchy: hierarchy, coreTypes: coreTypes)
+          .transformProgram(program);
+    }
+
     cont.transformProgram(program);
 
     // Repair `_getMainClosure()` function in dart:_builtin.
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 18be9de..a0e7227 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -181,6 +181,7 @@
   int indentation = 0;
   int column = 0;
   bool showExternal;
+  bool showOffsets;
 
   static int SPACE = 0;
   static int WORD = 1;
@@ -190,6 +191,7 @@
   Printer(this.sink,
       {NameSystem syntheticNames,
       this.showExternal,
+      this.showOffsets: false,
       this.importTable,
       this.annotator: const InferredValueAnnotator()})
       : this.syntheticNames = syntheticNames ?? new NameSystem();
@@ -198,7 +200,8 @@
       : sink = parent.sink,
         syntheticNames = parent.syntheticNames,
         annotator = parent.annotator,
-        showExternal = parent.showExternal;
+        showExternal = parent.showExternal,
+        showOffsets = parent.showOffsets;
 
   String getLibraryName(Library node) {
     return node.name ?? syntheticNames.nameLibrary(node);
@@ -393,6 +396,9 @@
   }
 
   void writeNode(Node node) {
+    if (showOffsets && node is TreeNode) {
+      writeWord("[${node.fileOffset}]");
+    }
     node.accept(this);
   }
 
@@ -486,6 +492,7 @@
     if (function.asyncMarker != AsyncMarker.Sync) {
       writeSpaced(getAsyncMarkerKeyword(function.asyncMarker));
     }
+    if (!function.debuggable) writeSpaced("/* not debuggable */");
     if (function.body != null) {
       writeFunctionBody(function.body, terminateLine: terminateLine);
     } else if (terminateLine) {
@@ -626,6 +633,7 @@
   }
 
   void writeExpression(Expression node, [int minimumPrecedence]) {
+    if (showOffsets) writeWord("[${node.fileOffset}]");
     bool needsParenteses = false;
     if (minimumPrecedence != null && getPrecedence(node) < minimumPrecedence) {
       needsParenteses = true;
@@ -983,6 +991,12 @@
 
   visitVariableGet(VariableGet node) {
     writeVariableReference(node.variable);
+    if (node.promotedType != null) {
+      writeSymbol('{');
+      writeNode(node.promotedType);
+      writeSymbol('}');
+      state = WORD;
+    }
   }
 
   visitVariableSet(VariableSet node) {
@@ -1287,6 +1301,7 @@
 
   void writeVariableDeclaration(VariableDeclaration node,
       {bool useVarKeyword: false}) {
+    if (showOffsets) writeWord("[${node.fileOffset}]");
     writeModifier(node.isFinal, 'final');
     writeModifier(node.isConst, 'const');
     if (node.type != null) {
@@ -1380,6 +1395,9 @@
   }
 
   visitFunctionType(FunctionType node) {
+    if (state == WORD) {
+      ensureSpace();
+    }
     writeTypeParameterList(node.typeParameters);
     writeSymbol('(');
     var positional = node.positionalParameters;
diff --git a/pkg/kernel/lib/transformations/async.dart b/pkg/kernel/lib/transformations/async.dart
index 972d8dc..b01f71a 100644
--- a/pkg/kernel/lib/transformations/async.dart
+++ b/pkg/kernel/lib/transformations/async.dart
@@ -409,17 +409,19 @@
     final R = continuationRewriter;
     var shouldName = seenAwait;
     var result = new VariableGet(asyncResult);
+
     // The statements are in reverse order, so name the result first if
     // necessary and then add the two other statements in reverse.
     if (shouldName) result = name(result);
-    statements.add(R.createContinuationPoint());
+    statements.add(R.createContinuationPoint()..fileOffset = expr.fileOffset);
     Arguments arguments = new Arguments(<Expression>[
       expr.operand,
       new VariableGet(R.thenContinuationVariable),
       new VariableGet(R.catchErrorContinuationVariable)
     ]);
     statements.add(new ExpressionStatement(
-        new StaticInvocation(R.helper.awaitHelper, arguments)));
+        new StaticInvocation(R.helper.awaitHelper, arguments)
+          ..fileOffset = expr.fileOffset));
 
     seenAwait = false;
     var index = nameIndex;
diff --git a/pkg/kernel/lib/transformations/continuation.dart b/pkg/kernel/lib/transformations/continuation.dart
index 97ef172..f92d680 100644
--- a/pkg/kernel/lib/transformations/continuation.dart
+++ b/pkg/kernel/lib/transformations/continuation.dart
@@ -50,13 +50,12 @@
 abstract class ContinuationRewriterBase extends RecursiveContinuationRewriter {
   final FunctionNode enclosingFunction;
 
-  int currentTryDepth; // Nesting depth for try-blocks.
+  int currentTryDepth = 0; // Nesting depth for try-blocks.
   int currentCatchDepth = 0; // Nesting depth for catch-blocks.
   int capturedTryDepth = 0; // Deepest yield point within a try-block.
   int capturedCatchDepth = 0; // Deepest yield point within a catch-block.
 
-  ContinuationRewriterBase(HelperNodes helper, this.enclosingFunction,
-      {this.currentTryDepth: 0})
+  ContinuationRewriterBase(HelperNodes helper, this.enclosingFunction)
       : super(helper);
 
   Statement createContinuationPoint([Expression value]) {
@@ -68,28 +67,30 @@
 
   TreeNode visitTryCatch(TryCatch node) {
     if (node.body != null) {
-      currentTryDepth++;
+      ++currentTryDepth;
       node.body = node.body.accept(this);
       node.body?.parent = node;
-      currentTryDepth--;
+      --currentTryDepth;
     }
 
-    currentCatchDepth++;
+    ++currentCatchDepth;
     transformList(node.catches, this, node);
-    currentCatchDepth--;
+    --currentCatchDepth;
     return node;
   }
 
   TreeNode visitTryFinally(TryFinally node) {
     if (node.body != null) {
-      currentTryDepth++;
+      ++currentTryDepth;
       node.body = node.body.accept(this);
       node.body?.parent = node;
-      currentTryDepth--;
+      --currentTryDepth;
     }
     if (node.finalizer != null) {
+      ++currentCatchDepth;
       node.finalizer = node.finalizer.accept(this);
       node.finalizer?.parent = node;
+      --currentCatchDepth;
     }
     return node;
   }
@@ -125,9 +126,12 @@
     final function = new FunctionNode(buildClosureBody(),
         positionalParameters: [iteratorVariable],
         requiredParameterCount: 1,
-        asyncMarker: AsyncMarker.SyncYielding);
+        asyncMarker: AsyncMarker.SyncYielding)
+      ..fileOffset = enclosingFunction.fileOffset
+      ..fileEndOffset = enclosingFunction.fileEndOffset;
     final closureFunction =
-        new FunctionDeclaration(nestedClosureVariable, function);
+        new FunctionDeclaration(nestedClosureVariable, function)
+          ..fileOffset = enclosingFunction.parent.fileOffset;
 
     // return new _SyncIterable(:sync_body);
     final arguments = new Arguments([new VariableGet(nestedClosureVariable)]);
@@ -186,8 +190,7 @@
   ExpressionLifter expressionRewriter;
 
   AsyncRewriterBase(helper, enclosingFunction)
-      // Body is wrapped in the try-catch so initial currentTryDepth is 1.
-      : super(helper, enclosingFunction, currentTryDepth: 1) {}
+      : super(helper, enclosingFunction) {}
 
   void setupAsyncContinuations(List<Statement> statements) {
     expressionRewriter = new ExpressionLifter(this);
@@ -209,7 +212,9 @@
     final function = new FunctionNode(buildWrappedBody(),
         positionalParameters: parameters,
         requiredParameterCount: 0,
-        asyncMarker: AsyncMarker.SyncYielding);
+        asyncMarker: AsyncMarker.SyncYielding)
+      ..fileOffset = enclosingFunction.fileOffset
+      ..fileEndOffset = enclosingFunction.fileEndOffset;
 
     // The await expression lifter might have created a number of
     // [VariableDeclarations].
@@ -220,7 +225,8 @@
 
     // Now add the closure function itself.
     final closureFunction =
-        new FunctionDeclaration(nestedClosureVariable, function);
+        new FunctionDeclaration(nestedClosureVariable, function)
+          ..fileOffset = enclosingFunction.parent.fileOffset;
     statements.add(closureFunction);
 
     // :async_op_then = _asyncThenWrapperHelper(asyncBody);
@@ -241,9 +247,11 @@
   }
 
   Statement buildWrappedBody() {
+    ++currentTryDepth;
     labeledBody = new LabeledStatement(null);
     labeledBody.body = visitDelimited(enclosingFunction.body)
       ..parent = labeledBody;
+    --currentTryDepth;
 
     var exceptionVariable = new VariableDeclaration(":exception");
     var stackTraceVariable = new VariableDeclaration(":stack_trace");
@@ -535,7 +543,7 @@
       var condition = new AwaitExpression(new MethodInvocation(
           new VariableGet(iteratorVariable),
           new Name('moveNext'),
-          new Arguments(<Expression>[])));
+          new Arguments(<Expression>[])))..fileOffset = stmt.fileOffset;
 
       // var <variable> = iterator.current;
       var valueVariable = stmt.variable;
@@ -611,7 +619,9 @@
     ++currentTryDepth;
     stmt.body = visitDelimited(stmt.body)..parent = stmt;
     --currentTryDepth;
+    ++currentCatchDepth;
     stmt.finalizer = visitDelimited(stmt.finalizer)..parent = stmt;
+    --currentCatchDepth;
     statements.add(stmt);
     return null;
   }
@@ -659,8 +669,9 @@
     // :controller = new _AsyncController(:async_op);
     var arguments =
         new Arguments(<Expression>[new VariableGet(nestedClosureVariable)]);
-    var buildController = new ConstructorInvocation(
-        helper.streamControllerConstructor, arguments);
+    var buildController =
+        new ConstructorInvocation(helper.streamControllerConstructor, arguments)
+          ..fileOffset = enclosingFunction.fileOffset;
     var setController = new ExpressionStatement(
         new VariableSet(controllerVariable, buildController));
     statements.add(setController);
@@ -677,10 +688,24 @@
     return enclosingFunction;
   }
 
+  Statement buildWrappedBody() {
+    ++currentTryDepth;
+    Statement body = super.buildWrappedBody();
+    --currentTryDepth;
+
+    var finallyBody = new ExpressionStatement(new MethodInvocation(
+        new VariableGet(controllerVariable),
+        new Name("close", helper.asyncLibrary),
+        new Arguments(<Expression>[])));
+
+    var tryFinally = new TryFinally(body, new Block(<Statement>[finallyBody]));
+    return tryFinally;
+  }
+
   Statement buildCatchBody(exceptionVariable, stackTraceVariable) {
     return new ExpressionStatement(new MethodInvocation(
         new VariableGet(controllerVariable),
-        new Name("completeError", helper.asyncLibrary),
+        new Name("addError", helper.asyncLibrary),
         new Arguments(<Expression>[
           new VariableGet(exceptionVariable),
           new VariableGet(stackTraceVariable)
@@ -692,11 +717,7 @@
     // have been translated into breaks from the labeled body.
     return new Block(<Statement>[
       body,
-      new ExpressionStatement(new MethodInvocation(
-          new VariableGet(controllerVariable),
-          new Name("close", helper.asyncLibrary),
-          new Arguments(<Expression>[]))),
-      new ReturnStatement()
+      new ReturnStatement()..fileOffset = enclosingFunction.fileEndOffset,
     ]);
   }
 
@@ -706,10 +727,12 @@
     var addExpression = new MethodInvocation(
         new VariableGet(controllerVariable),
         new Name(stmt.isYieldStar ? 'addStream' : 'add', helper.asyncLibrary),
-        new Arguments(<Expression>[expr]));
+        new Arguments(<Expression>[expr]))..fileOffset = stmt.fileOffset;
 
-    statements.add(new IfStatement(addExpression,
-        new ReturnStatement(new NullLiteral()), createContinuationPoint()));
+    statements.add(new IfStatement(
+        addExpression,
+        new ReturnStatement(new NullLiteral()),
+        createContinuationPoint()..fileOffset = stmt.fileOffset));
     return null;
   }
 
@@ -735,7 +758,8 @@
     // var :completer = new Completer.sync();
     completerVariable = new VariableDeclaration(":completer",
         initializer: new StaticInvocation(helper.completerConstructor,
-            new Arguments([], types: [const DynamicType()])),
+            new Arguments([], types: [const DynamicType()]))
+          ..fileOffset = enclosingFunction.body.fileOffset,
         isFinal: true);
     statements.add(completerVariable);
 
@@ -748,7 +772,8 @@
     var newMicrotaskStatement = new ExpressionStatement(new StaticInvocation(
         helper.futureMicrotaskConstructor,
         new Arguments([new VariableGet(nestedClosureVariable)],
-            types: [const DynamicType()])));
+            types: [const DynamicType()]))
+      ..fileOffset = enclosingFunction.fileOffset);
     statements.add(newMicrotaskStatement);
 
     // return :completer.future;
@@ -760,6 +785,7 @@
     enclosingFunction.body = new Block(statements);
     enclosingFunction.body.parent = enclosingFunction;
     enclosingFunction.asyncMarker = AsyncMarker.Sync;
+    enclosingFunction.debuggable = false;
     return enclosingFunction;
   }
 
@@ -782,7 +808,7 @@
           new VariableGet(completerVariable),
           new Name("complete", helper.asyncLibrary),
           new Arguments([new VariableGet(returnVariable)]))),
-      new ReturnStatement()
+      new ReturnStatement()..fileOffset = enclosingFunction.fileEndOffset
     ]);
   }
 
diff --git a/pkg/kernel/lib/transformations/insert_covariance_checks.dart b/pkg/kernel/lib/transformations/insert_covariance_checks.dart
new file mode 100644
index 0000000..b4e1869
--- /dev/null
+++ b/pkg/kernel/lib/transformations/insert_covariance_checks.dart
@@ -0,0 +1,516 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+library kernel.transformations.insert_covariance_checks;
+
+import '../class_hierarchy.dart';
+import '../clone.dart';
+import '../core_types.dart';
+import '../kernel.dart';
+import '../log.dart';
+import '../type_algebra.dart';
+import '../type_environment.dart';
+
+// TODO: Should helper be removed?
+DartType substituteBounds(DartType type, Map<TypeParameter, DartType> upper,
+    Map<TypeParameter, DartType> lower) {
+  return Substitution
+      .fromUpperAndLowerBounds(upper, lower)
+      .substituteType(type);
+}
+
+/// Inserts checked entry points for methods in order to enforce type safety
+/// in face on covariant subtyping.
+///
+/// An 'unsafe parameter' is a parameter whose type mentions a class type
+/// parameter T, but is not contravariant in T.  For instance, the argument
+/// to `List.add` is unsafe, whereas the function parameter to `List.forEach`
+/// is safe:
+///
+///     class List<T> {
+///       ...
+///       void add(T x) {...} // unsafe
+///       void forEach(void action(T x)) {...} // safe
+///     }
+///
+/// For every method with unsafe parameters, a checked entry point suffixed
+/// with `$cc` is inserted, which casts the unsafe parameters to their expected
+/// types and calls the actual implementation:
+///
+///     class List<T> {
+///       ...
+///       void add$cc(Object x) => this.add(x as T);
+///     }
+///
+/// Calls whose interface target declares unsafe parameters are then rewritten
+/// to target the `$cc` entry point instead, unless it can be determined that
+/// the type argument is exact.  For example:
+///
+///     void foo(List<num> numbers) {
+///       numbers.add(3.5); // before
+///       numbers.add$cc(3.5); // after
+///     }
+///
+/// Currently, we only deduce that the type arguments are exact when the
+/// receiver is `this`.
+class InsertCovarianceChecks {
+  ClassHierarchy hierarchy;
+  CoreTypes coreTypes;
+  TypeEnvironment types;
+
+  /// Maps unsafe members to their checked entry point, to be used at call sites
+  /// where the arguments cannot be guaranteed to satisfy the generic parameter
+  /// types of the actual target.
+  final Map<Member, Procedure> unsafeMemberEntryPoint = <Member, Procedure>{};
+
+  /// Members that may be invoked through a checked entry point.
+  ///
+  /// Note that these members are not necessarily unsafe, because a safe member
+  /// can override an unsafe member, and thereby be invoked through a checked
+  /// entry point.  This set is not therefore not the same as the set of keys
+  /// in [unsafeMemberEntryPoint].
+  final Set<Member> membersWithCheckedEntryPoint = new Set<Member>();
+
+  InsertCovarianceChecks({this.hierarchy, this.coreTypes});
+
+  void transformProgram(Program program) {
+    hierarchy ??= new ClassHierarchy(program);
+    coreTypes ??= new CoreTypes(program);
+    types = new TypeEnvironment(coreTypes, hierarchy);
+    // We transform every class before their subtypes.
+    // This ensures that transitive overrides are taken into account.
+    hierarchy.classes.forEach(transformClass);
+
+    program.accept(new _CallTransformer(this));
+  }
+
+  void transformClass(Class class_) {
+    new _ClassTransformer(class_, this).transformClass();
+  }
+}
+
+class _ClassTransformer {
+  final Class host;
+  final ClassHierarchy hierarchy;
+  final TypeEnvironment types;
+  final InsertCovarianceChecks global;
+
+  final Map<Field, VariableDeclaration> fieldSetterParameter =
+      <Field, VariableDeclaration>{};
+
+  final Map<VariableDeclaration, List<DartType>> unsafeParameterTypes =
+      new Map<VariableDeclaration, List<DartType>>();
+
+  // The following four maps translate types from the context of a supertype
+  // into the context of the current class.
+  //
+  // When analyzing an override relation "ownMember <: superMember", the two
+  // "own" maps translate types from the context of the ownMember, while the
+  // "super" maps translate types from the context of superMember.
+  //
+  // The "substitution" maps translate type parameters to their exact type,
+  // while the "upper bound" maps translate type parameters to their erased
+  // upper bounds.
+  Map<TypeParameter, DartType> ownSubstitution;
+  Map<TypeParameter, DartType> ownUpperBounds;
+  Map<TypeParameter, DartType> superSubstitution;
+  Map<TypeParameter, DartType> superUpperBounds;
+
+  /// Members for which a checked entry point must be created in this current
+  /// class.
+  Set<Member> membersNeedingCheckedEntryPoint = new Set<Member>();
+
+  _ClassTransformer(this.host, InsertCovarianceChecks global)
+      : hierarchy = global.hierarchy,
+        types = global.types,
+        this.global = global;
+
+  /// Mark [parameter] unsafe, with [type] as a potential argument type.
+  void addUnsafeParameter(
+      VariableDeclaration parameter, DartType type, Member member) {
+    unsafeParameterTypes.putIfAbsent(parameter, () => <DartType>[]).add(type);
+    requireLocalCheckedEntryPoint(member);
+  }
+
+  /// Get a parameter representing the argument to the implicit setter
+  /// for [field].
+  VariableDeclaration getFieldSetterParameter(Field field) {
+    return fieldSetterParameter.putIfAbsent(field, () {
+      return new VariableDeclaration('${field.name.name}_', type: field.type);
+    });
+  }
+
+  /// Mark [field] as unsafe, with [type] as a potential argument to its setter.
+  void addUnsafeField(Field field, DartType type) {
+    addUnsafeParameter(getFieldSetterParameter(field), type, field);
+  }
+
+  /// True if [member] can be invoked through a checked entry point.
+  ///
+  /// This does not imply that the member has unsafe parameters.
+  bool hasCheckedEntryPoint(Member member, {bool setter: false}) {
+    if (!setter && member is Field) {
+      return false; // Field getters never have checked entry points.
+    }
+    return global.membersWithCheckedEntryPoint.contains(member);
+  }
+
+  /// Ensures that a checked entry point for [member] will be emitted in the
+  /// current class.
+  void requireLocalCheckedEntryPoint(Member member) {
+    if (membersNeedingCheckedEntryPoint.add(member)) {
+      global.membersWithCheckedEntryPoint.add(member);
+    }
+  }
+
+  void transformClass() {
+    if (host.isMixinApplication) {
+      // TODO(asgerf): We need a way to support mixin applications with unsafe
+      //   overrides. This version assumes mixins have been resolved by cloning.
+      //   We could generate a subclass of the mixin application containing the
+      //   checked entry points.
+      throw 'Mixin applications must be resolved before inserting covariance '
+          'checks';
+    }
+    // Find parameters with an unsafe reference to a class type parameter.
+    if (host.typeParameters.isNotEmpty) {
+      var upperBounds = getUpperBoundSubstitutionMap(host);
+      for (var field in host.fields) {
+        if (field.hasImplicitSetter) {
+          var rawType = substituteBounds(field.type, upperBounds, {});
+          if (!identical(rawType, field.type)) {
+            requireLocalCheckedEntryPoint(field);
+            addUnsafeField(field, rawType);
+          }
+        }
+      }
+      for (var procedure in host.procedures) {
+        if (procedure.isStatic) continue;
+        void handleParameter(VariableDeclaration parameter) {
+          var rawType = substituteBounds(parameter.type, upperBounds, {});
+          if (!identical(rawType, parameter.type)) {
+            requireLocalCheckedEntryPoint(procedure);
+            addUnsafeParameter(parameter, rawType, procedure);
+          }
+        }
+
+        procedure.function.positionalParameters.forEach(handleParameter);
+        procedure.function.namedParameters.forEach(handleParameter);
+      }
+    }
+
+    // Find (possibly inherited) members that override a method that has
+    // unsafe parameters.
+    hierarchy.forEachOverridePair(host,
+        (Member ownMember, Member superMember, bool isSetter) {
+      if (hasCheckedEntryPoint(superMember, setter: isSetter)) {
+        requireLocalCheckedEntryPoint(ownMember);
+      }
+      if (superMember.enclosingClass.typeParameters.isEmpty) return;
+      ownSubstitution = getSubstitutionMap(
+          hierarchy.getClassAsInstanceOf(host, ownMember.enclosingClass));
+      ownUpperBounds = getUpperBoundSubstitutionMap(ownMember.enclosingClass);
+      superSubstitution = getSubstitutionMap(
+          hierarchy.getClassAsInstanceOf(host, superMember.enclosingClass));
+      superUpperBounds =
+          getUpperBoundSubstitutionMap(superMember.enclosingClass);
+      if (ownMember is Procedure) {
+        if (superMember is Procedure) {
+          checkProcedureOverride(ownMember, superMember);
+        } else if (superMember is Field && isSetter) {
+          checkSetterFieldOverride(ownMember, superMember);
+        }
+      } else if (isSetter) {
+        checkFieldOverride(ownMember, superMember);
+      }
+    });
+
+    for (Member member in membersNeedingCheckedEntryPoint) {
+      ownSubstitution = getSubstitutionMap(
+          hierarchy.getClassAsInstanceOf(host, member.enclosingClass));
+      ownSubstitution = ensureMutable(ownSubstitution);
+      generateCheckedEntryPoint(member);
+    }
+  }
+
+  /// Compute an upper bound of the types in [inputTypes].
+  ///
+  /// We use this to compute a trustworthy type for a parameter, given a list
+  /// of types that may actually be passed into the parameter.
+  DartType getSafeType(List<DartType> inputTypes) {
+    var safeType = inputTypes[0];
+    for (int i = 1; i < inputTypes.length; ++i) {
+      if (inputTypes[i] != safeType) {
+        // Multiple types are being overridden. Fall back to dynamic.
+        // There are cases where a better upper bound could be found, but they
+        // are quite rare.
+        return const DynamicType();
+      }
+    }
+    return safeType;
+  }
+
+  void fail(String message) {
+    log.warning('[unsoundness] $message');
+  }
+
+  void checkFieldOverride(Field field, Member superMember) {
+    var fieldType =
+        substituteBounds(field.type, ownUpperBounds, ownSubstitution);
+    var superType = substituteBounds(
+        superMember.setterType, superUpperBounds, superSubstitution);
+    if (!types.isSubtypeOf(superType, fieldType)) {
+      addUnsafeField(field, superType);
+    }
+  }
+
+  void checkSetterFieldOverride(Procedure ownMember, Field superMember) {
+    assert(ownMember.isSetter);
+    var ownParameter = ownMember.function.positionalParameters[0];
+    var ownType =
+        substituteBounds(ownParameter.type, ownUpperBounds, ownSubstitution);
+    var superType = substituteBounds(
+        superMember.setterType, superUpperBounds, superSubstitution);
+    if (!types.isSubtypeOf(superType, ownType)) {
+      addUnsafeParameter(ownParameter, superType, ownMember);
+    }
+  }
+
+  void checkProcedureOverride(Procedure ownMember, Procedure superMember) {
+    var ownFunction = ownMember.function;
+    var superFunction = superMember.function;
+    // We perform some checks here to avoid crashing, but the frontend is
+    // responsible for generating IR that does not violate these restrictions.
+    if (ownFunction.requiredParameterCount >
+        superFunction.requiredParameterCount) {
+      fail('$ownMember requires more parameters than $superMember');
+      return;
+    }
+    if (ownFunction.positionalParameters.length <
+        superFunction.positionalParameters.length) {
+      fail('$ownMember allows fewer parameters than $superMember');
+      return;
+    }
+    if (ownFunction.typeParameters.length !=
+        superFunction.typeParameters.length) {
+      fail('$ownMember declares a different number of type parameters '
+          'than $superMember');
+      return;
+    }
+    if (superFunction.typeParameters.isNotEmpty) {
+      // Ensure these maps are not constant, so we can add bindings for the
+      // function type parameters.
+      superSubstitution = ensureMutable(superSubstitution);
+      superUpperBounds = ensureMutable(superUpperBounds);
+    }
+    for (int i = 0; i < superFunction.typeParameters.length; ++i) {
+      var ownTypeParameter = ownFunction.typeParameters[i];
+      var superTypeParameter = superFunction.typeParameters[i];
+      var type = new TypeParameterType(ownTypeParameter);
+      superSubstitution[superTypeParameter] = type;
+      superUpperBounds[superTypeParameter] = type;
+    }
+    void checkParameterPair(
+        VariableDeclaration ownParameter, VariableDeclaration superParameter) {
+      var ownType = substitute(ownParameter.type, ownSubstitution);
+      var superType = substituteBounds(
+          superParameter.type, superUpperBounds, superSubstitution);
+      if (!types.isSubtypeOf(superType, ownType)) {
+        addUnsafeParameter(ownParameter, superType, ownMember);
+      }
+    }
+
+    for (int i = 0; i < superFunction.positionalParameters.length; ++i) {
+      checkParameterPair(ownFunction.positionalParameters[i],
+          superFunction.positionalParameters[i]);
+    }
+    for (int i = 0; i < superFunction.namedParameters.length; ++i) {
+      var superParameter = superFunction.namedParameters[i];
+      bool found = false;
+      for (int j = 0; j < ownFunction.namedParameters.length; ++j) {
+        var ownParameter = ownFunction.namedParameters[j];
+        if (ownParameter.name == superParameter.name) {
+          found = true;
+          checkParameterPair(ownParameter, superParameter);
+          break;
+        }
+      }
+      if (!found) {
+        fail('$ownMember is missing the named parameter '
+            '${superParameter.name} from $superMember');
+      }
+    }
+  }
+
+  void generateCheckedEntryPoint(Member member) {
+    // TODO(asgerf): It may be worthwhile to try to reuse a checked entry
+    //   point from the supertype when the same checks are needed and the
+    //   dispatch target is the same.
+    if (member is Procedure) {
+      generateCheckedProcedure(member);
+    } else {
+      generateCheckedFieldSetter(member);
+    }
+  }
+
+  void generateCheckedProcedure(Procedure procedure) {
+    var function = procedure.function;
+
+    // Clone the function without its body.
+    var body = function.body;
+    function.body = null;
+    var cloner = new CloneVisitor(typeSubstitution: ownSubstitution);
+    Procedure checkedProcedure = cloner.clone(procedure);
+    FunctionNode checkedFunction = checkedProcedure.function;
+    function.body = body;
+
+    checkedFunction.asyncMarker = AsyncMarker.Sync;
+    checkedProcedure.isExternal = false;
+
+    Expression getParameter(VariableDeclaration parameter) {
+      var cloneParameter = cloner.variables[parameter];
+      var unsafeInputs = unsafeParameterTypes[parameter];
+      if (unsafeInputs == null) {
+        return new VariableGet(cloneParameter); // No check needed.
+      }
+      // Change the actual parameter type to the safe type, and cast to the
+      // type declared on the original parameter.
+      // Use the cloner to map function type parameters to the cloned
+      // function type parameters (in case the function is generic).
+      var targetType = cloneParameter.type;
+      cloneParameter.type = cloner.visitType(getSafeType(unsafeInputs));
+      return new AsExpression(new VariableGet(cloneParameter), targetType);
+    }
+
+    // TODO: Insert checks for type parameter bounds.
+    var types = checkedFunction.typeParameters
+        .map((p) => new TypeParameterType(p))
+        .toList();
+    var positional = function.positionalParameters.map(getParameter).toList();
+    var named = function.namedParameters
+        .map((p) => new NamedExpression(p.name, getParameter(p)))
+        .toList();
+
+    checkedProcedure.name = covariantCheckedName(procedure.name);
+    host.addMember(checkedProcedure);
+
+    // Only generate a body if the original method had one.
+    if (!procedure.isAbstract && !procedure.isInExternalLibrary) {
+      var call = procedure.isSetter
+          ? new DirectPropertySet(
+              new ThisExpression(), procedure, positional[0])
+          : new DirectMethodInvocation(new ThisExpression(), procedure,
+              new Arguments(positional, named: named, types: types));
+      var checkedBody = function.returnType is VoidType
+          ? new ExpressionStatement(call)
+          : new ReturnStatement(call);
+      checkedFunction.body = checkedBody..parent = checkedFunction;
+    }
+
+    if (procedure.enclosingClass == host) {
+      global.unsafeMemberEntryPoint[procedure] = checkedProcedure;
+    }
+  }
+
+  void generateCheckedFieldSetter(Field field) {
+    var parameter = getFieldSetterParameter(field);
+    var unsafeTypes = unsafeParameterTypes[parameter];
+    Expression argument = new VariableGet(parameter);
+    if (unsafeTypes != null) {
+      var castType = substitute(field.type, ownSubstitution);
+      argument = new AsExpression(argument, castType);
+      var inputType = substitute(getSafeType(unsafeTypes), ownSubstitution);
+      parameter.type = inputType;
+    }
+
+    Statement body = field.isInExternalLibrary
+        ? null
+        : new ExpressionStatement(
+            new DirectPropertySet(new ThisExpression(), field, argument));
+
+    var setter = new Procedure(
+        covariantCheckedName(field.name),
+        ProcedureKind.Setter,
+        new FunctionNode(body, positionalParameters: [parameter]));
+    host.addMember(setter);
+
+    if (field.enclosingClass == host) {
+      global.unsafeMemberEntryPoint[field] = setter;
+    }
+  }
+
+  /// Generates a synthetic name representing the covariant-checked entry point
+  /// to a method.
+  static Name covariantCheckedName(Name name) {
+    return new Name('${name.name}\$cc', name.library);
+  }
+
+  static Map<TypeParameter, DartType> ensureMutable(
+      Map<TypeParameter, DartType> map) {
+    if (map.isEmpty) return <TypeParameter, DartType>{};
+    return map;
+  }
+}
+
+// TODO(asgerf): We should be able to avoid checked calls in a lot more cases:
+//  - the arguments to every unsafe parameter is null or is omitted
+//  - allocation site of receiver can easily be seen statically
+class _CallTransformer extends RecursiveVisitor {
+  final InsertCovarianceChecks global;
+  final TypeEnvironment types;
+  final Map<Member, Procedure> checkedInterfaceMethod;
+
+  _CallTransformer(InsertCovarianceChecks global)
+      : checkedInterfaceMethod = global.unsafeMemberEntryPoint,
+        types = global.types,
+        this.global = global;
+
+  Member getChecked(Expression receiver, Member member) {
+    var checked = checkedInterfaceMethod[member];
+    if (checked == null) return member;
+    if (!receiverNeedsChecks(receiver)) return member;
+    return checked;
+  }
+
+  bool receiverNeedsChecks(Expression node) {
+    if (node is ThisExpression) return false;
+    var type = node.getStaticType(types);
+    if (type is InterfaceType && type.typeArguments.every(isSealedType)) {
+      return false;
+    }
+    return true;
+  }
+
+  bool isSealedType(DartType type) {
+    return type is InterfaceType && types.isSealedClass(type.classNode);
+  }
+
+  bool isTrustedLibrary(Library node) {
+    return node.importUri.scheme == 'dart';
+  }
+
+  @override
+  visitClass(Class node) {
+    types.thisType = node.thisType;
+    node.visitChildren(this);
+  }
+
+  @override
+  visitLibrary(Library node) {
+    if (!isTrustedLibrary(node)) {
+      node.visitChildren(this);
+    }
+  }
+
+  @override
+  visitMethodInvocation(MethodInvocation node) {
+    node.interfaceTarget = getChecked(node.receiver, node.interfaceTarget);
+    node.visitChildren(this);
+  }
+
+  @override
+  visitPropertySet(PropertySet node) {
+    node.interfaceTarget = getChecked(node.receiver, node.interfaceTarget);
+    node.visitChildren(this);
+  }
+}
diff --git a/pkg/kernel/lib/transformations/insert_type_checks.dart b/pkg/kernel/lib/transformations/insert_type_checks.dart
new file mode 100644
index 0000000..01db445
--- /dev/null
+++ b/pkg/kernel/lib/transformations/insert_type_checks.dart
@@ -0,0 +1,58 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+library kernel.transformations.insert_type_checks;
+
+import '../ast.dart';
+import '../class_hierarchy.dart';
+import '../core_types.dart';
+import '../log.dart';
+import '../type_checker.dart';
+
+/// Inserts implicit downcasts in method bodies to ensure type safety.
+///
+/// This does not deal with covariant override and covariant use of type
+/// parameters.
+///
+/// Ideally this should be done when initially generating kernel IR, but this
+/// is not practical at the moment.
+class InsertTypeChecks {
+  CoreTypes coreTypes;
+  ClassHierarchy hierarchy;
+
+  InsertTypeChecks({this.coreTypes, this.hierarchy});
+
+  void transformProgram(Program program) {
+    coreTypes ??= new CoreTypes(program);
+    hierarchy ??= new ClassHierarchy(program);
+    new CheckInsertingTypeChecker(coreTypes, hierarchy).checkProgram(program);
+  }
+}
+
+class CheckInsertingTypeChecker extends TypeChecker {
+  CheckInsertingTypeChecker(CoreTypes coreTypes, ClassHierarchy hierarchy)
+      : super(coreTypes, hierarchy);
+
+  @override
+  void fail(TreeNode where, String message) {
+    log.severe('${where.location}: $message');
+  }
+
+  @override
+  void checkAssignable(TreeNode where, DartType from, DartType to) {
+    if (!environment.isSubtypeOf(from, to)) {
+      fail(where, '$from cannot be assigned to $to');
+    }
+  }
+
+  @override
+  Expression checkAndDowncastExpression(
+      Expression expression, DartType from, DartType to) {
+    if (!environment.isSubtypeOf(from, to)) {
+      return new AsExpression(expression, to)
+        ..fileOffset = expression.fileOffset;
+    } else {
+      return expression;
+    }
+  }
+}
diff --git a/pkg/kernel/lib/type_algebra.dart b/pkg/kernel/lib/type_algebra.dart
index 19508b1..ce4a553 100644
--- a/pkg/kernel/lib/type_algebra.dart
+++ b/pkg/kernel/lib/type_algebra.dart
@@ -30,6 +30,18 @@
           type.classNode.typeParameters, type.typeArguments);
 }
 
+Map<TypeParameter, DartType> getUpperBoundSubstitutionMap(Class host) {
+  if (host.typeParameters.isEmpty) return const <TypeParameter, DartType>{};
+  var result = <TypeParameter, DartType>{};
+  for (var parameter in host.typeParameters) {
+    result[parameter] = const DynamicType();
+  }
+  for (var parameter in host.typeParameters) {
+    result[parameter] = substitute(parameter.bound, result);
+  }
+  return result;
+}
+
 /// Like [substitute], except when a type in the [substitution] map references
 /// another substituted type variable, the mapping for that type is recursively
 /// inserted.
@@ -180,6 +192,21 @@
     return new _ClassBottomSubstitution(class_);
   }
 
+  /// Substitutes covariant uses of [class_]'s type parameters with the upper
+  /// bound of that type parameter.  Recursive references in the bound have
+  /// been replaced by dynamic.
+  static Substitution upperBoundForClass(Class class_) {
+    if (class_.typeParameters.isEmpty) return _NullSubstitution.instance;
+    var upper = <TypeParameter, DartType>{};
+    for (var parameter in class_.typeParameters) {
+      upper[parameter] = const DynamicType();
+    }
+    for (var parameter in class_.typeParameters) {
+      upper[parameter] = substitute(parameter.bound, upper);
+    }
+    return fromUpperAndLowerBounds(upper, {});
+  }
+
   /// Substitutes both variables from [first] and [second], favoring those from
   /// [first] if they overlap.
   ///
diff --git a/pkg/kernel/lib/type_checker.dart b/pkg/kernel/lib/type_checker.dart
index ab0351e..45159b2 100644
--- a/pkg/kernel/lib/type_checker.dart
+++ b/pkg/kernel/lib/type_checker.dart
@@ -85,6 +85,16 @@
   /// [where] is an AST node indicating roughly where the check is required.
   void checkAssignable(TreeNode where, DartType from, DartType to);
 
+  /// Checks that [expression], which has type [from], can be assigned to [to].
+  ///
+  /// Should return a downcast if necessary, or [expression] if no cast is
+  /// needed.
+  Expression checkAndDowncastExpression(
+      Expression expression, DartType from, DartType to) {
+    checkAssignable(expression, from, to);
+    return expression;
+  }
+
   /// Indicates that type checking failed.
   void fail(TreeNode where, String message);
 }
@@ -108,8 +118,16 @@
     checker.checkAssignable(where, from, to);
   }
 
-  void checkAssignableExpression(Expression from, DartType to) {
-    checker.checkAssignable(from, visitExpression(from), to);
+  Expression checkAndDowncastExpression(Expression from, DartType to) {
+    var parent = from.parent;
+    var type = visitExpression(from);
+    var result = checker.checkAndDowncastExpression(from, type, to);
+    result.parent = parent;
+    return result;
+  }
+
+  void checkExpressionNoDowncast(Expression expression, DartType to) {
+    checkAssignable(expression, visitExpression(expression), to);
   }
 
   void fail(TreeNode node, String message) {
@@ -146,7 +164,8 @@
 
   visitField(Field node) {
     if (node.initializer != null) {
-      checkAssignableExpression(node.initializer, node.type);
+      node.initializer =
+          checkAndDowncastExpression(node.initializer, node.type);
     }
   }
 
@@ -188,7 +207,8 @@
 
   void handleOptionalParameter(VariableDeclaration parameter) {
     if (parameter.initializer != null) {
-      checkAssignableExpression(parameter.initializer, parameter.type);
+      // Default parameter values cannot be downcast.
+      checkExpressionNoDowncast(parameter.initializer, parameter.type);
     }
   }
 
@@ -255,7 +275,8 @@
       var expectedType = substitution.substituteType(
           function.positionalParameters[i].type,
           contravariant: true);
-      checkAssignableExpression(arguments.positional[i], expectedType);
+      arguments.positional[i] =
+          checkAndDowncastExpression(arguments.positional[i], expectedType);
     }
     for (int i = 0; i < arguments.named.length; ++i) {
       var argument = arguments.named[i];
@@ -265,7 +286,8 @@
           var expectedType = substitution.substituteType(
               function.namedParameters[j].type,
               contravariant: true);
-          checkAssignableExpression(argument.value, expectedType);
+          argument.value =
+              checkAndDowncastExpression(argument.value, expectedType);
           found = true;
           break;
         }
@@ -344,9 +366,11 @@
 
   @override
   DartType visitConditionalExpression(ConditionalExpression node) {
-    checkAssignableExpression(node.condition, environment.boolType);
-    checkAssignableExpression(node.then, node.staticType);
-    checkAssignableExpression(node.otherwise, node.staticType);
+    node.condition =
+        checkAndDowncastExpression(node.condition, environment.boolType);
+    node.then = checkAndDowncastExpression(node.then, node.staticType);
+    node.otherwise =
+        checkAndDowncastExpression(node.otherwise, node.staticType);
     return node.staticType;
   }
 
@@ -419,24 +443,25 @@
 
   @override
   DartType visitListLiteral(ListLiteral node) {
-    for (var item in node.expressions) {
-      checkAssignableExpression(item, node.typeArgument);
+    for (int i = 0; i < node.expressions.length; ++i) {
+      node.expressions[i] =
+          checkAndDowncastExpression(node.expressions[i], node.typeArgument);
     }
     return environment.literalListType(node.typeArgument);
   }
 
   @override
   DartType visitLogicalExpression(LogicalExpression node) {
-    checkAssignableExpression(node.left, environment.boolType);
-    checkAssignableExpression(node.right, environment.boolType);
+    node.left = checkAndDowncastExpression(node.left, environment.boolType);
+    node.right = checkAndDowncastExpression(node.right, environment.boolType);
     return environment.boolType;
   }
 
   @override
   DartType visitMapLiteral(MapLiteral node) {
     for (var entry in node.entries) {
-      checkAssignableExpression(entry.key, node.keyType);
-      checkAssignableExpression(entry.value, node.valueType);
+      entry.key = checkAndDowncastExpression(entry.key, node.keyType);
+      entry.value = checkAndDowncastExpression(entry.value, node.valueType);
     }
     return environment.literalMapType(node.keyType, node.valueType);
   }
@@ -467,7 +492,8 @@
       var expectedType = instantiation.substituteType(
           function.positionalParameters[i],
           contravariant: true);
-      checkAssignableExpression(arguments.positional[i], expectedType);
+      arguments.positional[i] =
+          checkAndDowncastExpression(arguments.positional[i], expectedType);
     }
     for (int i = 0; i < arguments.named.length; ++i) {
       var argument = arguments.named[i];
@@ -477,7 +503,8 @@
           var expectedType = instantiation.substituteType(
               function.namedParameters[j].type,
               contravariant: true);
-          checkAssignableExpression(argument.value, expectedType);
+          argument.value =
+              checkAndDowncastExpression(argument.value, expectedType);
           found = true;
           break;
         }
@@ -674,7 +701,8 @@
   @override
   visitDoStatement(DoStatement node) {
     visitStatement(node.body);
-    checkAssignableExpression(node.condition, environment.boolType);
+    node.condition =
+        checkAndDowncastExpression(node.condition, environment.boolType);
   }
 
   @override
@@ -700,23 +728,27 @@
   }
 
   static final Name iteratorName = new Name('iterator');
-  static final Name nextName = new Name('next');
+  static final Name currentName = new Name('current');
 
   DartType getIterableElementType(DartType iterable) {
     if (iterable is InterfaceType) {
       var iteratorGetter =
           hierarchy.getInterfaceMember(iterable.classNode, iteratorName);
       if (iteratorGetter == null) return const DynamicType();
+      var castedIterable = hierarchy.getTypeAsInstanceOf(
+          iterable, iteratorGetter.enclosingClass);
       var iteratorType = Substitution
-          .fromInterfaceType(iterable)
+          .fromInterfaceType(castedIterable)
           .substituteType(iteratorGetter.getterType);
       if (iteratorType is InterfaceType) {
-        var nextGetter =
-            hierarchy.getInterfaceMember(iteratorType.classNode, nextName);
-        if (nextGetter == null) return const DynamicType();
+        var currentGetter =
+            hierarchy.getInterfaceMember(iteratorType.classNode, currentName);
+        if (currentGetter == null) return const DynamicType();
+        var castedIteratorType = hierarchy.getTypeAsInstanceOf(
+            iteratorType, currentGetter.enclosingClass);
         return Substitution
-            .fromInterfaceType(iteratorType)
-            .substituteType(nextGetter.getterType);
+            .fromInterfaceType(castedIteratorType)
+            .substituteType(currentGetter.getterType);
       }
     }
     return const DynamicType();
@@ -736,7 +768,8 @@
   visitForStatement(ForStatement node) {
     node.variables.forEach(visitVariableDeclaration);
     if (node.condition != null) {
-      checkAssignableExpression(node.condition, environment.boolType);
+      node.condition =
+          checkAndDowncastExpression(node.condition, environment.boolType);
     }
     node.updates.forEach(visitExpression);
     visitStatement(node.body);
@@ -749,7 +782,8 @@
 
   @override
   visitIfStatement(IfStatement node) {
-    checkAssignableExpression(node.condition, environment.boolType);
+    node.condition =
+        checkAndDowncastExpression(node.condition, environment.boolType);
     visitStatement(node.then);
     if (node.otherwise != null) {
       visitStatement(node.otherwise);
@@ -805,13 +839,15 @@
   @override
   visitVariableDeclaration(VariableDeclaration node) {
     if (node.initializer != null) {
-      checkAssignableExpression(node.initializer, node.type);
+      node.initializer =
+          checkAndDowncastExpression(node.initializer, node.type);
     }
   }
 
   @override
   visitWhileStatement(WhileStatement node) {
-    checkAssignableExpression(node.condition, environment.boolType);
+    node.condition =
+        checkAndDowncastExpression(node.condition, environment.boolType);
     visitStatement(node.body);
   }
 
@@ -832,13 +868,14 @@
         fail(node.expression, '$type is not an instance of $container');
       }
     } else {
-      checkAssignableExpression(node.expression, environment.yieldType);
+      node.expression =
+          checkAndDowncastExpression(node.expression, environment.yieldType);
     }
   }
 
   @override
   visitFieldInitializer(FieldInitializer node) {
-    checkAssignableExpression(node.value, node.field.type);
+    node.value = checkAndDowncastExpression(node.value, node.field.type);
   }
 
   @override
@@ -850,7 +887,8 @@
   @override
   visitSuperInitializer(SuperInitializer node) {
     handleCall(node.arguments, node.target.function,
-        typeParameters: const <TypeParameter>[]);
+        typeParameters: const <TypeParameter>[],
+        receiver: getSuperReceiverType(node.target));
   }
 
   @override
diff --git a/pkg/kernel/lib/type_environment.dart b/pkg/kernel/lib/type_environment.dart
index c354c44..0b90cb4 100644
--- a/pkg/kernel/lib/type_environment.dart
+++ b/pkg/kernel/lib/type_environment.dart
@@ -95,7 +95,11 @@
     Class class_ = member.enclosingClass;
     if (class_ == coreTypes.intClass || class_ == coreTypes.numClass) {
       String name = member.name.name;
-      return name == '+' || name == '-' || name == '*' || name == 'remainder';
+      return name == '+' ||
+          name == '-' ||
+          name == '*' ||
+          name == 'remainder' ||
+          name == '%';
     }
     return false;
   }
@@ -114,6 +118,21 @@
     if (type1 == doubleType || type2 == doubleType) return doubleType;
     return numType;
   }
+
+  /// Returns true if [class_] has no proper subtypes that are usable as type
+  /// argument.
+  bool isSealedClass(Class class_) {
+    // The sealed core classes have subtypes in the patched SDK, but those
+    // classes cannot occur as type argument.
+    if (class_ == coreTypes.intClass ||
+        class_ == coreTypes.doubleClass ||
+        class_ == coreTypes.stringClass ||
+        class_ == coreTypes.boolClass ||
+        class_ == coreTypes.nullClass) {
+      return true;
+    }
+    return !hierarchy.hasProperSubtypes(class_);
+  }
 }
 
 /// The part of [TypeEnvironment] that deals with subtype tests.
@@ -128,7 +147,9 @@
   bool isSubtypeOf(DartType subtype, DartType supertype) {
     if (identical(subtype, supertype)) return true;
     if (subtype is BottomType) return true;
-    if (supertype is DynamicType || supertype == objectType) {
+    if (supertype is DynamicType ||
+        supertype is VoidType ||
+        supertype == objectType) {
       return true;
     }
     if (subtype is InterfaceType && supertype is InterfaceType) {
@@ -194,8 +215,7 @@
       }
       subtype = substitute(subtype.withoutTypeParameters, substitution);
     }
-    if (supertype.returnType is! VoidType &&
-        !isSubtypeOf(subtype.returnType, supertype.returnType)) {
+    if (!isSubtypeOf(subtype.returnType, supertype.returnType)) {
       return false;
     }
     for (int i = 0; i < supertype.positionalParameters.length; ++i) {
diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart
index bed5417..1a1b5ad 100644
--- a/pkg/kernel/lib/verifier.dart
+++ b/pkg/kernel/lib/verifier.dart
@@ -238,6 +238,7 @@
 
   visitVariableGet(VariableGet node) {
     checkVariableInScope(node.variable, node);
+    visitChildren(node);
   }
 
   visitVariableSet(VariableSet node) {
diff --git a/pkg/kernel/test/baseline_strong_mode_test.dart b/pkg/kernel/test/baseline_strong_mode_test.dart
index 51d2a7c..a252bff 100644
--- a/pkg/kernel/test/baseline_strong_mode_test.dart
+++ b/pkg/kernel/test/baseline_strong_mode_test.dart
@@ -4,6 +4,8 @@
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
 import 'package:kernel/kernel.dart';
+import 'package:kernel/transformations/insert_covariance_checks.dart';
+import 'package:kernel/transformations/insert_type_checks.dart';
 import 'package:kernel/transformations/mixin_full_resolution.dart';
 import 'package:kernel/type_checker.dart';
 import 'package:path/path.dart' as pathlib;
@@ -24,6 +26,8 @@
   List<String> transformProgram(Program program) {
     List<String> errors = <String>[];
     new MixinFullResolution().transform(program);
+    new InsertTypeChecks().transformProgram(program);
+    new InsertCovarianceChecks().transformProgram(program);
     new TestTypeChecker(
             errors, new CoreTypes(program), new ClassHierarchy(program))
         .checkProgram(program);
diff --git a/pkg/kernel/testcases/closures/capture_closure.dart.expect b/pkg/kernel/testcases/closures/capture_closure.dart.expect
index dae8d72..115cb6b 100644
--- a/pkg/kernel/testcases/closures/capture_closure.dart.expect
+++ b/pkg/kernel/testcases/closures/capture_closure.dart.expect
@@ -31,6 +31,6 @@
   final mock::Context #context = new mock::Context::•(1);
   #context.parent = null;
   #context.[]=(0, new self::Closure#main#f::•(#context));
-  final dynamic g = new self::Closure#main#g::•(#context);
+  final() → dynamic g = new self::Closure#main#g::•(#context);
   g.call();
 }
diff --git a/pkg/kernel/testcases/closures/capture_closure_parameter.dart.expect b/pkg/kernel/testcases/closures/capture_closure_parameter.dart.expect
index 2800725..204b5c1 100644
--- a/pkg/kernel/testcases/closures/capture_closure_parameter.dart.expect
+++ b/pkg/kernel/testcases/closures/capture_closure_parameter.dart.expect
@@ -27,11 +27,11 @@
     final mock::Context #context = new mock::Context::•(1);
     #context.parent = #contextParameter;
     #context.[]=(0, null);
-    final dynamic bar = new self::Closure#main#foo#bar::•(#context);
+    final() → dynamic bar = new self::Closure#main#foo#bar::•(#context);
     return bar;
   }
 }
 static method main(core::List<core::String> arguments) → dynamic {
-  final dynamic foo = new self::Closure#main#foo::•(null);
+  final(dynamic) → dynamic foo = new self::Closure#main#foo::•(null);
   foo.call(arguments.[](0)).call();
 }
diff --git a/pkg/kernel/testcases/closures/named_closure.dart.expect b/pkg/kernel/testcases/closures/named_closure.dart.expect
index ae1d5a6..c1b236d 100644
--- a/pkg/kernel/testcases/closures/named_closure.dart.expect
+++ b/pkg/kernel/testcases/closures/named_closure.dart.expect
@@ -23,7 +23,7 @@
   final mock::Context #context = new mock::Context::•(1);
   #context.parent = null;
   #context.[]=(0, arguments);
-  final dynamic g = new self::Closure#main#g::•(#context);
+  final(dynamic) → dynamic g = new self::Closure#main#g::•(#context);
   self::f = g;
   self::foo();
 }
diff --git a/pkg/kernel/testcases/closures/type_variables.dart.expect b/pkg/kernel/testcases/closures/type_variables.dart.expect
index bf7dd96..189739d 100644
--- a/pkg/kernel/testcases/closures/type_variables.dart.expect
+++ b/pkg/kernel/testcases/closures/type_variables.dart.expect
@@ -20,7 +20,7 @@
     return new self::Closure#C#baz#function::•<self::C::T, self::C::S>(null);
   }
   static factory •<T extends core::Object, S extends core::Object>() → self::C<self::C::•::T, self::C::•::S> {
-    final dynamic local = new self::Closure#C#function#local::•<self::C::•::T, self::C::•::S>(null);
+    final() → dynamic local = new self::Closure#C#function#local::•<self::C::•::T, self::C::•::S>(null);
     return local.call();
   }
 }
diff --git a/pkg/kernel/testcases/input/covariant_generic.dart b/pkg/kernel/testcases/input/covariant_generic.dart
new file mode 100644
index 0000000..a0234a6
--- /dev/null
+++ b/pkg/kernel/testcases/input/covariant_generic.dart
@@ -0,0 +1,45 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+typedef void Callback<T>(T x);
+
+class Foo<T> {
+  final T finalField;
+  final Callback<T> callbackField;
+
+  T mutableField;
+  Callback<T> mutableCallbackField;
+
+  Foo(this.finalField, this.callbackField);
+
+  void method(T x) {}
+
+  set setter(T x) {}
+
+  void withCallback(Callback<T> callback) {
+    callback(finalField);
+  }
+}
+
+main() {
+  Foo<int> fooInt = new Foo<int>(1, (int x) {});
+
+  fooInt.method(3);
+  fooInt.setter = 3;
+  fooInt.withCallback((int x) {});
+  fooInt.withCallback((num x) {});
+  fooInt.mutableField = 3;
+  fooInt.mutableCallbackField = (int x) {};
+
+  Foo<num> fooNum = fooInt;
+  fooNum.method(3);
+  fooNum.method(2.5);
+  fooNum.setter = 3;
+  fooNum.setter = 2.5;
+  fooNum.withCallback((num x) {});
+  fooNum.mutableField = 3;
+  fooNum.mutableField = 2.5;
+  fooNum.mutableCallbackField(3);
+  fooNum.mutableCallbackField(2.5);
+  fooNum.mutableCallbackField = (num x) {};
+}
diff --git a/pkg/kernel/testcases/spec-mode/covariant_generic.baseline.txt b/pkg/kernel/testcases/spec-mode/covariant_generic.baseline.txt
new file mode 100644
index 0000000..063394e
--- /dev/null
+++ b/pkg/kernel/testcases/spec-mode/covariant_generic.baseline.txt
@@ -0,0 +1,38 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo<T extends core::Object> extends core::Object {
+  final field self::Foo::T finalField;
+  final field (self::Foo::T) → void callbackField;
+  field self::Foo::T mutableField = null;
+  field (self::Foo::T) → void mutableCallbackField = null;
+  constructor •(self::Foo::T finalField, (self::Foo::T) → void callbackField) → void
+    : self::Foo::finalField = finalField, self::Foo::callbackField = callbackField, super core::Object::•()
+    ;
+  method method(self::Foo::T x) → void {}
+  set setter(self::Foo::T x) → dynamic {}
+  method withCallback((self::Foo::T) → void callback) → void {
+    callback.call(this.finalField);
+  }
+}
+static method main() → dynamic {
+  self::Foo<core::int> fooInt = new self::Foo::•<core::int>(1, (core::int x) → dynamic {});
+  fooInt.method(3);
+  fooInt.setter = 3;
+  fooInt.withCallback((core::int x) → dynamic {});
+  fooInt.withCallback((core::num x) → dynamic {});
+  fooInt.mutableField = 3;
+  fooInt.mutableCallbackField = (core::int x) → dynamic {};
+  self::Foo<core::num> fooNum = fooInt;
+  fooNum.method(3);
+  fooNum.method(2.5);
+  fooNum.setter = 3;
+  fooNum.setter = 2.5;
+  fooNum.withCallback((core::num x) → dynamic {});
+  fooNum.mutableField = 3;
+  fooNum.mutableField = 2.5;
+  fooNum.mutableCallbackField(3);
+  fooNum.mutableCallbackField(2.5);
+  fooNum.mutableCallbackField = (core::num x) → dynamic {};
+}
diff --git a/pkg/kernel/testcases/strong-mode/DeltaBlue.baseline.txt b/pkg/kernel/testcases/strong-mode/DeltaBlue.baseline.txt
index f2735c6..7f44a83 100644
--- a/pkg/kernel/testcases/strong-mode/DeltaBlue.baseline.txt
+++ b/pkg/kernel/testcases/strong-mode/DeltaBlue.baseline.txt
@@ -1,7 +1,4 @@
-// dynamic is not a subtype of dart.core::int (DeltaBlue.dart:126:17)
-// dynamic is not a subtype of dart.core::int (DeltaBlue.dart:133:15)
-// dynamic is not a subtype of dart.core::int (DeltaBlue.dart:138:36)
-// dynamic is not a subtype of dart.core::int (DeltaBlue.dart:139:15)
+// dynamic is not a subtype of dart.core::int (DeltaBlue.dart:139:16)
 library;
 import self as self;
 import "dart:core" as core;
@@ -56,20 +53,20 @@
     self::planner.{self::Planner::incrementalAdd}(this);
   }
   method satisfy(dynamic mark) → self::Constraint {
-    this.{self::Constraint::chooseMethod}(mark);
+    this.{self::Constraint::chooseMethod}(mark as core::int);
     if(!this.{self::Constraint::isSatisfied}()) {
       if(this.{self::Constraint::strength}.{core::Object::==}(self::REQUIRED)) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark);
+    this.{self::Constraint::markInputs}(mark as core::int);
     self::Variable out = this.{self::Constraint::output}();
     self::Constraint overridden = out.{self::Variable::determinedBy};
     if(!overridden.{core::Object::==}(null))
       overridden.{self::Constraint::markUnsatisfied}();
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark))
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as core::int))
       core::print("Cycle encountered");
     out.{self::Variable::mark} = mark;
     return overridden;
@@ -250,7 +247,7 @@
     : self::Variable::name = name, self::Variable::value = value, super core::Object::•()
     ;
   method addConstraint(self::Constraint c) → void {
-    this.{self::Variable::constraints}.{core::List::add}(c);
+    this.{self::Variable::constraints}.{core::List::add$cc}(c);
   }
   method removeConstraint(self::Constraint c) → void {
     this.{self::Variable::constraints}.{core::List::remove}(c);
@@ -305,7 +302,7 @@
     for (core::int i = 0; i.{core::num::<}(constraints.{core::List::length}); i = i.{core::num::+}(1)) {
       self::Constraint c = constraints.{core::List::[]}(i);
       if(c.{self::Constraint::isInput}() && c.{self::Constraint::isSatisfied}())
-        sources.{core::List::add}(c);
+        sources.{core::List::add$cc}(c);
     }
     return this.{self::Planner::makePlan}(sources);
   }
@@ -333,7 +330,7 @@
       for (core::int i = 0; i.{core::num::<}(v.{self::Variable::constraints}.{core::List::length}); i = i.{core::num::+}(1)) {
         self::Constraint c = v.{self::Variable::constraints}.{core::List::[]}(i);
         if(!c.{self::Constraint::isSatisfied}())
-          unsatisfied.{core::List::add}(c);
+          unsatisfied.{core::List::add$cc}(c);
       }
       self::Constraint determining = v.{self::Variable::determinedBy};
       for (core::int i = 0; i.{core::num::<}(v.{self::Variable::constraints}.{core::List::length}); i = i.{core::num::+}(1)) {
@@ -351,7 +348,7 @@
     for (core::int i = 0; i.{core::num::<}(v.{self::Variable::constraints}.{core::List::length}); i = i.{core::num::+}(1)) {
       self::Constraint c = v.{self::Variable::constraints}.{core::List::[]}(i);
       if(!c.{core::Object::==}(determining) && c.{self::Constraint::isSatisfied}())
-        coll.{core::List::add}(c);
+        coll.{core::List::add$cc}(c);
     }
   }
 }
@@ -361,7 +358,7 @@
     : super core::Object::•()
     ;
   method addConstraint(self::Constraint c) → void {
-    this.{self::Plan::list}.{core::List::add}(c);
+    this.{self::Plan::list}.{core::List::add$cc}(c);
   }
   method size() → core::int
     return this.{self::Plan::list}.{core::List::length};
diff --git a/pkg/kernel/testcases/strong-mode/call.baseline.txt b/pkg/kernel/testcases/strong-mode/call.baseline.txt
index 387757e..65b0561 100644
--- a/pkg/kernel/testcases/strong-mode/call.baseline.txt
+++ b/pkg/kernel/testcases/strong-mode/call.baseline.txt
@@ -1,8 +1,8 @@
-// Too few positional arguments (call.dart:30:17)
-// Too few positional arguments (call.dart:31:25)
-// Too few positional arguments (call.dart:35:17)
-// Too few positional arguments (call.dart:36:26)
-// Too few positional arguments (call.dart:37:31)
+// Too few positional arguments (call.dart:30:18)
+// Too few positional arguments (call.dart:31:26)
+// Too few positional arguments (call.dart:35:18)
+// Too few positional arguments (call.dart:36:27)
+// Too few positional arguments (call.dart:37:32)
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/kernel/testcases/strong-mode/covariant_generic.baseline.txt b/pkg/kernel/testcases/strong-mode/covariant_generic.baseline.txt
new file mode 100644
index 0000000..9b0d0d7
--- /dev/null
+++ b/pkg/kernel/testcases/strong-mode/covariant_generic.baseline.txt
@@ -0,0 +1,44 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo<T extends core::Object> extends core::Object {
+  final field self::Foo::T finalField;
+  final field (self::Foo::T) → void callbackField;
+  field self::Foo::T mutableField = null;
+  field (self::Foo::T) → void mutableCallbackField = null;
+  constructor •(self::Foo::T finalField, (self::Foo::T) → void callbackField) → void
+    : self::Foo::finalField = finalField, self::Foo::callbackField = callbackField, super core::Object::•()
+    ;
+  method method(self::Foo::T x) → void {}
+  set setter(self::Foo::T x) → void {}
+  method withCallback((self::Foo::T) → void callback) → void {
+    callback.call(this.{self::Foo::finalField});
+  }
+  set /* from null */ mutableField$cc(core::Object mutableField_) → dynamic
+    this.{=self::Foo::mutableField} = mutableField_ as self::Foo::T;
+  method method$cc(core::Object x) → void
+    this.{=self::Foo::method}(x as self::Foo::T);
+  set setter$cc(core::Object x) → void
+    this.{=self::Foo::setter} = x as self::Foo::T;
+}
+static method main() → dynamic {
+  self::Foo<core::int> fooInt = new self::Foo::•<core::int>(1, (core::int x) → void {});
+  fooInt.{self::Foo::method}(3);
+  fooInt.{self::Foo::setter} = 3;
+  fooInt.{self::Foo::withCallback}((core::int x) → void {});
+  fooInt.{self::Foo::withCallback}((core::num x) → void {});
+  fooInt.{self::Foo::mutableField} = 3;
+  fooInt.{self::Foo::mutableCallbackField} = (core::int x) → void {};
+  self::Foo<core::num> fooNum = fooInt;
+  fooNum.{self::Foo::method$cc}(3);
+  fooNum.{self::Foo::method$cc}(2.5);
+  fooNum.{self::Foo::setter$cc} = 3;
+  fooNum.{self::Foo::setter$cc} = 2.5;
+  fooNum.{self::Foo::withCallback}((core::num x) → void {});
+  fooNum.{self::Foo::mutableField$cc} = 3;
+  fooNum.{self::Foo::mutableField$cc} = 2.5;
+  fooNum.{self::Foo::mutableCallbackField}.call(3);
+  fooNum.{self::Foo::mutableCallbackField}.call(2.5);
+  fooNum.{self::Foo::mutableCallbackField} = (core::num x) → void {};
+}
diff --git a/pkg/kernel/testcases/strong-mode/optional.baseline.txt b/pkg/kernel/testcases/strong-mode/optional.baseline.txt
index 1087a03..0ba01b9 100644
--- a/pkg/kernel/testcases/strong-mode/optional.baseline.txt
+++ b/pkg/kernel/testcases/strong-mode/optional.baseline.txt
@@ -1,8 +1,7 @@
-// #lib1::InvalidListener is not a subtype of #lib1::Listener (optional.dart:42:20)
-// Too few positional arguments (optional.dart:44:21)
-// Too many positional arguments (optional.dart:45:21)
-// Too few positional arguments (optional.dart:46:24)
-// Too many positional arguments (optional.dart:47:24)
+// Too few positional arguments (optional.dart:44:22)
+// Too many positional arguments (optional.dart:45:22)
+// Too few positional arguments (optional.dart:46:25)
+// Too many positional arguments (optional.dart:47:25)
 library;
 import self as self;
 import "dart:core" as core;
@@ -58,7 +57,7 @@
   core::String string6 = extern.{self::External::externalMethod}(1, 2, 3);
   extern.{self::External::listen}(new self::TestListener::•());
   extern.{self::External::listen}(new self::ExtendedListener::•());
-  extern.{self::External::listen}(new self::InvalidListener::•());
+  extern.{self::External::listen}(new self::InvalidListener::•() as self::Listener);
   dynamic nothing1 = foo.{self::Foo::method}();
   dynamic nothing2 = foo.{self::Foo::method}(1, 2, 3, 4);
   core::String nothing3 = extern.{self::External::externalMethod}();
diff --git a/pkg/kernel/testcases/strong-mode/void-methods.baseline.txt b/pkg/kernel/testcases/strong-mode/void-methods.baseline.txt
index 73cd4d9..5120402 100644
--- a/pkg/kernel/testcases/strong-mode/void-methods.baseline.txt
+++ b/pkg/kernel/testcases/strong-mode/void-methods.baseline.txt
@@ -1,4 +1,3 @@
-// dynamic is not a subtype of dart.core::int (void-methods.dart:4:27)
 library;
 import self as self;
 import "dart:core" as core;
@@ -9,9 +8,9 @@
     : super core::Object::•()
     ;
   set first(dynamic x) → void
-    this.{self::Foo::list}.{core::List::[]=}(0, x);
+    this.{self::Foo::list}.{core::List::[]=$cc}(0, x);
   operator []=(dynamic x, dynamic y) → dynamic
-    this.{self::Foo::list}.{core::List::[]=}(x, y);
+    this.{self::Foo::list}.{core::List::[]=$cc}(x as core::int, y);
   method clear() → void
     this.{self::Foo::list}.{core::List::clear}();
 }
diff --git a/pkg/kernel/testcases/type-propagation/covariant_generic.baseline.txt b/pkg/kernel/testcases/type-propagation/covariant_generic.baseline.txt
new file mode 100644
index 0000000..bc66a8f
--- /dev/null
+++ b/pkg/kernel/testcases/type-propagation/covariant_generic.baseline.txt
@@ -0,0 +1,38 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo<T extends core::Object> extends core::Object {
+  final field self::Foo::T/core::int* {int} finalField;
+  final field (self::Foo::T) → void/core::Function* {other} callbackField;
+  field self::Foo::T/core::num* {null,int,double} mutableField = null;
+  field (self::Foo::T) → void/core::Function* {null,other} mutableCallbackField = null;
+  constructor •(self::Foo::T/core::int* {int} finalField, (self::Foo::T) → void/core::Function* {other} callbackField) → void
+    : self::Foo::finalField = finalField, self::Foo::callbackField = callbackField, super core::Object::•()
+    ;
+  method method(self::Foo::T/core::num* {int,double} x) → void/Null {}
+  set setter(self::Foo::T/core::num* {int,double} x) → dynamic/Null {}
+  method withCallback((self::Foo::T) → void/core::Function* {other} callback) → void/Null {
+    callback.call(this.finalField);
+  }
+}
+static method main() → dynamic/Null {
+  self::Foo<core::int>/self::Foo! {other} fooInt = new self::Foo::•<core::int>(1, (core::int/Nothing x) → dynamic/Null {});
+  fooInt.method(3);
+  fooInt.setter = 3;
+  fooInt.withCallback((core::int/core::Object+ {*} x) → dynamic/Null {});
+  fooInt.withCallback((core::num/core::Object+ {*} x) → dynamic/Null {});
+  fooInt.mutableField = 3;
+  fooInt.mutableCallbackField = (core::int/core::Object+ {*} x) → dynamic/Null {};
+  self::Foo<core::num>/self::Foo! {other} fooNum = fooInt;
+  fooNum.method(3);
+  fooNum.method(2.5);
+  fooNum.setter = 3;
+  fooNum.setter = 2.5;
+  fooNum.withCallback((core::num/core::Object+ {*} x) → dynamic/Null {});
+  fooNum.mutableField = 3;
+  fooNum.mutableField = 2.5;
+  fooNum.mutableCallbackField(3);
+  fooNum.mutableCallbackField(2.5);
+  fooNum.mutableCallbackField = (core::num/core::Object+ {*} x) → dynamic/Null {};
+}
diff --git a/pkg/pkg.status b/pkg/pkg.status
index e347260..9a3c1ec 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -33,290 +33,6 @@
 dev_compiler/gen/*: SkipByDesign
 dev_compiler/test/options/*: SkipByDesign
 
-# Issue #28236
-analysis_server/test/analysis/get_errors_test: StaticWarning
-analysis_server/test/analysis/get_hover_test: StaticWarning
-analysis_server/test/analysis/get_navigation_test: StaticWarning
-analysis_server/test/analysis/navigation_collector_test: StaticWarning
-analysis_server/test/analysis/notification_analysis_options_test: StaticWarning
-analysis_server/test/analysis/notification_analyzedFiles_test: StaticWarning
-analysis_server/test/analysis/notification_errors_test: StaticWarning
-analysis_server/test/analysis/notification_highlights_test: StaticWarning
-analysis_server/test/analysis/notification_implemented_test: StaticWarning
-analysis_server/test/analysis/notification_navigation_test: StaticWarning
-analysis_server/test/analysis/notification_occurrences_test: StaticWarning
-analysis_server/test/analysis/notification_outline_test: StaticWarning
-analysis_server/test/analysis/notification_overrides_test: StaticWarning
-analysis_server/test/analysis/reanalyze_test: StaticWarning
-analysis_server/test/analysis/set_priority_files_test: StaticWarning
-analysis_server/test/analysis/update_content_test: StaticWarning
-analysis_server/test/analysis_server_test: StaticWarning
-analysis_server/test/channel/byte_stream_channel_test: StaticWarning
-analysis_server/test/channel/web_socket_channel_test: StaticWarning
-analysis_server/test/completion_test: StaticWarning
-analysis_server/test/context_manager_test: StaticWarning
-analysis_server/test/domain_analysis_test: StaticWarning
-analysis_server/test/domain_completion_test: StaticWarning
-analysis_server/test/domain_diagnostic_test: StaticWarning
-analysis_server/test/domain_execution_test: StaticWarning
-analysis_server/test/domain_server_test: StaticWarning
-analysis_server/test/edit/assists_test: StaticWarning
-analysis_server/test/edit/fixes_test: StaticWarning
-analysis_server/test/edit/format_test: StaticWarning
-analysis_server/test/edit/organize_directives_test: StaticWarning
-analysis_server/test/edit/refactoring_test: StaticWarning
-analysis_server/test/edit/sort_members_test: StaticWarning
-analysis_server/test/integration/analysis/analysis_options_test: StaticWarning
-analysis_server/test/integration/analysis/error_test: StaticWarning
-analysis_server/test/integration/analysis/get_errors_after_analysis_test: StaticWarning
-analysis_server/test/integration/analysis/get_errors_before_analysis_test: StaticWarning
-analysis_server/test/integration/analysis/get_hover_test: StaticWarning
-analysis_server/test/integration/analysis/highlights_test: StaticWarning
-analysis_server/test/integration/analysis/lint_test: StaticWarning
-analysis_server/test/integration/analysis/navigation_test: StaticWarning
-analysis_server/test/integration/analysis/occurrences_test: StaticWarning
-analysis_server/test/integration/analysis/outline_test: StaticWarning
-analysis_server/test/integration/analysis/overrides_test: StaticWarning
-analysis_server/test/integration/analysis/package_root_test: StaticWarning
-analysis_server/test/integration/analysis/reanalyze_concurrent_test: StaticWarning
-analysis_server/test/integration/analysis/reanalyze_test: StaticWarning
-analysis_server/test/integration/analysis/update_content_list_test: StaticWarning
-analysis_server/test/integration/analysis/update_content_test: StaticWarning
-analysis_server/test/integration/completion/get_suggestions_test: StaticWarning
-analysis_server/test/integration/search/get_type_hierarchy_test: StaticWarning
-analysis_server/test/integration/server/get_version_test: StaticWarning
-analysis_server/test/integration/server/set_subscriptions_invalid_service_test: StaticWarning
-analysis_server/test/integration/server/set_subscriptions_test: StaticWarning
-analysis_server/test/integration/server/shutdown_test: StaticWarning
-analysis_server/test/integration/server/status_test: StaticWarning
-analysis_server/test/operation/operation_queue_test: StaticWarning
-analysis_server/test/operation/operation_test: StaticWarning
-analysis_server/test/plugin/protocol_dart_test: StaticWarning
-analysis_server/test/plugin/set_analysis_domain_test: StaticWarning
-analysis_server/test/protocol_server_test: StaticWarning
-analysis_server/test/protocol_test: StaticWarning
-analysis_server/test/search/element_references_test: StaticWarning
-analysis_server/test/search/member_declarations_test: StaticWarning
-analysis_server/test/search/member_references_test: StaticWarning
-analysis_server/test/search/search_result_test: StaticWarning
-analysis_server/test/search/top_level_declarations_test: StaticWarning
-analysis_server/test/search/type_hierarchy_test: StaticWarning
-analysis_server/test/server_options_test: StaticWarning
-analysis_server/test/services/completion/completion_target_test: StaticWarning
-analysis_server/test/services/completion/dart/arglist_contributor_test: StaticWarning
-analysis_server/test/services/completion/dart/combinator_contributor_test: StaticWarning
-analysis_server/test/services/completion/dart/common_usage_sorter_test: StaticWarning
-analysis_server/test/services/completion/dart/completion_manager_test: StaticWarning
-analysis_server/test/services/completion/dart/field_formal_contributor_test: StaticWarning
-analysis_server/test/services/completion/dart/imported_reference_contributor_test: StaticWarning
-analysis_server/test/services/completion/dart/inherited_reference_contributor_test: StaticWarning
-analysis_server/test/services/completion/dart/keyword_contributor_test: StaticWarning
-analysis_server/test/services/completion/dart/label_contributor_test: StaticWarning
-analysis_server/test/services/completion/dart/library_member_contributor_test: StaticWarning
-analysis_server/test/services/completion/dart/library_prefix_contributor_test: StaticWarning
-analysis_server/test/services/completion/dart/local_constructor_contributor_test: StaticWarning
-analysis_server/test/services/completion/dart/local_declaration_visitor_test: StaticWarning
-analysis_server/test/services/completion/dart/local_library_contributor_test: StaticWarning
-analysis_server/test/services/completion/dart/local_reference_contributor_test: StaticWarning
-analysis_server/test/services/completion/dart/named_constructor_contributor_test: StaticWarning
-analysis_server/test/services/completion/dart/optype_test: StaticWarning
-analysis_server/test/services/completion/dart/override_contributor_test: StaticWarning
-analysis_server/test/services/completion/dart/static_member_contributor_test: StaticWarning
-analysis_server/test/services/completion/dart/type_member_contributor_test: StaticWarning
-analysis_server/test/services/completion/dart/uri_contributor_test: StaticWarning
-analysis_server/test/services/completion/dart/variable_name_contributor_test: StaticWarning
-analysis_server/test/services/correction/assist_test: StaticWarning
-analysis_server/test/services/correction/change_test: StaticWarning
-analysis_server/test/services/correction/fix_test: StaticWarning
-analysis_server/test/services/correction/levenshtein_test: StaticWarning
-analysis_server/test/services/correction/name_suggestion_test: StaticWarning
-analysis_server/test/services/correction/organize_directives_test: StaticWarning
-analysis_server/test/services/correction/sort_members_test: StaticWarning
-analysis_server/test/services/correction/source_range_test: StaticWarning
-analysis_server/test/services/correction/status_test: StaticWarning
-analysis_server/test/services/correction/strings_test: StaticWarning
-analysis_server/test/services/correction/util_test: StaticWarning
-analysis_server/test/services/dependencies/library_dependencies_test: StaticWarning
-analysis_server/test/services/dependencies/reachable_source_collector_test: StaticWarning
-analysis_server/test/services/index/index_test: StaticWarning
-analysis_server/test/services/index/index_unit_test: StaticWarning
-analysis_server/test/services/linter/linter_test: StaticWarning
-analysis_server/test/services/refactoring/convert_getter_to_method_test: StaticWarning
-analysis_server/test/services/refactoring/convert_method_to_getter_test: StaticWarning
-analysis_server/test/services/refactoring/extract_local_test: StaticWarning
-analysis_server/test/services/refactoring/extract_method_test: StaticWarning
-analysis_server/test/services/refactoring/inline_local_test: StaticWarning
-analysis_server/test/services/refactoring/inline_method_test: StaticWarning
-analysis_server/test/services/refactoring/move_file_test: StaticWarning
-analysis_server/test/services/refactoring/naming_conventions_test: StaticWarning
-analysis_server/test/services/refactoring/rename_class_member_test: StaticWarning
-analysis_server/test/services/refactoring/rename_constructor_test: StaticWarning
-analysis_server/test/services/refactoring/rename_import_test: StaticWarning
-analysis_server/test/services/refactoring/rename_label_test: StaticWarning
-analysis_server/test/services/refactoring/rename_library_test: StaticWarning
-analysis_server/test/services/refactoring/rename_local_test: StaticWarning
-analysis_server/test/services/refactoring/rename_unit_member_test: StaticWarning
-analysis_server/test/services/search/hierarchy_test: StaticWarning
-analysis_server/test/services/search/search_engine2_test: StaticWarning
-analysis_server/test/services/search/search_engine_test: StaticWarning
-analysis_server/test/single_context_manager_test: StaticWarning
-analysis_server/test/socket_server_test: StaticWarning
-analysis_server/test/source/caching_put_package_map_provider_test: StaticWarning
-analysis_server/test/src/utilities/change_builder_core_test: StaticWarning
-analysis_server/test/src/utilities/change_builder_dart_test: StaticWarning
-analysis_server/test/src/watch_manager_test: StaticWarning
-analyzer/test/cancelable_future_test: StaticWarning
-analyzer/test/context/declared_variables_test: StaticWarning
-analyzer/test/dart/ast/ast_test: StaticWarning
-analyzer/test/dart/ast/visitor_test: StaticWarning
-analyzer/test/dart/element/builder_test: StaticWarning
-analyzer/test/dart/element/element_test: StaticWarning
-analyzer/test/file_system/memory_file_system_test: StaticWarning
-analyzer/test/file_system/physical_resource_provider_test: StaticWarning
-analyzer/test/file_system/resource_uri_resolver_test: StaticWarning
-analyzer/test/generated/all_the_rest_test: StaticWarning
-analyzer/test/generated/bazel_test: StaticWarning
-analyzer/test/generated/checked_mode_compile_time_error_code_test: StaticWarning
-analyzer/test/generated/compile_time_error_code_test: StaticWarning
-analyzer/test/generated/constant_test: StaticWarning
-analyzer/test/generated/declaration_resolver_test: StaticWarning
-analyzer/test/generated/element_resolver_test: StaticWarning
-analyzer/test/generated/engine_test: StaticWarning
-analyzer/test/generated/error_suppression_test: StaticWarning
-analyzer/test/generated/hint_code_test: StaticWarning
-analyzer/test/generated/incremental_resolver_test: StaticWarning
-analyzer/test/generated/inheritance_manager_test: StaticWarning
-analyzer/test/generated/java_core_test: StaticWarning
-analyzer/test/generated/java_io_test: StaticWarning
-analyzer/test/generated/non_error_resolver_test: StaticWarning
-analyzer/test/generated/non_hint_code_test: StaticWarning
-analyzer/test/generated/package_test: StaticWarning
-analyzer/test/generated/parser_test: StaticWarning
-analyzer/test/generated/resolver_test: StaticWarning
-analyzer/test/generated/scanner_test: StaticWarning
-analyzer/test/generated/sdk_test: StaticWarning
-analyzer/test/generated/simple_resolver_test: StaticWarning
-analyzer/test/generated/source_factory_test: StaticWarning
-analyzer/test/generated/static_type_analyzer_test: StaticWarning
-analyzer/test/generated/static_type_warning_code_test: StaticWarning
-analyzer/test/generated/static_warning_code_test: StaticWarning
-analyzer/test/generated/strong_mode_test: StaticWarning
-analyzer/test/generated/type_system_test: StaticWarning
-analyzer/test/generated/utilities_dart_test: StaticWarning
-analyzer/test/generated/utilities_test: StaticWarning
-analyzer/test/instrumentation/instrumentation_test: StaticWarning
-analyzer/test/parse_compilation_unit_test: StaticWarning
-analyzer/test/source/analysis_options_provider_test: StaticWarning
-analyzer/test/source/embedder_test: StaticWarning
-analyzer/test/source/error_processor_test: StaticWarning
-analyzer/test/source/package_map_provider_test: StaticWarning
-analyzer/test/source/package_map_resolver_test: StaticWarning
-analyzer/test/source/path_filter_test: StaticWarning
-analyzer/test/source/sdk_ext_test: StaticWarning
-analyzer/test/src/command_line/arguments_test: StaticWarning
-analyzer/test/src/context/builder_test: StaticWarning
-analyzer/test/src/context/cache_test: StaticWarning
-analyzer/test/src/context/context_test: StaticWarning
-analyzer/test/src/dart/analysis/byte_store_test: StaticWarning
-analyzer/test/src/dart/analysis/driver_test: StaticWarning
-analyzer/test/src/dart/analysis/file_state_test: StaticWarning
-analyzer/test/src/dart/analysis/index_test: StaticWarning
-analyzer/test/src/dart/analysis/referenced_names_test: StaticWarning
-analyzer/test/src/dart/analysis/search_test: StaticWarning
-analyzer/test/src/dart/ast/utilities_test: StaticWarning
-analyzer/test/src/dart/constant/evaluation_test: StaticWarning
-analyzer/test/src/dart/constant/utilities_test: StaticWarning
-analyzer/test/src/dart/constant/value_test: StaticWarning
-analyzer/test/src/dart/element/element_test: StaticWarning
-analyzer/test/src/dart/sdk/patch_test: StaticWarning
-analyzer/test/src/dart/sdk/sdk_test: StaticWarning
-analyzer/test/src/lint/config_test: StaticWarning
-analyzer/test/src/lint/io_test: StaticWarning
-analyzer/test/src/lint/project_test: StaticWarning
-analyzer/test/src/lint/pub_test: StaticWarning
-analyzer/test/src/source/source_resource_test: StaticWarning
-analyzer/test/src/summary/api_signature_test: StaticWarning
-analyzer/test/src/summary/bazel_summary_test: StaticWarning
-analyzer/test/src/summary/flat_buffers_test: StaticWarning
-analyzer/test/src/summary/in_summary_source_test: StaticWarning
-analyzer/test/src/summary/linker_test: StaticWarning
-analyzer/test/src/summary/name_filter_test: StaticWarning
-analyzer/test/src/summary/package_bundle_reader_test: StaticWarning
-analyzer/test/src/summary/prelinker_test: StaticWarning
-analyzer/test/src/summary/pub_summary_test: StaticWarning
-analyzer/test/src/summary/resynthesize_ast_test: StaticWarning
-analyzer/test/src/summary/summarize_ast_strong_test: StaticWarning
-analyzer/test/src/summary/summarize_ast_test: StaticWarning
-analyzer/test/src/task/dart_test: StaticWarning
-analyzer/test/src/task/dart_work_manager_test: StaticWarning
-analyzer/test/src/task/driver_test: StaticWarning
-analyzer/test/src/task/general_test: StaticWarning
-analyzer/test/src/task/html_test: StaticWarning
-analyzer/test/src/task/html_work_manager_test: StaticWarning
-analyzer/test/src/task/incremental_element_builder_test: StaticWarning
-analyzer/test/src/task/inputs_test: StaticWarning
-analyzer/test/src/task/manager_test: StaticWarning
-analyzer/test/src/task/model_test: StaticWarning
-analyzer/test/src/task/options_test: StaticWarning
-analyzer/test/src/task/options_work_manager_test: StaticWarning
-analyzer/test/src/task/strong/checker_test: StaticWarning
-analyzer/test/src/task/strong/inferred_type_test: StaticWarning
-analyzer/test/src/task/strong/non_null_checker_test: StaticWarning
-analyzer/test/src/task/strong_mode_test: StaticWarning
-analyzer/test/src/task/yaml_test: StaticWarning
-analyzer/test/src/util/absolute_path_test: StaticWarning
-analyzer/test/src/util/asserts_test: StaticWarning
-analyzer/test/src/util/fast_uri_test: StaticWarning
-analyzer/test/src/util/glob_test: StaticWarning
-analyzer/test/src/util/lru_map_test: StaticWarning
-analyzer/test/src/util/yaml_test: StaticWarning
-analyzer/tool/summary/check_test: StaticWarning
-analyzer/tool/task_dependency_graph/check_test: StaticWarning
-analyzer_cli/test/build_mode_test: StaticWarning
-analyzer_cli/test/driver_test: StaticWarning
-analyzer_cli/test/embedder_test: StaticWarning
-analyzer_cli/test/error_test: StaticWarning
-analyzer_cli/test/options_test: StaticWarning
-analyzer_cli/test/package_prefix_test: StaticWarning
-analyzer_cli/test/perf_report_test: StaticWarning
-analyzer_cli/test/reporter_test: StaticWarning
-analyzer_cli/test/sdk_ext_test: StaticWarning
-analyzer_cli/test/strong_mode_test: StaticWarning
-analyzer_cli/test/super_mixin_test: StaticWarning
-analyzer_cli/tool/perf_test: StaticWarning
-compiler/tool/perf_test: StaticWarning
-dev_compiler/test/closure/closure_annotation_test: StaticWarning
-dev_compiler/test/closure/closure_type_test: StaticWarning
-dev_compiler/test/codegen_test: StaticWarning
-dev_compiler/test/js/builder_test: StaticWarning
-dev_compiler/test/worker/worker_test: StaticWarning
-front_end/test/dependency_grapher_test: StaticWarning
-front_end/test/memory_file_system_test: StaticWarning
-front_end/test/physical_file_system_test: StaticWarning
-front_end/test/scanner_test: StaticWarning
-front_end/test/src/async_dependency_walker_test: StaticWarning
-front_end/test/src/base/libraries_reader_test: StaticWarning
-front_end/test/src/base/processed_options_test: StaticWarning
-front_end/test/src/base/uri_resolver_test: StaticWarning
-front_end/test/src/dependency_walker_test: StaticWarning
-front_end/tool/perf_test: StaticWarning
-js_ast/test/printer_callback_test: StaticWarning
-js_ast/test/string_escape_test: StaticWarning
-kernel/test/baseline_spec_mode_test: StaticWarning
-kernel/test/baseline_strong_mode_test: StaticWarning
-kernel/test/baseline_type_propagation_test: StaticWarning
-kernel/test/type_hashcode_test: StaticWarning
-kernel/test/type_substitute_bounds_test: StaticWarning
-kernel/test/type_substitution_identity_test: StaticWarning
-kernel/test/type_subtype_test: StaticWarning
-kernel/test/type_unification_test: StaticWarning
-kernel/test/uint31_pair_map_test: StaticWarning
-kernel/test/verify_test: StaticWarning
-lookup_map/test/lookup_map_test: StaticWarning
-lookup_map/test/version_check_test: StaticWarning
-typed_mock/test/typed_mock_test: StaticWarning
-
-
 [ $compiler == none && ($runtime == drt || $runtime == dartium) ]
 mutation_observer: Skip # Issue 21149
 unittest/*: Skip # Issue 21949
diff --git a/runtime/BUILD.gn b/runtime/BUILD.gn
index e7c13da..50ae8ce61 100644
--- a/runtime/BUILD.gn
+++ b/runtime/BUILD.gn
@@ -163,7 +163,7 @@
     ]
 
     if (dart_debug) {
-      cflags += [ "-O1" ]
+      cflags += [ "-O2" ]
     } else {
       cflags += [ "-O3" ]
     }
diff --git a/runtime/bin/directory_fuchsia.cc b/runtime/bin/directory_fuchsia.cc
index 9259bd0..c931171 100644
--- a/runtime/bin/directory_fuchsia.cc
+++ b/runtime/bin/directory_fuchsia.cc
@@ -126,91 +126,61 @@
       done_ = true;
       return kListError;
     }
-    switch (entry->d_type) {
-      case DT_DIR:
+    // TODO(MG-450): When entry->d_type is filled out correctly, we can avoid
+    // this call to stat().
+    struct stat64 entry_info;
+    int stat_success;
+    stat_success = NO_RETRY_EXPECTED(
+        lstat64(listing->path_buffer().AsString(), &entry_info));
+    if (stat_success == -1) {
+      perror("lstat64 failed: ");
+      return kListError;
+    }
+    if (listing->follow_links() && S_ISLNK(entry_info.st_mode)) {
+      // Check to see if we are in a loop created by a symbolic link.
+      LinkList current_link = {entry_info.st_dev, entry_info.st_ino, link_};
+      LinkList* previous = link_;
+      while (previous != NULL) {
+        if ((previous->dev == current_link.dev) &&
+            (previous->ino == current_link.ino)) {
+          // Report the looping link as a link, rather than following it.
+          return kListLink;
+        }
+        previous = previous->next;
+      }
+      stat_success = NO_RETRY_EXPECTED(
+          stat64(listing->path_buffer().AsString(), &entry_info));
+      if (stat_success == -1) {
+        perror("lstat64 failed");
+        // Report a broken link as a link, even if follow_links is true.
+        return kListLink;
+      }
+      if (S_ISDIR(entry_info.st_mode)) {
+        // Recurse into the subdirectory with current_link added to the
+        // linked list of seen file system links.
+        link_ = new LinkList(current_link);
         if ((strcmp(entry->d_name, ".") == 0) ||
             (strcmp(entry->d_name, "..") == 0)) {
           return Next(listing);
         }
         return kListDirectory;
-      case DT_BLK:
-      case DT_CHR:
-      case DT_FIFO:
-      case DT_SOCK:
-      case DT_REG:
-        return kListFile;
-      case DT_LNK:
-        if (!listing->follow_links()) {
-          return kListLink;
-        }
-      // Else fall through to next case.
-      // Fall through.
-      case DT_UNKNOWN: {
-        // On some file systems the entry type is not determined by
-        // readdir. For those and for links we use stat to determine
-        // the actual entry type. Notice that stat returns the type of
-        // the file pointed to.
-        struct stat64 entry_info;
-        int stat_success;
-        stat_success = NO_RETRY_EXPECTED(
-            lstat64(listing->path_buffer().AsString(), &entry_info));
-        if (stat_success == -1) {
-          perror("lstat64 failed: ");
-          return kListError;
-        }
-        if (listing->follow_links() && S_ISLNK(entry_info.st_mode)) {
-          // Check to see if we are in a loop created by a symbolic link.
-          LinkList current_link = {entry_info.st_dev, entry_info.st_ino, link_};
-          LinkList* previous = link_;
-          while (previous != NULL) {
-            if ((previous->dev == current_link.dev) &&
-                (previous->ino == current_link.ino)) {
-              // Report the looping link as a link, rather than following it.
-              return kListLink;
-            }
-            previous = previous->next;
-          }
-          stat_success = NO_RETRY_EXPECTED(
-              stat64(listing->path_buffer().AsString(), &entry_info));
-          if (stat_success == -1) {
-            perror("lstat64 failed");
-            // Report a broken link as a link, even if follow_links is true.
-            return kListLink;
-          }
-          if (S_ISDIR(entry_info.st_mode)) {
-            // Recurse into the subdirectory with current_link added to the
-            // linked list of seen file system links.
-            link_ = new LinkList(current_link);
-            if ((strcmp(entry->d_name, ".") == 0) ||
-                (strcmp(entry->d_name, "..") == 0)) {
-              return Next(listing);
-            }
-            return kListDirectory;
-          }
-        }
-        if (S_ISDIR(entry_info.st_mode)) {
-          if ((strcmp(entry->d_name, ".") == 0) ||
-              (strcmp(entry->d_name, "..") == 0)) {
-            return Next(listing);
-          }
-          return kListDirectory;
-        } else if (S_ISREG(entry_info.st_mode) || S_ISCHR(entry_info.st_mode) ||
-                   S_ISBLK(entry_info.st_mode) ||
-                   S_ISFIFO(entry_info.st_mode) ||
-                   S_ISSOCK(entry_info.st_mode)) {
-          return kListFile;
-        } else if (S_ISLNK(entry_info.st_mode)) {
-          return kListLink;
-        } else {
-          FATAL1("Unexpected st_mode: %d\n", entry_info.st_mode);
-          return kListError;
-        }
       }
-
-      default:
-        // We should have covered all the bases. If not, let's get an error.
-        FATAL1("Unexpected d_type: %d\n", entry->d_type);
-        return kListError;
+    }
+    if (S_ISDIR(entry_info.st_mode)) {
+      if ((strcmp(entry->d_name, ".") == 0) ||
+          (strcmp(entry->d_name, "..") == 0)) {
+        return Next(listing);
+      }
+      return kListDirectory;
+    } else if (S_ISREG(entry_info.st_mode) || S_ISCHR(entry_info.st_mode) ||
+               S_ISBLK(entry_info.st_mode) || S_ISFIFO(entry_info.st_mode) ||
+               S_ISSOCK(entry_info.st_mode)) {
+      return kListFile;
+    } else if (S_ISLNK(entry_info.st_mode)) {
+      return kListLink;
+    } else {
+      FATAL1("Unexpected st_mode: %d\n", entry_info.st_mode);
+      return kListError;
     }
   }
   done_ = true;
@@ -336,10 +306,7 @@
     // Pattern has overflowed.
     return NULL;
   }
-  char* result;
-  do {
-    result = mkdtemp(path.AsString());
-  } while ((result == NULL) && (errno == EINTR));
+  char* result = mkdtemp(path.AsString());
   if (result == NULL) {
     return NULL;
   }
@@ -347,6 +314,98 @@
 }
 
 
+static bool DeleteRecursively(PathBuffer* path);
+
+
+static bool DeleteFile(char* file_name, PathBuffer* path) {
+  return path->Add(file_name) &&
+         (NO_RETRY_EXPECTED(unlink(path->AsString())) == 0);
+}
+
+
+static bool DeleteDir(char* dir_name, PathBuffer* path) {
+  if ((strcmp(dir_name, ".") == 0) || (strcmp(dir_name, "..") == 0)) {
+    return true;
+  }
+  return path->Add(dir_name) && DeleteRecursively(path);
+}
+
+
+static bool DeleteRecursively(PathBuffer* path) {
+  // Do not recurse into links for deletion. Instead delete the link.
+  // If it's a file, delete it.
+  struct stat64 st;
+  if (NO_RETRY_EXPECTED(lstat64(path->AsString(), &st)) == -1) {
+    return false;
+  } else if (!S_ISDIR(st.st_mode)) {
+    return NO_RETRY_EXPECTED(unlink(path->AsString())) == 0;
+  }
+
+  if (!path->Add(File::PathSeparator())) {
+    return false;
+  }
+
+  // Not a link. Attempt to open as a directory and recurse into the
+  // directory.
+  DIR* dir_pointer = opendir(path->AsString());
+  if (dir_pointer == NULL) {
+    return false;
+  }
+
+  // Iterate the directory and delete all files and directories.
+  int path_length = path->length();
+  while (true) {
+    // In case `readdir()` returns `NULL` we distinguish between end-of-stream
+    // and error by looking if `errno` was updated.
+    errno = 0;
+    // In glibc 2.24+, readdir_r is deprecated.
+    // According to the man page for readdir:
+    // "readdir(3) is not required to be thread-safe. However, in modern
+    // implementations (including the glibc implementation), concurrent calls to
+    // readdir(3) that specify different directory streams are thread-safe."
+    dirent* entry = readdir(dir_pointer);
+    if (entry == NULL) {
+      // Failed to read next directory entry.
+      if (errno != 0) {
+        break;
+      }
+      // End of directory.
+      return (NO_RETRY_EXPECTED(closedir(dir_pointer)) == 0) &&
+             (NO_RETRY_EXPECTED(remove(path->AsString())) == 0);
+    }
+    bool ok = false;
+    if (!path->Add(entry->d_name)) {
+      break;
+    }
+    // TODO(MG-450): When entry->d_type is filled out correctly, we can avoid
+    // this call to stat().
+    struct stat64 entry_info;
+    if (NO_RETRY_EXPECTED(lstat64(path->AsString(), &entry_info)) == -1) {
+      break;
+    }
+    path->Reset(path_length);
+    if (S_ISDIR(entry_info.st_mode)) {
+      ok = DeleteDir(entry->d_name, path);
+    } else {
+      // Treat links as files. This will delete the link which is
+      // what we want no matter if the link target is a file or a
+      // directory.
+      ok = DeleteFile(entry->d_name, path);
+    }
+    if (!ok) {
+      break;
+    }
+    path->Reset(path_length);
+  }
+  // Only happens if there was an error.
+  ASSERT(errno != 0);
+  int err = errno;
+  VOID_NO_RETRY_EXPECTED(closedir(dir_pointer));
+  errno = err;
+  return false;
+}
+
+
 bool Directory::Delete(const char* dir_name, bool recursive) {
   if (!recursive) {
     if ((File::GetType(dir_name, false) == File::kIsLink) &&
@@ -355,10 +414,11 @@
     }
     return NO_RETRY_EXPECTED(rmdir(dir_name)) == 0;
   } else {
-    // TODO(MG-416): After the issue is addressed, this can use the same code
-    // as on Linux, etc.
-    UNIMPLEMENTED();
-    return false;
+    PathBuffer path;
+    if (!path.Add(dir_name)) {
+      return false;
+    }
+    return DeleteRecursively(&path);
   }
 }
 
diff --git a/runtime/bin/eventhandler_fuchsia.cc b/runtime/bin/eventhandler_fuchsia.cc
index 39be1ff..667e9b0 100644
--- a/runtime/bin/eventhandler_fuchsia.cc
+++ b/runtime/bin/eventhandler_fuchsia.cc
@@ -327,7 +327,10 @@
           delete di;
         }
 
-        DartUtils::PostInt32(port, 1 << kDestroyedEvent);
+        bool success = DartUtils::PostInt32(port, 1 << kDestroyedEvent);
+        if (!success) {
+          LOG_ERR("Failed to post destroy event to port %ld", port);
+        }
       } else if (IS_COMMAND(msg[i].data, kReturnTokenCommand)) {
         int count = TOKEN_COUNT(msg[i].data);
         intptr_t old_mask = di->Mask();
@@ -404,7 +407,8 @@
         if (!success) {
           // This can happen if e.g. the isolate that owns the port has died
           // for some reason.
-          FATAL2("Failed to post event for fd %ld to port %ld", di->fd(), port);
+          LOG_ERR("Failed to post event for fd %ld to port %ld", di->fd(),
+                  port);
         }
       }
     }
diff --git a/runtime/bin/process_fuchsia.cc b/runtime/bin/process_fuchsia.cc
index 88b115a..81a4af3 100644
--- a/runtime/bin/process_fuchsia.cc
+++ b/runtime/bin/process_fuchsia.cc
@@ -61,6 +61,7 @@
     if (closed != 0) {
       FATAL("Failed to close process exit code pipe");
     }
+    mx_handle_close(process_);
   }
   mx_handle_t process() const { return process_; }
   intptr_t exit_pipe_fd() const { return exit_pipe_fd_; }
@@ -87,7 +88,6 @@
     active_processes_ = info;
   }
 
-
   static intptr_t LookupProcessExitFd(mx_handle_t process) {
     MutexLocker locker(mutex_);
     ProcessInfo* current = active_processes_;
@@ -100,6 +100,9 @@
     return 0;
   }
 
+  static bool Exists(mx_handle_t process) {
+    return LookupProcessExitFd(process) != 0;
+  }
 
   static void RemoveProcess(mx_handle_t process) {
     MutexLocker locker(mutex_);
@@ -305,8 +308,8 @@
              return_code, exit_code_fd);
     if (exit_code_fd != 0) {
       int exit_message[2];
-      exit_message[0] = return_code;
-      exit_message[1] = 0;  // Do not negate return_code.
+      exit_message[0] = abs(return_code);
+      exit_message[1] = return_code >= 0 ? 0 : 1;
       intptr_t result = FDUtils::WriteToBlocking(exit_code_fd, &exit_message,
                                                  sizeof(exit_message));
       ASSERT((result == -1) || (result == sizeof(exit_code_fd)));
@@ -551,13 +554,37 @@
   }
   result->set_exit_code(exit_code);
 
+  // Close the process handle.
+  mx_handle_t process = static_cast<mx_handle_t>(pid);
+  mx_handle_close(process);
   return true;
 }
 
 
 bool Process::Kill(intptr_t id, int signal) {
-  errno = ENOSYS;
-  return false;
+  LOG_INFO("Sending signal %d to process with id %ld\n", signal, id);
+  // mx_task_kill is definitely going to kill the process.
+  if ((signal != SIGTERM) && (signal != SIGKILL)) {
+    LOG_ERR("Signal %d not supported\n", signal);
+    errno = ENOSYS;
+    return false;
+  }
+  // We can only use mx_task_kill if we know id is a process handle, and we only
+  // know that for sure if it's in our list.
+  mx_handle_t process = static_cast<mx_handle_t>(id);
+  if (!ProcessInfoList::Exists(process)) {
+    LOG_ERR("Process %ld wasn't in the ProcessInfoList\n", id);
+    errno = ESRCH;  // No such process.
+    return false;
+  }
+  mx_status_t status = mx_task_kill(process);
+  if (status != NO_ERROR) {
+    LOG_ERR("mx_task_kill failed: %s\n", mx_status_get_string(status));
+    errno = EPERM;  // TODO(zra): Figure out what it really should be.
+    return false;
+  }
+  LOG_INFO("Signal %d sent successfully to process %ld\n", signal, id);
+  return true;
 }
 
 
@@ -708,7 +735,12 @@
     launchpad_t* lp;
     mx_status_t status;
 
-    status = launchpad_create(0, program_arguments_[0], &lp);
+    mx_handle_t job = MX_HANDLE_INVALID;
+    status = mx_handle_duplicate(launchpad_get_mxio_job(), MX_RIGHT_SAME_RIGHTS,
+                                 &job);
+    CHECK_FOR_ERROR(status, "mx_handle_duplicate");
+
+    status = launchpad_create(job, program_arguments_[0], &lp);
     CHECK_FOR_ERROR(status, "launchpad_create");
     launchpad_ = lp;
 
diff --git a/runtime/bin/run_vm_tests_fuchsia.cc b/runtime/bin/run_vm_tests_fuchsia.cc
index c83a9cf..e7d4015 100644
--- a/runtime/bin/run_vm_tests_fuchsia.cc
+++ b/runtime/bin/run_vm_tests_fuchsia.cc
@@ -133,7 +133,11 @@
   }
   launchpad_t* lp;
   mx_status_t status;
-  status = launchpad_create(0, argv[0], &lp);
+  mx_handle_t job = MX_HANDLE_INVALID;
+  status =
+      mx_handle_duplicate(launchpad_get_mxio_job(), MX_RIGHT_SAME_RIGHTS, &job);
+  RETURN_IF_ERROR(status);
+  status = launchpad_create(job, argv[0], &lp);
   RETURN_IF_ERROR(status);
   status = launchpad_arguments(lp, argc, argv);
   RETURN_IF_ERROR(status);
diff --git a/runtime/bin/vmservice/loader.dart b/runtime/bin/vmservice/loader.dart
index 8af63b5..a72e735 100644
--- a/runtime/bin/vmservice/loader.dart
+++ b/runtime/bin/vmservice/loader.dart
@@ -53,6 +53,15 @@
   return uri;
 }
 
+class FileRequest {
+  final SendPort sp;
+  final int tag;
+  final Uri uri;
+  final Uri resolvedUri;
+  final String libraryUrl;
+  FileRequest(this.sp, this.tag, this.uri, this.resolvedUri, this.libraryUrl);
+}
+
 // State associated with the isolate that is used for loading.
 class IsolateLoaderState extends IsolateEmbedderData {
   IsolateLoaderState(this.isolateId);
@@ -78,6 +87,7 @@
     if (packagesConfigFlag != null) {
       _setPackagesConfig(packagesConfigFlag);
     }
+    _fileRequestQueue = new List<FileRequest>();
   }
 
   void cleanup() {
@@ -114,6 +124,24 @@
   Uri _packageConfig = null;
   Map<String, Uri> _packageMap = null;
 
+  // We issue only 16 concurrent calls to File.readAsBytes() to stay within
+  // platform-specific resource limits (e.g. max open files). The rest go on
+  // _fileRequestQueue and are processed when we can safely issue them.
+  static const int _maxFileRequests = 16;
+  int currentFileRequests = 0;
+  List<FileRequest> _fileRequestQueue;
+
+  bool get shouldIssueFileRequest => currentFileRequests < _maxFileRequests;
+  void enqueueFileRequest(FileRequest fr) {
+    _fileRequestQueue.add(fr);
+  }
+  FileRequest dequeueFileRequest() {
+    if (_fileRequestQueue.length == 0) {
+      return null;
+    }
+    return _fileRequestQueue.removeAt(0);
+  }
+
   _setPackageRoot(String packageRoot) {
     packageRoot = _sanitizeWindowsPath(packageRoot);
     if (packageRoot.startsWith('file:') ||
@@ -399,7 +427,8 @@
   Timer.run(() {});
 }
 
-void _loadFile(SendPort sp,
+void _loadFile(IsolateLoaderState loaderState,
+               SendPort sp,
                int tag,
                Uri uri,
                Uri resolvedUri,
@@ -411,6 +440,17 @@
   },
   onError: (e) {
     _sendResourceResponse(sp, tag, uri, resolvedUri, libraryUrl, e.toString());
+  }).whenComplete(() {
+    loaderState.currentFileRequests--;
+    while (loaderState.shouldIssueFileRequest) {
+      FileRequest fr = loaderState.dequeueFileRequest();
+      if (fr == null) {
+        break;
+      }
+      _loadFile(
+          loaderState, fr.sp, fr.tag, fr.uri, fr.resolvedUri, fr.libraryUrl);
+      loaderState.currentFileRequests++;
+    }
   });
 }
 
@@ -507,7 +547,13 @@
                        Uri resolvedUri,
                        String libraryUrl) {
   if (resolvedUri.scheme == '' || resolvedUri.scheme == 'file') {
-    _loadFile(sp, tag, uri, resolvedUri, libraryUrl);
+    if (loaderState.shouldIssueFileRequest) {
+      _loadFile(loaderState, sp, tag, uri, resolvedUri, libraryUrl);
+      loaderState.currentFileRequests++;
+    } else {
+      FileRequest fr = new FileRequest(sp, tag, uri, resolvedUri, libraryUrl);
+      loaderState.enqueueFileRequest(fr);
+    }
   } else if ((resolvedUri.scheme == 'http') ||
              (resolvedUri.scheme == 'https')) {
     _loadHttp(sp, tag, uri, resolvedUri, libraryUrl);
diff --git a/runtime/lib/mirrors.cc b/runtime/lib/mirrors.cc
index f99b111..a64dbed 100644
--- a/runtime/lib/mirrors.cc
+++ b/runtime/lib/mirrors.cc
@@ -819,6 +819,70 @@
 }
 
 
+DEFINE_NATIVE_ENTRY(Mirrors_instantiateGenericType, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(AbstractType, type, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Array, args, arguments->NativeArgAt(1));
+
+  ASSERT(type.HasResolvedTypeClass());
+  const Class& clz = Class::Handle(type.type_class());
+  if (!clz.IsGeneric()) {
+    const Array& error_args = Array::Handle(Array::New(3));
+    error_args.SetAt(0, type);
+    error_args.SetAt(1, String::Handle(String::New("key")));
+    error_args.SetAt(2, String::Handle(String::New(
+                            "Type must be a generic class or function.")));
+    Exceptions::ThrowByType(Exceptions::kArgumentValue, error_args);
+    UNREACHABLE();
+  }
+  if (clz.NumTypeParameters() != args.Length()) {
+    const Array& error_args = Array::Handle(Array::New(3));
+    error_args.SetAt(0, args);
+    error_args.SetAt(1, String::Handle(String::New("typeArguments")));
+    error_args.SetAt(2, String::Handle(String::New(
+                            "Number of type arguments does not match.")));
+    Exceptions::ThrowByType(Exceptions::kArgumentValue, error_args);
+    UNREACHABLE();
+  }
+
+  intptr_t num_expected_type_arguments = args.Length();
+  TypeArguments& type_args_obj = TypeArguments::Handle();
+  type_args_obj ^= TypeArguments::New(num_expected_type_arguments);
+  AbstractType& type_arg = AbstractType::Handle();
+  Instance& instance = Instance::Handle();
+  for (intptr_t i = 0; i < args.Length(); i++) {
+    instance ^= args.At(i);
+    if (!instance.IsType()) {
+      const Array& error_args = Array::Handle(Array::New(3));
+      error_args.SetAt(0, args);
+      error_args.SetAt(1, String::Handle(String::New("typeArguments")));
+      error_args.SetAt(2, String::Handle(String::New(
+                              "Type arguments must be instances of Type.")));
+      Exceptions::ThrowByType(Exceptions::kArgumentValue, error_args);
+      UNREACHABLE();
+    }
+    type_arg ^= args.At(i);
+    type_args_obj.SetTypeAt(i, type_arg);
+  }
+
+  Type& instantiated_type =
+      Type::Handle(Type::New(clz, type_args_obj, TokenPosition::kNoSource));
+  instantiated_type ^= ClassFinalizer::FinalizeType(
+      clz, instantiated_type, ClassFinalizer::kCanonicalize);
+  if (instantiated_type.IsMalbounded()) {
+    const LanguageError& type_error =
+        LanguageError::Handle(instantiated_type.error());
+    const Array& error_args = Array::Handle(Array::New(3));
+    error_args.SetAt(0, args);
+    error_args.SetAt(1, String::Handle(String::New("typeArguments")));
+    error_args.SetAt(2, String::Handle(type_error.FormatMessage()));
+    Exceptions::ThrowByType(Exceptions::kArgumentValue, error_args);
+    UNREACHABLE();
+  }
+
+  return instantiated_type.raw();
+}
+
+
 DEFINE_NATIVE_ENTRY(Mirrors_mangleName, 2) {
   GET_NON_NULL_NATIVE_ARGUMENT(String, name, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(1));
diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
index fe1c56e..f152adb 100644
--- a/runtime/lib/mirrors_impl.dart
+++ b/runtime/lib/mirrors_impl.dart
@@ -1645,6 +1645,8 @@
       native "Mirrors_makeLocalClassMirror";
   static TypeMirror makeLocalTypeMirror(Type key)
       native "Mirrors_makeLocalTypeMirror";
+  static Type instantiateGenericType(Type key, typeArguments)
+      native "Mirrors_instantiateGenericType";
 
   static Expando<ClassMirror> _declarationCache = new Expando("ClassMirror");
   static Expando<TypeMirror> _instantiationCache = new Expando("TypeMirror");
@@ -1661,7 +1663,10 @@
     return classMirror;
   }
 
-  static TypeMirror reflectType(Type key) {
+  static TypeMirror reflectType(Type key, [List<Type> typeArguments]) {
+    if (typeArguments != null) {
+      key = _instantiateType(key, typeArguments);
+    }
     var typeMirror = _instantiationCache[key];
     if (typeMirror == null) {
       typeMirror = makeLocalTypeMirror(key);
@@ -1672,4 +1677,12 @@
     }
     return typeMirror;
   }
+
+  static Type _instantiateType(Type key, List<Type> typeArguments) {
+    if (typeArguments.isEmpty) {
+      throw new ArgumentError.value(
+        typeArguments, 'typeArguments', 'Type arguments list cannot be empty.');
+    }
+    return instantiateGenericType(key, typeArguments.toList(growable: false));
+  }
 }
diff --git a/runtime/lib/mirrors_patch.dart b/runtime/lib/mirrors_patch.dart
index 03bd1b6..c168026 100644
--- a/runtime/lib/mirrors_patch.dart
+++ b/runtime/lib/mirrors_patch.dart
@@ -33,8 +33,8 @@
   return _Mirrors.reflectClass(key);
 }
 
-@patch TypeMirror reflectType(Type key) {
-  return _Mirrors.reflectType(key);
+@patch TypeMirror reflectType(Type key, [List<Type> typeArguments]) {
+  return _Mirrors.reflectType(key, typeArguments);
 }
 
 @patch class MirrorSystem {
diff --git a/runtime/observatory/tests/service/service.status b/runtime/observatory/tests/service/service.status
index 08d5bad..6e63e33 100644
--- a/runtime/observatory/tests/service/service.status
+++ b/runtime/observatory/tests/service/service.status
@@ -43,126 +43,6 @@
 developer_extension_test: SkipByDesign
 get_isolate_after_language_error_test: SkipByDesign
 
-# Issue #28236
-add_breakpoint_rpc_test: StaticWarning
-address_mapper_test: StaticWarning
-allocations_test: StaticWarning
-async_generator_breakpoint_test: StaticWarning
-async_next_test: StaticWarning
-async_scope_test: StaticWarning
-auth_token1_test: StaticWarning
-auth_token_test: StaticWarning
-bad_web_socket_address_test: StaticWarning
-break_on_activation_test: StaticWarning
-break_on_function_test: StaticWarning
-breakpoint_two_args_checked_test: StaticWarning
-caching_test: StaticWarning
-capture_stdio_test: StaticWarning
-code_test: StaticWarning
-command_test: StaticWarning
-complex_reload_test: StaticWarning
-contexts_test: StaticWarning
-crash_dump_test: StaticWarning
-debugger_inspect_test: StaticWarning
-debugger_location_second_test: StaticWarning
-debugger_location_test: StaticWarning
-debugging_inlined_finally_test: StaticWarning
-debugging_test: StaticWarning
-dev_fs_http_put_test: StaticWarning
-dev_fs_http_put_weird_char_test: StaticWarning
-dev_fs_spawn_test: StaticWarning
-dev_fs_test: StaticWarning
-dev_fs_weird_char_test: StaticWarning
-developer_server_control_test: StaticWarning
-developer_service_get_isolate_id_test: StaticWarning
-dominator_tree_user_test: StaticWarning
-dominator_tree_vm_test: StaticWarning
-echo_test: StaticWarning
-eval_internal_class_test: StaticWarning
-eval_test: StaticWarning
-evaluate_activation_test/instance: StaticWarning
-evaluate_activation_test/none: StaticWarning
-evaluate_activation_test/scope: StaticWarning
-evaluate_in_async_activation_test: StaticWarning
-evaluate_in_async_star_activation_test: StaticWarning
-evaluate_in_frame_rpc_test: StaticWarning
-evaluate_in_sync_star_activation_test: StaticWarning
-file_service_test: StaticWarning
-gc_test: StaticWarning
-get_allocation_profile_rpc_test: StaticWarning
-get_allocation_samples_test: StaticWarning
-get_cpu_profile_timeline_rpc_test: StaticWarning
-get_flag_list_rpc_test: StaticWarning
-get_heap_map_rpc_test: StaticWarning
-get_instances_rpc_test: StaticWarning
-get_isolate_after_async_error_test: StaticWarning
-get_isolate_after_stack_overflow_error_test: StaticWarning
-get_isolate_after_sync_error_test: StaticWarning
-get_isolate_rpc_test: StaticWarning
-get_object_rpc_test: StaticWarning
-get_object_store_rpc_test: StaticWarning
-get_ports_rpc_test: StaticWarning
-get_retained_size_rpc_test: StaticWarning
-get_retaining_path_rpc_test: StaticWarning
-get_source_report_test: StaticWarning
-get_stack_rpc_test: StaticWarning
-get_version_rpc_test: StaticWarning
-get_vm_rpc_test: StaticWarning
-get_vm_timeline_rpc_test: StaticWarning
-get_zone_memory_info_rpc_test: StaticWarning
-implicit_getter_setter_test: StaticWarning
-inbound_references_test: StaticWarning
-instance_field_order_rpc_test: StaticWarning
-isolate_lifecycle_test: StaticWarning
-issue_25465_test: StaticWarning
-issue_27238_test: StaticWarning
-issue_27287_test: StaticWarning
-library_dependency_test: StaticWarning
-local_variable_declaration_test: StaticWarning
-logging_test: StaticWarning
-malformed_test: StaticWarning
-metrics_test: StaticWarning
-mirror_references_test: StaticWarning
-native_metrics_test: StaticWarning
-object_graph_stack_reference_test: StaticWarning
-object_graph_user_test: StaticWarning
-object_graph_vm_test: StaticWarning
-observatory_assets_test: StaticWarning
-parameters_in_scope_at_entry_test: StaticWarning
-pause_idle_isolate_test: StaticWarning
-pause_on_exceptions_test: StaticWarning
-pause_on_start_and_exit_test: StaticWarning
-pause_on_start_then_step_test: StaticWarning
-pause_on_unhandled_exceptions_test: StaticWarning
-positive_token_pos_test: StaticWarning
-process_service_test: StaticWarning
-reachable_size_test: StaticWarning
-read_stream_test: StaticWarning
-regexp_function_test: StaticWarning
-reload_sources_test: StaticWarning
-rewind_optimized_out_test: StaticWarning
-rewind_test: StaticWarning
-set_library_debuggable_rpc_test: StaticWarning
-set_library_debuggable_test: StaticWarning
-set_name_rpc_test: StaticWarning
-set_vm_name_rpc_test: StaticWarning
-smart_next_test: StaticWarning
-steal_breakpoint_test: StaticWarning
-step_into_async_no_await_test: StaticWarning
-step_over_await_test: StaticWarning
-step_test: StaticWarning
-string_escaping_test: StaticWarning
-tcp_socket_closing_service_test: StaticWarning
-tcp_socket_service_test: StaticWarning
-type_arguments_test: StaticWarning
-typed_data_test: StaticWarning
-udp_socket_service_test: StaticWarning
-vm_restart_test: StaticWarning
-vm_test: StaticWarning
-vm_timeline_events_test: StaticWarning
-vm_timeline_flags_test: StaticWarning
-weak_properties_test: StaticWarning
-
 [ $arch == arm ]
 process_service_test: Pass, Fail # Issue 24344
 
diff --git a/runtime/tests/vm/dart/hello_fuchsia_test.dart b/runtime/tests/vm/dart/hello_fuchsia_test.dart
index 8053b85..8d597f2 100644
--- a/runtime/tests/vm/dart/hello_fuchsia_test.dart
+++ b/runtime/tests/vm/dart/hello_fuchsia_test.dart
@@ -397,6 +397,17 @@
   print("$exe --version had stderr = '${result.stderr}'");
 }
 
+Future testKill() async {
+  String exe = Platform.resolvedExecutable;
+  String script = Platform.script.path;
+  print("Running $exe $script");
+  Process p = await Process.start(exe, [script, "infinite-loop"]);
+  await new Future.delayed(const Duration(seconds: 1));
+  p.kill();
+  int code = await p.exitCode;
+  print("$exe $script exited with code $code");
+}
+
 Future testLs(String path) async {
   Stream<FileSystemEntity> stream = (new Directory(path)).list();
   await for (FileSystemEntity fse in stream) {
@@ -431,7 +442,35 @@
   await tmp.delete();
 }
 
-main() async {
+Future testRecursiveDelete() async {
+  Directory tmp0 = await Directory.systemTemp.createTemp("testRD");
+  Directory tmp1 = await tmp0.createTemp("testRD");
+  Directory tmp2 = await tmp1.createTemp("testRD");
+  File file0 = new File("${tmp0.path}/file");
+  File file1 = new File("${tmp1.path}/file");
+  File file2 = new File("${tmp2.path}/file");
+  List<int> data = new List<int>.generate(10 * 1024, (int i) => i & 0xff);
+  await file0.writeAsBytes(data);
+  await file1.writeAsBytes(data);
+  await file2.writeAsBytes(data);
+
+  await tmp0.delete(recursive: true);
+
+  assert(!await file2.exists());
+  assert(!await file1.exists());
+  assert(!await file0.exists());
+  assert(!await tmp2.exists());
+  assert(!await tmp1.exists());
+  assert(!await tmp0.exists());
+}
+
+main(List<String> args) async {
+  if (args.length >= 1) {
+    if (args[0] == "infinite-loop") {
+      while (true);
+    }
+  }
+
   print("Hello, Fuchsia!");
 
   print("testAddressParse");
@@ -478,9 +517,17 @@
   testProcessRunSync();
   print("testProcessRunSync done");
 
+  print("testKill");
+  await testKill();
+  print("testKill done");
+
   print("testCopy");
   await testCopy();
   print("testCopy done");
 
+  print("testRecursiveDelete");
+  await testRecursiveDelete();
+  print("testRecursiveDelete done");
+
   print("Goodbyte, Fuchsia!");
 }
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 0a2934a..fdcb0b4 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -30,6 +30,24 @@
 
 dart/data_uri_import_test/none: SkipByDesign
 
+[ $mode == debug && $arch != ia32 && $system != windows ]
+cc/Profiler_ArrayAllocation: Fail # 28304
+cc/Profiler_BasicSourcePosition: Fail # 28304
+cc/Profiler_BasicSourcePositionOptimized: Fail, Crash # 28304, # 28282
+cc/Profiler_BinaryOperatorSourcePosition: Fail # 28304
+cc/Profiler_BinaryOperatorSourcePositionOptimized: Fail # 28304
+cc/Profiler_ChainedSamples: Fail # 28304
+cc/Profiler_ClosureAllocation: Fail # 28304
+cc/Profiler_CodeTicks: Fail # 28304
+cc/Profiler_ContextAllocation: Fail # 28304
+cc/Profiler_FunctionInline: Fail # 28304
+cc/Profiler_FunctionTicks: Fail # 28304
+cc/Profiler_SourcePosition: Fail # 28304
+cc/Profiler_SourcePositionOptimized: Fail # 28304
+cc/Profiler_ToggleRecordAllocation: Fail # 28304
+cc/Profiler_TrivialRecordAllocation: Fail # 28304
+cc/Profiler_TypedArrayAllocation: Fail # 28304
+
 [ $mode == debug ]
 # This is a benchmark that is not informative in debug mode.
 cc/CorelibIsolateStartup: Skip
@@ -149,6 +167,82 @@
 [ $builder_tag == asan ]
 cc/CodeImmutability: Fail,OK # Address Sanitizer turns a crash into a failure.
 
+[ $builder_tag == asan && $arch == x64 ]
+cc/Service_Profile: Fail # Issue 28342
+cc/Service_PersistentHandles: Fail # Issue 28342
+cc/Service_EmbedderIsolateHandler: Fail # Issue 28342
+cc/Service_LocalVarDescriptors: Fail # Issue 28342
+cc/Service_Code: Fail # Issue 28342
+cc/Service_EmbedderRootHandler: Fail # Issue 28342
+cc/Service_TokenStream: Fail # Issue 28342
+cc/Service_PcDescriptors: Fail # Issue 28342
+cc/Service_Address: Fail # Issue 28342
+
+cc/EmbeddedScript: Fail # Issue 28345
+
+cc/Log_Basic: Fail # Issue 28347
+cc/Log_Block: Fail # Issue 28347
+cc/Log_Macro: Fail # Issue 28347
+
+cc/Debug_DeleteBreakpoint: Fail # Issue 28348
+
+cc/IsolateReload_ChangeInstanceFormat7: Fail # Issue 28349
+cc/IsolateReload_ClassAdded: Fail # Issue 28349
+cc/IsolateReload_ComplexInheritanceChange: Fail # Issue 28349
+cc/IsolateReload_ConstFieldUpdate: Fail # Issue 28349
+cc/IsolateReload_ConstantIdentical: Fail # Issue 28349
+cc/IsolateReload_ConstructorChanged: Fail # Issue 28349
+cc/IsolateReload_DanglingGetter_Class: Fail # Issue 28349
+cc/IsolateReload_DanglingGetter_Instance: Fail # Issue 28349
+cc/IsolateReload_DanglingGetter_Library: Fail # Issue 28349
+cc/IsolateReload_DanglingSetter_Class: Fail # Issue 28349
+cc/IsolateReload_DanglingSetter_Instance: Fail # Issue 28349
+cc/IsolateReload_DanglingSetter_Library: Fail # Issue 28349
+cc/IsolateReload_DirectSubclasses_GhostSubclass: Fail # Issue 28349
+cc/IsolateReload_DirectSubclasses_Success: Fail # Issue 28349
+cc/IsolateReload_EnumAddition: Fail # Issue 28349
+cc/IsolateReload_EnumDelete: Fail # Issue 28349
+cc/IsolateReload_EnumEquality: Fail # Issue 28349
+cc/IsolateReload_EnumIdentical: Fail # Issue 28349
+cc/IsolateReload_EnumIdentityReload: Fail # Issue 28349
+cc/IsolateReload_EnumReorderIdentical: Fail # Issue 28349
+cc/IsolateReload_EnumValuesToString: Fail # Issue 28349
+cc/IsolateReload_ExportedLibModified: Fail # Issue 28349
+cc/IsolateReload_FunctionReplacement: Fail # Issue 28349
+cc/IsolateReload_Generics: Fail # Issue 28349
+cc/IsolateReload_ImplicitConstructorChanged: Fail # Issue 28349
+cc/IsolateReload_ImportedLibModified: Fail # Issue 28349
+cc/IsolateReload_ImportedMixinFunction: Fail # Issue 28349
+cc/IsolateReload_LibraryDebuggable: Fail # Issue 28349
+cc/IsolateReload_LibraryHide: Fail # Issue 28349
+cc/IsolateReload_LibraryImportAdded: Fail # Issue 28349
+cc/IsolateReload_LibraryImportRemoved: Fail # Issue 28349
+cc/IsolateReload_LibraryLookup: Fail # Issue 28349
+cc/IsolateReload_LibraryShow: Fail # Issue 28349
+cc/IsolateReload_LiveStack: Fail # Issue 28349
+cc/IsolateReload_MainLibModified: Fail # Issue 28349
+cc/IsolateReload_MixinChanged: Fail # Issue 28349
+cc/IsolateReload_PendingSuperCall: Fail # Issue 28349
+cc/IsolateReload_PrefixImportedLibModified: Fail # Issue 28349
+cc/IsolateReload_SavedClosure: Fail # Issue 28349
+cc/IsolateReload_SavedClosure: Fail # Issue 28349
+cc/IsolateReload_SimpleConstFieldUpdate: Fail # Issue 28349
+cc/IsolateReload_SmiFastPathStubs: Fail # Issue 28349
+cc/IsolateReload_StaticTearOffRetainsHash: Fail # Issue 28349
+cc/IsolateReload_StaticValuePreserved: Fail # Issue 28349
+cc/IsolateReload_StaticValuePreserved: Fail # Issue 28349
+cc/IsolateReload_SuperClassChanged: Fail # Issue 28349
+cc/IsolateReload_TearOff_AddArguments2: Fail # Issue 28349
+cc/IsolateReload_TearOff_AddArguments: Fail # Issue 28349
+cc/IsolateReload_TearOff_Class_Identity: Fail # Issue 28349
+cc/IsolateReload_TearOff_Instance_Equality: Fail # Issue 28349
+cc/IsolateReload_TearOff_Library_Identity: Fail # Issue 28349
+cc/IsolateReload_TearOff_List_Set: Fail # Issue 28349
+cc/IsolateReload_TopLevelFieldAdded: Fail # Issue 28349
+cc/IsolateReload_TypeIdentity: Fail # Issue 28349
+cc/IsolateReload_TypeIdentityGeneric: Fail # Issue 28349
+cc/IsolateReload_TypeIdentityParameter: Fail # Issue 28349
+
 [ $noopt || $compiler == precompiler ]
 dart/byte_array_test: Skip # Incompatible flag --disable_alloc_stubs_after_gc
 
diff --git a/runtime/vm/ast_transformer.cc b/runtime/vm/ast_transformer.cc
index 974259e..fa1028d 100644
--- a/runtime/vm/ast_transformer.cc
+++ b/runtime/vm/ast_transformer.cc
@@ -207,8 +207,8 @@
       new (Z) LoadLocalNode(token_pos, stack_trace_param);
   SequenceNode* error_ne_null_branch =
       new (Z) SequenceNode(token_pos, ChainNewScope(preamble_->scope()));
-  error_ne_null_branch->Add(
-      new (Z) ThrowNode(token_pos, load_error_param, load_stack_trace_param));
+  error_ne_null_branch->Add(new (Z) ThrowNode(
+      node->token_pos(), load_error_param, load_stack_trace_param));
   preamble_->Add(new (Z) IfNode(
       token_pos, new (Z) ComparisonNode(
                      token_pos, Token::kNE, load_error_param,
diff --git a/runtime/vm/benchmark_test.cc b/runtime/vm/benchmark_test.cc
index db3bfc4..e2f8790 100644
--- a/runtime/vm/benchmark_test.cc
+++ b/runtime/vm/benchmark_test.cc
@@ -96,9 +96,8 @@
 
 
 Dart_Isolate Benchmark::CreateIsolate(const uint8_t* buffer) {
-  bin::IsolateData* isolate_data = new bin::IsolateData(NULL, NULL, NULL);
   char* err = NULL;
-  isolate_ = Dart_CreateIsolate(NULL, NULL, buffer, NULL, isolate_data, &err);
+  isolate_ = Dart_CreateIsolate(NULL, NULL, buffer, NULL, NULL, &err);
   EXPECT(isolate_ != NULL);
   free(err);
   return isolate_;
@@ -520,6 +519,9 @@
   const Snapshot* snapshot = Snapshot::SetupFromBuffer(isolate_snapshot_buffer);
   ASSERT(snapshot->kind() == Snapshot::kCore);
   benchmark->set_score(snapshot->length());
+
+  free(vm_isolate_snapshot_buffer);
+  free(isolate_snapshot_buffer);
 }
 
 
@@ -554,6 +556,9 @@
   const Snapshot* snapshot = Snapshot::SetupFromBuffer(isolate_snapshot_buffer);
   ASSERT(snapshot->kind() == Snapshot::kCore);
   benchmark->set_score(snapshot->length());
+
+  free(vm_isolate_snapshot_buffer);
+  free(isolate_snapshot_buffer);
 }
 
 
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index 1260f7c..725af06 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -366,6 +366,7 @@
   V(Mirrors_evalInLibraryWithPrivateKey, 2)                                    \
   V(Mirrors_makeLocalClassMirror, 1)                                           \
   V(Mirrors_makeLocalTypeMirror, 1)                                            \
+  V(Mirrors_instantiateGenericType, 2)                                         \
   V(Mirrors_mangleName, 2)                                                     \
   V(MirrorReference_equals, 2)                                                 \
   V(MirrorSystem_libraries, 0)                                                 \
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index f239661..be24a41 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -2518,8 +2518,9 @@
     cls.SetFunctions(functions);
   }
   // Every class should have at least a constructor, unless it is a top level
-  // class or a typedef class.
-  ASSERT(cls.IsTopLevel() || cls.IsTypedefClass() ||
+  // class or a typedef class. The Kernel frontend does not create an implicit
+  // constructor for abstract classes.
+  ASSERT(cls.IsTopLevel() || cls.IsTypedefClass() || cls.is_abstract() ||
          (Array::Handle(cls.functions()).Length() > 0));
   // Resolve and finalize all member types.
   ResolveAndFinalizeMemberTypes(cls);
diff --git a/runtime/vm/compiler_test.cc b/runtime/vm/compiler_test.cc
index 5225c53..6e44b6c 100644
--- a/runtime/vm/compiler_test.cc
+++ b/runtime/vm/compiler_test.cc
@@ -102,10 +102,13 @@
   ASSERT(isolate->background_compiler() != NULL);
   isolate->background_compiler()->CompileOptimized(func);
   Monitor* m = new Monitor();
-  MonitorLocker ml(m);
-  while (!func.HasOptimizedCode()) {
-    ml.WaitWithSafepointCheck(thread, 1);
+  {
+    MonitorLocker ml(m);
+    while (!func.HasOptimizedCode()) {
+      ml.WaitWithSafepointCheck(thread, 1);
+    }
   }
+  delete m;
   BackgroundCompiler::Stop(isolate);
 }
 
diff --git a/runtime/vm/kernel.cc b/runtime/vm/kernel.cc
index f30e100..48dcbde 100644
--- a/runtime/vm/kernel.cc
+++ b/runtime/vm/kernel.cc
@@ -752,20 +752,6 @@
 }
 
 
-BlockExpression::~BlockExpression() {}
-
-
-void BlockExpression::AcceptExpressionVisitor(ExpressionVisitor* visitor) {
-  visitor->VisitBlockExpression(this);
-}
-
-
-void BlockExpression::VisitChildren(Visitor* visitor) {
-  visitor->VisitBlock(body());
-  value()->AcceptExpressionVisitor(visitor);
-}
-
-
 Statement::~Statement() {}
 
 
diff --git a/runtime/vm/kernel.h b/runtime/vm/kernel.h
index 998bc5e..ea04b73 100644
--- a/runtime/vm/kernel.h
+++ b/runtime/vm/kernel.h
@@ -79,7 +79,6 @@
   M(AwaitExpression)                                                           \
   M(FunctionExpression)                                                        \
   M(Let)                                                                       \
-  M(BlockExpression)                                                           \
   M(Statement)                                                                 \
   M(InvalidStatement)                                                          \
   M(ExpressionStatement)                                                       \
@@ -489,6 +488,7 @@
   intptr_t source_uri_index() { return source_uri_index_; }
   bool is_abstract() { return is_abstract_; }
   List<Expression>& annotations() { return annotations_; }
+  TokenPosition position() { return position_; }
 
   virtual List<TypeParameter>& type_parameters() = 0;
   virtual List<InterfaceType>& implemented_classes() = 0;
@@ -497,7 +497,7 @@
   virtual List<Procedure>& procedures() = 0;
 
  protected:
-  Class() : is_abstract_(false) {}
+  Class() : is_abstract_(false), position_(TokenPosition::kNoSource) {}
 
  private:
   template <typename T>
@@ -508,6 +508,7 @@
   intptr_t source_uri_index_;
   bool is_abstract_;
   List<Expression> annotations_;
+  TokenPosition position_;
 
   DISALLOW_COPY_AND_ASSIGN(Class);
 };
@@ -608,9 +609,13 @@
   TreeNode* parent() { return parent_; }
   Name* name() { return name_; }
   List<Expression>& annotations() { return annotations_; }
+  TokenPosition position() { return position_; }
+  TokenPosition end_position() { return end_position_; }
 
  protected:
-  Member() {}
+  Member()
+      : position_(TokenPosition::kNoSource),
+        end_position_(TokenPosition::kNoSource) {}
 
   template <typename T>
   friend class List;
@@ -618,6 +623,8 @@
   Ref<TreeNode> parent_;
   Child<Name> name_;
   List<Expression> annotations_;
+  TokenPosition position_;
+  TokenPosition end_position_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(Member);
@@ -651,10 +658,9 @@
   DartType* type() { return type_; }
   InferredValue* inferred_value() { return inferred_value_; }
   Expression* initializer() { return initializer_; }
-  TokenPosition position() { return position_; }
 
  private:
-  Field() : position_(TokenPosition::kNoSource) {}
+  Field() {}
 
   template <typename T>
   friend class List;
@@ -664,7 +670,6 @@
   Child<DartType> type_;
   Child<InferredValue> inferred_value_;
   Child<Expression> initializer_;
-  TokenPosition position_;
 
   DISALLOW_COPY_AND_ASSIGN(Field);
 };
@@ -920,6 +925,7 @@
   virtual void VisitChildren(Visitor* visitor);
 
   AsyncMarker async_marker() { return async_marker_; }
+  bool debuggable() { return debuggable_; }
   TypeParameterList& type_parameters() { return type_parameters_; }
   int required_parameter_count() { return required_parameter_count_; }
   List<VariableDeclaration>& positional_parameters() {
@@ -929,11 +935,16 @@
   DartType* return_type() { return return_type_; }
   InferredValue* inferred_return_value() { return inferred_return_value_; }
   Statement* body() { return body_; }
+  TokenPosition position() { return position_; }
+  TokenPosition end_position() { return end_position_; }
 
  private:
-  FunctionNode() {}
+  FunctionNode()
+      : position_(TokenPosition::kNoSource),
+        end_position_(TokenPosition::kNoSource) {}
 
   AsyncMarker async_marker_;
+  bool debuggable_;
   TypeParameterList type_parameters_;
   int required_parameter_count_;
   List<VariableDeclaration> positional_parameters_;
@@ -941,6 +952,8 @@
   Child<DartType> return_type_;
   Child<InferredValue> inferred_return_value_;
   Child<Statement> body_;
+  TokenPosition position_;
+  TokenPosition end_position_;
 
   DISALLOW_COPY_AND_ASSIGN(FunctionNode);
 };
@@ -1894,42 +1907,23 @@
 
   VariableDeclaration* variable() { return variable_; }
   Expression* body() { return body_; }
+  TokenPosition position() { return position_; }
+  TokenPosition end_position() { return end_position_; }
 
  private:
-  Let() {}
+  Let()
+      : position_(TokenPosition::kNoSource),
+        end_position_(TokenPosition::kNoSource) {}
 
   Child<VariableDeclaration> variable_;
   Child<Expression> body_;
+  TokenPosition position_;
+  TokenPosition end_position_;
 
   DISALLOW_COPY_AND_ASSIGN(Let);
 };
 
 
-class BlockExpression : public Expression {
- public:
-  static BlockExpression* ReadFrom(Reader* reader);
-  virtual void WriteTo(Writer* writer);
-
-  virtual ~BlockExpression();
-
-  DEFINE_CASTING_OPERATIONS(BlockExpression);
-
-  virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor);
-  virtual void VisitChildren(Visitor* visitor);
-
-  Block* body() { return body_; }
-  Expression* value() { return value_; }
-
- private:
-  BlockExpression() {}
-
-  Child<Block> body_;
-  Child<Expression> value_;
-
-  DISALLOW_COPY_AND_ASSIGN(BlockExpression);
-};
-
-
 class Statement : public TreeNode {
  public:
   static Statement* ReadFrom(Reader* reader);
@@ -1941,9 +1935,11 @@
 
   virtual void AcceptTreeVisitor(TreeVisitor* visitor);
   virtual void AcceptStatementVisitor(StatementVisitor* visitor) = 0;
+  TokenPosition position() { return position_; }
 
  protected:
-  Statement() {}
+  Statement() : position_(TokenPosition::kNoSource) {}
+  TokenPosition position_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(Statement);
@@ -2941,9 +2937,6 @@
     VisitDefaultBasicLiteral(node);
   }
   virtual void VisitLet(Let* node) { VisitDefaultExpression(node); }
-  virtual void VisitBlockExpression(BlockExpression* node) {
-    VisitDefaultExpression(node);
-  }
 };
 
 
diff --git a/runtime/vm/kernel_binary.cc b/runtime/vm/kernel_binary.cc
index f204854..4cdc004 100644
--- a/runtime/vm/kernel_binary.cc
+++ b/runtime/vm/kernel_binary.cc
@@ -94,7 +94,6 @@
   kAwaitExpression = 51,
   kFunctionExpression = 52,
   kLet = 53,
-  kBlockExpression = 54,
 
   kPositiveIntLiteral = 55,
   kNegativeIntLiteral = 56,
@@ -919,6 +918,7 @@
 Class* Class::ReadFrom(Reader* reader) {
   TRACE_READ_OFFSET();
 
+  position_ = reader->ReadPosition();
   is_abstract_ = reader->ReadBool();
   name_ = Reference::ReadStringFrom(reader);
   source_uri_index_ = reader->ReadUInt();
@@ -930,6 +930,7 @@
 
 void Class::WriteTo(Writer* writer) {
   TRACE_WRITE_OFFSET();
+  writer->WritePosition(position_);
   writer->WriteBool(is_abstract_);
   name_->WriteTo(writer);
   writer->WriteUInt(source_uri_index_);
@@ -1167,6 +1168,7 @@
   ASSERT(tag == kField);
 
   position_ = reader->ReadPosition();
+  end_position_ = reader->ReadPosition();
   flags_ = reader->ReadFlags();
   name_ = Name::ReadFrom(reader);
   source_uri_index_ = reader->ReadUInt();
@@ -1182,6 +1184,7 @@
   TRACE_WRITE_OFFSET();
   writer->WriteTag(kField);
   writer->WritePosition(position_);
+  writer->WritePosition(end_position_);
   writer->WriteFlags(flags_);
   name_->WriteTo(writer);
   writer->WriteUInt(source_uri_index_);
@@ -1198,6 +1201,8 @@
   ASSERT(tag == kConstructor);
 
   VariableScope<ReaderHelper> parameters(reader->helper());
+  position_ = reader->ReadPosition();
+  end_position_ = reader->ReadPosition();
   flags_ = reader->ReadFlags();
   name_ = Name::ReadFrom(reader);
   annotations_.ReadFromStatic<Expression>(reader);
@@ -1211,6 +1216,8 @@
   TRACE_WRITE_OFFSET();
   writer->WriteTag(kConstructor);
 
+  writer->WritePosition(position_);
+  writer->WritePosition(end_position_);
   VariableScope<WriterHelper> parameters(writer->helper());
   writer->WriteFlags(flags_);
   name_->WriteTo(writer);
@@ -1226,6 +1233,8 @@
   ASSERT(tag == kProcedure);
 
   VariableScope<ReaderHelper> parameters(reader->helper());
+  position_ = reader->ReadPosition();
+  end_position_ = reader->ReadPosition();
   kind_ = static_cast<ProcedureKind>(reader->ReadByte());
   flags_ = reader->ReadFlags();
   name_ = Name::ReadFrom(reader);
@@ -1240,6 +1249,8 @@
   TRACE_WRITE_OFFSET();
   writer->WriteTag(kProcedure);
 
+  writer->WritePosition(position_);
+  writer->WritePosition(end_position_);
   VariableScope<WriterHelper> parameters(writer->helper());
   writer->WriteByte(kind_);
   writer->WriteFlags(flags_);
@@ -1424,8 +1435,6 @@
       return FunctionExpression::ReadFrom(reader);
     case kLet:
       return Let::ReadFrom(reader);
-    case kBlockExpression:
-      return BlockExpression::ReadFrom(reader);
     case kBigIntLiteral:
       return BigintLiteral::ReadFrom(reader);
     case kStringLiteral:
@@ -1466,6 +1475,7 @@
 VariableGet* VariableGet::ReadFrom(Reader* reader) {
   TRACE_READ_OFFSET();
   VariableGet* get = new VariableGet();
+  get->position_ = reader->ReadPosition();
   get->variable_ = reader->helper()->variables().Lookup(reader->ReadUInt());
   reader->ReadOptional<DartType>();  // Unused promoted type.
   return get;
@@ -1475,6 +1485,7 @@
 VariableGet* VariableGet::ReadFrom(Reader* reader, uint8_t payload) {
   TRACE_READ_OFFSET();
   VariableGet* get = new VariableGet();
+  get->position_ = reader->ReadPosition();
   get->variable_ = reader->helper()->variables().Lookup(payload);
   return get;
 }
@@ -1485,8 +1496,10 @@
   int index = writer->helper()->variables().Lookup(variable_);
   if ((index & kSpecializedPayloadMask) == index) {
     writer->WriteTag(kSpecializedVariableGet, static_cast<uint8_t>(index));
+    writer->WritePosition(position_);
   } else {
     writer->WriteTag(kVariableGet);
+    writer->WritePosition(position_);
     writer->WriteUInt(index);
     writer->WriteOptional<DartType>(NULL);
   }
@@ -1496,6 +1509,7 @@
 VariableSet* VariableSet::ReadFrom(Reader* reader) {
   TRACE_READ_OFFSET();
   VariableSet* set = new VariableSet();
+  set->position_ = reader->ReadPosition();
   set->variable_ = reader->helper()->variables().Lookup(reader->ReadUInt());
   set->expression_ = Expression::ReadFrom(reader);
   return set;
@@ -1506,6 +1520,7 @@
   TRACE_READ_OFFSET();
   VariableSet* set = new VariableSet();
   set->variable_ = reader->helper()->variables().Lookup(payload);
+  set->position_ = reader->ReadPosition();
   set->expression_ = Expression::ReadFrom(reader);
   return set;
 }
@@ -1516,8 +1531,10 @@
   int index = writer->helper()->variables().Lookup(variable_);
   if ((index & kSpecializedPayloadMask) == index) {
     writer->WriteTag(kSpecializedVariableSet, static_cast<uint8_t>(index));
+    writer->WritePosition(position_);
   } else {
     writer->WriteTag(kVariableSet);
+    writer->WritePosition(position_);
     writer->WriteUInt(index);
   }
   expression_->WriteTo(writer);
@@ -1813,6 +1830,7 @@
 StringConcatenation* StringConcatenation::ReadFrom(Reader* reader) {
   TRACE_READ_OFFSET();
   StringConcatenation* concat = new StringConcatenation();
+  concat->position_ = reader->ReadPosition();
   concat->expressions_.ReadFromStatic<Expression>(reader);
   return concat;
 }
@@ -1821,6 +1839,7 @@
 void StringConcatenation::WriteTo(Writer* writer) {
   TRACE_WRITE_OFFSET();
   writer->WriteTag(kStringConcatenation);
+  writer->WritePosition(position_);
   expressions_.WriteTo(writer);
 }
 
@@ -1828,6 +1847,7 @@
 IsExpression* IsExpression::ReadFrom(Reader* reader) {
   TRACE_READ_OFFSET();
   IsExpression* expr = new IsExpression();
+  expr->position_ = reader->ReadPosition();
   expr->operand_ = Expression::ReadFrom(reader);
   expr->type_ = DartType::ReadFrom(reader);
   return expr;
@@ -1837,6 +1857,7 @@
 void IsExpression::WriteTo(Writer* writer) {
   TRACE_WRITE_OFFSET();
   writer->WriteTag(kIsExpression);
+  writer->WritePosition(position_);
   operand_->WriteTo(writer);
   type_->WriteTo(writer);
 }
@@ -2048,6 +2069,7 @@
   TRACE_READ_OFFSET();
   MapLiteral* literal = new MapLiteral();
   literal->is_const_ = is_const;
+  literal->position_ = reader->ReadPosition();
   literal->key_type_ = DartType::ReadFrom(reader);
   literal->value_type_ = DartType::ReadFrom(reader);
   literal->entries_.ReadFromStatic<MapEntry>(reader);
@@ -2058,6 +2080,7 @@
 void MapLiteral::WriteTo(Writer* writer) {
   TRACE_WRITE_OFFSET();
   writer->WriteTag(is_const_ ? kConstMapLiteral : kMapLiteral);
+  writer->WritePosition(position_);
   key_type_->WriteTo(writer);
   value_type_->WriteTo(writer);
   entries_.WriteTo(writer);
@@ -2130,23 +2153,6 @@
 }
 
 
-BlockExpression* BlockExpression::ReadFrom(Reader* reader) {
-  TRACE_READ_OFFSET();
-  BlockExpression* be = new BlockExpression();
-  be->body_ = Block::ReadFromImpl(reader);
-  be->value_ = Expression::ReadFrom(reader);
-  return be;
-}
-
-
-void BlockExpression::WriteTo(Writer* writer) {
-  TRACE_WRITE_OFFSET();
-  writer->WriteTag(kBlockExpression);
-  body_->WriteToImpl(writer);
-  value_->WriteTo(writer);
-}
-
-
 Statement* Statement::ReadFrom(Reader* reader) {
   TRACE_READ_OFFSET();
   Tag tag = reader->ReadTag();
@@ -2476,6 +2482,7 @@
 ReturnStatement* ReturnStatement::ReadFrom(Reader* reader) {
   TRACE_READ_OFFSET();
   ReturnStatement* ret = new ReturnStatement();
+  ret->position_ = reader->ReadPosition();
   ret->expression_ = reader->ReadOptional<Expression>();
   return ret;
 }
@@ -2484,6 +2491,7 @@
 void ReturnStatement::WriteTo(Writer* writer) {
   TRACE_WRITE_OFFSET();
   writer->WriteTag(kReturnStatement);
+  writer->WritePosition(position_);
   writer->WriteOptional<Expression>(expression_);
 }
 
@@ -2551,6 +2559,7 @@
 YieldStatement* YieldStatement::ReadFrom(Reader* reader) {
   TRACE_READ_OFFSET();
   YieldStatement* stmt = new YieldStatement();
+  stmt->position_ = reader->ReadPosition();
   stmt->flags_ = reader->ReadByte();
   stmt->expression_ = Expression::ReadFrom(reader);
   return stmt;
@@ -2560,6 +2569,7 @@
 void YieldStatement::WriteTo(Writer* writer) {
   TRACE_WRITE_OFFSET();
   writer->WriteTag(kYieldStatement);
+  writer->WritePosition(position_);
   writer->WriteByte(flags_);
   expression_->WriteTo(writer);
 }
@@ -2576,6 +2586,7 @@
 VariableDeclaration* VariableDeclaration::ReadFromImpl(Reader* reader) {
   TRACE_READ_OFFSET();
   VariableDeclaration* decl = new VariableDeclaration();
+  decl->position_ = reader->ReadPosition();
   decl->flags_ = reader->ReadFlags();
   decl->name_ = Reference::ReadStringFrom(reader);
   decl->type_ = DartType::ReadFrom(reader);
@@ -2595,6 +2606,7 @@
 
 void VariableDeclaration::WriteToImpl(Writer* writer) {
   TRACE_WRITE_OFFSET();
+  writer->WritePosition(position_);
   writer->WriteFlags(flags_);
   name_->WriteTo(writer);
   type_->WriteTo(writer);
@@ -2607,6 +2619,7 @@
 FunctionDeclaration* FunctionDeclaration::ReadFrom(Reader* reader) {
   TRACE_READ_OFFSET();
   FunctionDeclaration* decl = new FunctionDeclaration();
+  decl->position_ = reader->ReadPosition();
   decl->variable_ = VariableDeclaration::ReadFromImpl(reader);
   VariableScope<ReaderHelper> parameters(reader->helper());
   decl->function_ = FunctionNode::ReadFrom(reader);
@@ -2617,6 +2630,7 @@
 void FunctionDeclaration::WriteTo(Writer* writer) {
   TRACE_WRITE_OFFSET();
   writer->WriteTag(kFunctionDeclaration);
+  writer->WritePosition(position_);
   variable_->WriteToImpl(writer);
   VariableScope<WriterHelper> parameters(writer->helper());
   function_->WriteTo(writer);
@@ -2869,8 +2883,11 @@
   TypeParameterScope<ReaderHelper> scope(reader->helper());
 
   FunctionNode* function = new FunctionNode();
+  function->position_ = reader->ReadPosition();
+  function->end_position_ = reader->ReadPosition();
   function->async_marker_ =
       static_cast<FunctionNode::AsyncMarker>(reader->ReadByte());
+  function->debuggable_ = reader->ReadByte() == 1 ? true : false;
   function->type_parameters().ReadFrom(reader);
   function->required_parameter_count_ = reader->ReadUInt();
   function->positional_parameters().ReadFromStatic<VariableDeclarationImpl>(
@@ -2891,7 +2908,10 @@
   TRACE_WRITE_OFFSET();
   TypeParameterScope<WriterHelper> scope(writer->helper());
 
+  writer->WritePosition(position_);
+  writer->WritePosition(end_position_);
   writer->WriteByte(static_cast<uint8_t>(async_marker_));
+  writer->WriteByte(debuggable_ ? 1 : 0);
   type_parameters().WriteTo(writer);
   writer->WriteUInt(required_parameter_count());
   positional_parameters().WriteToStatic<VariableDeclarationImpl>(writer);
diff --git a/runtime/vm/kernel_reader.cc b/runtime/vm/kernel_reader.cc
index 5b76f17..8a23a7d 100644
--- a/runtime/vm/kernel_reader.cc
+++ b/runtime/vm/kernel_reader.cc
@@ -23,9 +23,9 @@
 
 class SimpleExpressionConverter : public ExpressionVisitor {
  public:
-  SimpleExpressionConverter(Thread* thread, Zone* zone)
-      : translation_helper_(thread, zone, NULL),
-        zone_(zone),
+  explicit SimpleExpressionConverter(Thread* thread)
+      : translation_helper_(thread),
+        zone_(translation_helper_.zone()),
         is_simple_(false),
         simple_value_(NULL) {}
 
@@ -99,7 +99,7 @@
       zone_(thread_->zone()),
       isolate_(thread_->isolate()),
       scripts_(Array::ZoneHandle(zone_)),
-      translation_helper_(this, thread_, zone_, isolate_),
+      translation_helper_(this, thread_),
       type_translator_(&translation_helper_,
                        &active_class_,
                        /*finalize=*/false) {
@@ -473,7 +473,7 @@
     // Static fields with initializers either have the static value set to the
     // initializer value if it is simple enough or else set to an uninitialized
     // sentinel.
-    SimpleExpressionConverter converter(H.thread(), Z);
+    SimpleExpressionConverter converter(H.thread());
     if (converter.IsSimple(kernel_field->initializer())) {
       // We do not need a getter.
       field.SetStaticValue(converter.SimpleValue(), true);
diff --git a/runtime/vm/kernel_reader.h b/runtime/vm/kernel_reader.h
index a4c739d..a483d38 100644
--- a/runtime/vm/kernel_reader.h
+++ b/runtime/vm/kernel_reader.h
@@ -19,11 +19,8 @@
 
 class BuildingTranslationHelper : public TranslationHelper {
  public:
-  BuildingTranslationHelper(KernelReader* reader,
-                            dart::Thread* thread,
-                            dart::Zone* zone,
-                            Isolate* isolate)
-      : TranslationHelper(thread, zone, isolate), reader_(reader) {}
+  BuildingTranslationHelper(KernelReader* reader, dart::Thread* thread)
+      : TranslationHelper(thread), reader_(reader) {}
   virtual ~BuildingTranslationHelper() {}
 
   virtual RawLibrary* LookupLibraryByKernelLibrary(Library* library);
diff --git a/runtime/vm/kernel_to_il.cc b/runtime/vm/kernel_to_il.cc
index 98f83f8..9745cd3 100644
--- a/runtime/vm/kernel_to_il.cc
+++ b/runtime/vm/kernel_to_il.cc
@@ -1319,7 +1319,7 @@
   if (setjmp(*jump.Set()) == 0) {
     return EvaluateExpression(expression);
   } else {
-    Thread* thread = Thread::Current();
+    Thread* thread = H.thread();
     Error& error = Error::Handle(Z);
     error = thread->sticky_error();
     thread->clear_sticky_error();
@@ -1770,6 +1770,28 @@
 }
 
 
+void ConstantEvaluator::VisitPropertyGet(PropertyGet* node) {
+  const size_t kLengthLen = strlen("length");
+
+  String* string = node->name()->string();
+  if (string->size() == kLengthLen &&
+      memcmp(string->buffer(), "length", kLengthLen) == 0) {
+    node->receiver()->AcceptExpressionVisitor(this);
+    if (result_.IsString()) {
+      const dart::String& str =
+          dart::String::Handle(Z, dart::String::RawCast(result_.raw()));
+      result_ = Integer::New(str.Length());
+    } else {
+      H.ReportError(
+          "Constant expressions can only call "
+          "'length' on string constants.");
+    }
+  } else {
+    VisitDefaultExpression(node);
+  }
+}
+
+
 const TypeArguments* ConstantEvaluator::TranslateTypeArguments(
     const Function& target,
     dart::Class* target_klass,
@@ -1850,10 +1872,8 @@
     InlineExitCollector* exit_collector,
     intptr_t osr_id,
     intptr_t first_block_id)
-    : zone_(Thread::Current()->zone()),
-      translation_helper_(Thread::Current(),
-                          zone_,
-                          Thread::Current()->isolate()),
+    : translation_helper_(Thread::Current()),
+      zone_(translation_helper_.zone()),
       node_(node),
       parsed_function_(parsed_function),
       osr_id_(osr_id),
@@ -2048,6 +2068,14 @@
 }
 
 
+Fragment FlowGraphBuilder::InstantiateType(const AbstractType& type) {
+  InstantiateTypeInstr* instr = new (Z) InstantiateTypeInstr(
+      TokenPosition::kNoSource, type, *active_class_.klass, Pop());
+  Push(instr);
+  return Fragment(instr);
+}
+
+
 Fragment FlowGraphBuilder::InstantiateTypeArguments(
     const TypeArguments& type_arguments) {
   InstantiateTypeArgumentsInstr* instr = new (Z) InstantiateTypeArgumentsInstr(
@@ -2192,7 +2220,7 @@
   CatchBlockEntryInstr* entry = new (Z) CatchBlockEntryInstr(
       AllocateBlockId(), CurrentTryIndex(), graph_entry_, handler_types,
       handler_index, *CurrentException(), *CurrentStackTrace(),
-      /* needs_stacktrace = */ true, Thread::Current()->GetNextDeoptId(),
+      /* needs_stacktrace = */ true, H.thread()->GetNextDeoptId(),
       should_restore_closure_context);
   graph_entry_->AddCatchEntry(entry);
   Fragment instructions(entry);
@@ -2562,11 +2590,9 @@
   if (FLAG_use_field_guards) {
     LocalVariable* store_expression = MakeTemporary();
     instructions += LoadLocal(store_expression);
-    instructions +=
-        GuardFieldClass(field_clone, Thread::Current()->GetNextDeoptId());
+    instructions += GuardFieldClass(field_clone, H.thread()->GetNextDeoptId());
     instructions += LoadLocal(store_expression);
-    instructions +=
-        GuardFieldLength(field_clone, Thread::Current()->GetNextDeoptId());
+    instructions += GuardFieldLength(field_clone, H.thread()->GetNextDeoptId());
   }
   instructions += StoreInstanceField(field_clone);
   return instructions;
@@ -4208,7 +4234,14 @@
   const AbstractType& type = T.TranslateType(node->type());
   if (type.IsMalformed()) H.ReportError("Malformed type literal");
 
-  fragment_ = Constant(type);
+  Fragment instructions;
+  if (type.IsInstantiated()) {
+    instructions += Constant(type);
+  } else {
+    instructions += LoadInstantiatorTypeArguments();
+    instructions += InstantiateType(type);
+  }
+  fragment_ = instructions;
 }
 
 
@@ -4253,12 +4286,7 @@
       fragment_ = StaticCall(node->position(), target, 0);
     } else if (procedure->kind() == Procedure::kMethod) {
       ASSERT(procedure->IsStatic());
-      Function& closure_function =
-          Function::ZoneHandle(Z, target.ImplicitClosureFunction());
-      closure_function.set_kernel_function(target.kernel_function());
-      const Instance& closure =
-          Instance::ZoneHandle(Z, closure_function.ImplicitStaticClosure());
-      fragment_ = Constant(closure);
+      fragment_ = Constant(constant_evaluator_.EvaluateExpression(node));
     } else {
       UNIMPLEMENTED();
     }
@@ -4548,26 +4576,21 @@
     const TypeArguments& type_arguments = T.TranslateInstantiatedTypeArguments(
         klass, kernel_type_arguments.raw_array(),
         kernel_type_arguments.length());
+    if (!klass.IsGeneric()) {
+      Type& type = Type::ZoneHandle(Z, T.ReceiverType(klass).raw());
 
-    if (type_arguments.IsNull() || type_arguments.IsInstantiated()) {
-      instructions += TranslateInstantiatedTypeArguments(type_arguments);
+      // TODO(27590): Can we move this code into [ReceiverType]?
+      type ^= ClassFinalizer::FinalizeType(*active_class_.klass, type,
+                                           ClassFinalizer::kFinalize);
+      ASSERT(!type.IsMalformedOrMalbounded());
+
+      TypeArguments& canonicalized_type_arguments =
+          TypeArguments::ZoneHandle(Z, type.arguments());
+      canonicalized_type_arguments =
+          canonicalized_type_arguments.Canonicalize();
+      instructions += Constant(canonicalized_type_arguments);
     } else {
-      if (!klass.IsGeneric()) {
-        Type& type = Type::ZoneHandle(Z, T.ReceiverType(klass).raw());
-
-        // TODO(27590): Can we move this code into [ReceiverType]?
-        type ^= ClassFinalizer::FinalizeType(*active_class_.klass, type,
-                                             ClassFinalizer::kFinalize);
-        ASSERT(!type.IsMalformedOrMalbounded());
-
-        TypeArguments& canonicalized_type_arguments =
-            TypeArguments::ZoneHandle(Z, type.arguments());
-        canonicalized_type_arguments =
-            canonicalized_type_arguments.Canonicalize();
-        instructions += Constant(canonicalized_type_arguments);
-      } else {
-        instructions += TranslateInstantiatedTypeArguments(type_arguments);
-      }
+      instructions += TranslateInstantiatedTypeArguments(type_arguments);
     }
 
     instructions += PushArgument();
@@ -4692,12 +4715,13 @@
   then_fragment += TranslateExpression(node->then());
   then_fragment += StoreLocal(parsed_function_->expression_temp_var());
   then_fragment += Drop();
-
   ASSERT(stack_ == top);
+
   Fragment otherwise_fragment(otherwise_entry);
   otherwise_fragment += TranslateExpression(node->otherwise());
   otherwise_fragment += StoreLocal(parsed_function_->expression_temp_var());
   otherwise_fragment += Drop();
+  ASSERT(stack_ == top);
 
   JoinEntryInstr* join = BuildJoinEntry();
   then_fragment += Goto(join);
@@ -4910,13 +4934,6 @@
 }
 
 
-void FlowGraphBuilder::VisitBlockExpression(BlockExpression* node) {
-  Fragment instructions = TranslateStatement(node->body());
-  instructions += TranslateExpression(node->value());
-  fragment_ = instructions;
-}
-
-
 Fragment FlowGraphBuilder::TranslateArguments(Arguments* node,
                                               Array* argument_names) {
   Fragment instructions;
diff --git a/runtime/vm/kernel_to_il.h b/runtime/vm/kernel_to_il.h
index b3cc174..9a7a71a 100644
--- a/runtime/vm/kernel_to_il.h
+++ b/runtime/vm/kernel_to_il.h
@@ -188,12 +188,12 @@
 
 class TranslationHelper {
  public:
-  TranslationHelper(dart::Thread* thread, dart::Zone* zone, Isolate* isolate)
+  explicit TranslationHelper(dart::Thread* thread)
       : thread_(thread),
-        zone_(zone),
-        isolate_(isolate),
-        allocation_space_(thread_->IsMutatorThread() ? Heap::kNew
-                                                     : Heap::kOld) {}
+        zone_(thread->zone()),
+        isolate_(thread->isolate()),
+        allocation_space_(thread->IsMutatorThread() ? Heap::kNew : Heap::kOld) {
+  }
   virtual ~TranslationHelper() {}
 
   Thread* thread() { return thread_; }
@@ -414,6 +414,7 @@
   virtual void VisitConditionalExpression(ConditionalExpression* node);
   virtual void VisitLogicalExpression(LogicalExpression* node);
   virtual void VisitNot(Not* node);
+  virtual void VisitPropertyGet(PropertyGet* node);
 
  private:
   // This will translate type arguments form [kernel_arguments].  If no type
@@ -519,8 +520,8 @@
       : result_(NULL),
         parsed_function_(parsed_function),
         node_(node),
-        zone_(Thread::Current()->zone()),
-        translation_helper_(Thread::Current(), zone_, Isolate::Current()),
+        translation_helper_(Thread::Current()),
+        zone_(translation_helper_.zone()),
         type_translator_(&translation_helper_,
                          &active_class_,
                          /*finalize=*/true),
@@ -615,8 +616,8 @@
 
   ActiveClass active_class_;
 
-  Zone* zone_;
   TranslationHelper translation_helper_;
+  Zone* zone_;
   DartTypeTranslator type_translator_;
 
   FunctionNode* current_function_node_;
@@ -628,7 +629,7 @@
 };
 
 
-class FlowGraphBuilder : public TreeVisitor {
+class FlowGraphBuilder : public ExpressionVisitor, public StatementVisitor {
  public:
   FlowGraphBuilder(TreeNode* node,
                    ParsedFunction* parsed_function,
@@ -640,7 +641,8 @@
 
   FlowGraph* BuildGraph();
 
-  virtual void VisitDefaultTreeNode(TreeNode* node) { UNREACHABLE(); }
+  virtual void VisitDefaultExpression(Expression* node) { UNREACHABLE(); }
+  virtual void VisitDefaultStatement(Statement* node) { UNREACHABLE(); }
 
   virtual void VisitInvalidExpression(InvalidExpression* node);
   virtual void VisitNullLiteral(NullLiteral* node);
@@ -676,7 +678,6 @@
   virtual void VisitLet(Let* node);
   virtual void VisitThrow(Throw* node);
   virtual void VisitRethrow(Rethrow* node);
-  virtual void VisitBlockExpression(BlockExpression* node);
 
   virtual void VisitInvalidStatement(InvalidStatement* node);
   virtual void VisitEmptyStatement(EmptyStatement* node);
@@ -744,6 +745,7 @@
   Fragment PopContext();
 
   Fragment LoadInstantiatorTypeArguments();
+  Fragment InstantiateType(const AbstractType& type);
   Fragment InstantiateTypeArguments(const TypeArguments& type_arguments);
   Fragment TranslateInstantiatedTypeArguments(
       const TypeArguments& type_arguments);
@@ -854,8 +856,8 @@
 
   void InlineBailout(const char* reason);
 
-  Zone* zone_;
   TranslationHelper translation_helper_;
+  Zone* zone_;
 
   // The node we are currently compiling (e.g. FunctionNode, Constructor,
   // Field)
diff --git a/runtime/vm/message_handler_test.cc b/runtime/vm/message_handler_test.cc
index fedb823..0e636d7 100644
--- a/runtime/vm/message_handler_test.cc
+++ b/runtime/vm/message_handler_test.cc
@@ -405,6 +405,7 @@
   handler_peer.decrement_live_ports();
   EXPECT(!handler.HasLivePorts());
   PortMap::ClosePorts(&handler);
+  delete[] ports;
 }
 
 }  // namespace dart
diff --git a/runtime/vm/native_api_impl.cc b/runtime/vm/native_api_impl.cc
index 08a8daa..4729375 100644
--- a/runtime/vm/native_api_impl.cc
+++ b/runtime/vm/native_api_impl.cc
@@ -16,7 +16,9 @@
 
 // --- Message sending/receiving from native code ---
 
-static uint8_t* allocator(uint8_t* ptr, intptr_t old_size, intptr_t new_size) {
+static uint8_t* malloc_allocator(uint8_t* ptr,
+                                 intptr_t old_size,
+                                 intptr_t new_size) {
   void* new_ptr = realloc(reinterpret_cast<void*>(ptr), new_size);
   return reinterpret_cast<uint8_t*>(new_ptr);
 }
@@ -47,10 +49,13 @@
 
 static bool PostCObjectHelper(Dart_Port port_id, Dart_CObject* message) {
   uint8_t* buffer = NULL;
-  ApiMessageWriter writer(&buffer, allocator);
+  ApiMessageWriter writer(&buffer, malloc_allocator);
   bool success = writer.WriteCMessage(message);
 
-  if (!success) return success;
+  if (!success) {
+    free(buffer);
+    return success;
+  }
 
   // Post the message at the given port.
   return PortMap::PostMessage(new Message(
diff --git a/runtime/vm/parser_test.cc b/runtime/vm/parser_test.cc
index ece6a9a..a4f3ce2 100644
--- a/runtime/vm/parser_test.cc
+++ b/runtime/vm/parser_test.cc
@@ -179,7 +179,7 @@
 #ifndef PRODUCT
 
 
-static const char* saved_vars = NULL;
+static char* saved_vars = NULL;
 
 
 static char* SkipIndex(const char* input) {
@@ -218,7 +218,7 @@
   DebuggerStackTrace* stack = Isolate::Current()->debugger()->StackTrace();
   intptr_t num_frames = stack->Length();
   const int kBufferLen = 2048;
-  char* buffer = new char[kBufferLen];
+  char* buffer = reinterpret_cast<char*>(malloc(kBufferLen));
   char* pos = buffer;
   LocalVarDescriptors& var_desc = LocalVarDescriptors::Handle();
   for (intptr_t i = 0; i < num_frames; i++) {
@@ -233,15 +233,16 @@
     delete[] var_str;
   }
   pos[0] = '\0';
+  if (saved_vars != NULL) {
+    free(saved_vars);
+  }
   saved_vars = buffer;
 }
 
 
 // Uses the debugger to pause the program and capture the variable
 // descriptors for all frames on the stack.
-static const char* CaptureVarsAtLine(Dart_Handle lib,
-                                     const char* entry,
-                                     int line) {
+static char* CaptureVarsAtLine(Dart_Handle lib, const char* entry, int line) {
   EXPECT(ClassFinalizer::ProcessPendingClasses());
   bool saved_flag = FLAG_show_invisible_frames;
   FLAG_show_invisible_frames = true;
@@ -249,7 +250,7 @@
   EXPECT_VALID(Dart_SetBreakpoint(NewString(TestCase::url()), line));
   saved_vars = NULL;
   EXPECT_VALID(Dart_Invoke(lib, NewString(entry), 0, NULL));
-  const char* tmp = saved_vars;
+  char* tmp = saved_vars;
   saved_vars = NULL;
   FLAG_show_invisible_frames = saved_flag;
   return tmp;
@@ -267,6 +268,7 @@
       "}\n";
   Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
   EXPECT_VALID(lib);
+  char* vars = CaptureVarsAtLine(lib, "main", 4);
   EXPECT_STREQ(
       // function f uses one ctx var at (0); doesn't save ctx.
       "main.f\n"
@@ -288,7 +290,8 @@
       " 1 ContextLevel  level=1   scope=2   begin=4   end=37\n"
       " 2 ContextVar    level=1   begin=10  end=37  name=value\n"
       " 3 StackVar      scope=2   begin=12  end=37  name=f\n",
-      CaptureVarsAtLine(lib, "main", 4));
+      vars);
+  free(vars);
 }
 
 
@@ -306,6 +309,7 @@
       "}\n";
   Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
   EXPECT_VALID(lib);
+  char* vars = CaptureVarsAtLine(lib, "a", 5);
   EXPECT_STREQ(
       // Innermost function uses captured variable 'value' from middle
       // function.
@@ -343,7 +347,8 @@
       " 0 CurrentCtx    scope=0   begin=0   end=0"
       "   name=:current_context_var\n"
       " 1 StackVar      scope=2   begin=6   end=46  name=b\n",
-      CaptureVarsAtLine(lib, "a", 5));
+      vars);
+  free(vars);
 }
 
 
@@ -366,6 +371,7 @@
   Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
   EXPECT_VALID(lib);
 
+  char* vars = CaptureVarsAtLine(lib, "a", 7);
   EXPECT_STREQ(
       // bb captures only value2 from aa.  No others.
       "a.b.aa.bb\n"
@@ -415,7 +421,8 @@
       " 1 ContextLevel  level=1   scope=2   begin=4   end=70\n"
       " 2 ContextVar    level=1   begin=10  end=70  name=value1\n"
       " 3 StackVar      scope=2   begin=12  end=70  name=b\n",
-      CaptureVarsAtLine(lib, "a", 7));
+      vars);
+  free(vars);
 }
 
 
@@ -447,6 +454,7 @@
       "}\n";
   Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
   EXPECT_VALID(lib);
+  char* vars = CaptureVarsAtLine(lib, "doIt", 12);
   EXPECT_STREQ(
       // This frame saves the entry context instead of chaining.  Good.
       "doIt.<anonymous closure>\n"
@@ -471,7 +479,8 @@
       " 0 CurrentCtx    scope=0   begin=0   end=0"
       "   name=:current_context_var\n"
       " 1 StackVar      scope=2   begin=35  end=77  name=x\n",
-      CaptureVarsAtLine(lib, "doIt", 12));
+      vars);
+  free(vars);
 }
 
 
@@ -493,6 +502,7 @@
       "}\n";
   Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
   EXPECT_VALID(lib);
+  char* vars = CaptureVarsAtLine(lib, "outer", 5);
   EXPECT_STREQ(
       // inner function captures variable value.  That's fine.
       "outer.inner\n"
@@ -515,7 +525,8 @@
       " 2 ContextLevel  level=1   scope=4   begin=20  end=50\n"
       " 3 ContextVar    level=1   begin=28  end=50  name=value\n"
       " 4 StackVar      scope=4   begin=30  end=50  name=inner\n",
-      CaptureVarsAtLine(lib, "outer", 5));
+      vars);
+  free(vars);
 }
 
 TEST_CASE(Parser_AllocateVariables_MiddleChain) {
@@ -537,6 +548,7 @@
       "}\n";
   Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
   EXPECT_VALID(lib);
+  char* vars = CaptureVarsAtLine(lib, "a", 10);
   EXPECT_STREQ(
       "a.b.c\n"
       " 0 ContextVar    level=0   begin=50  end=62  name=x\n"
@@ -568,7 +580,8 @@
       " 1 ContextLevel  level=1   scope=2   begin=3   end=79\n"
       " 2 ContextVar    level=1   begin=9   end=79  name=x\n"
       " 3 StackVar      scope=2   begin=11  end=79  name=b\n",
-      CaptureVarsAtLine(lib, "a", 10));
+      vars);
+  free(vars);
 }
 
 #endif  // !PRODUCT
diff --git a/runtime/vm/precompiler.cc b/runtime/vm/precompiler.cc
index 0dd3b18..57381a3 100644
--- a/runtime/vm/precompiler.cc
+++ b/runtime/vm/precompiler.cc
@@ -245,6 +245,7 @@
 
   if (!type.IsInstantiated()) return false;
   if (type.IsFunctionType()) return false;
+  if (type.IsDartFunctionType()) return false;
 
   Zone* zone = thread_->zone();
   const TypeArguments& type_arguments =
@@ -271,6 +272,11 @@
   Class& cls = Class::Handle(zone);
   AbstractType& cls_type = AbstractType::Handle(zone);
   for (intptr_t cid = kInstanceCid; cid < table->NumCids(); cid++) {
+    // Create local zone because deep hierarchies may allocate lots of handles
+    // within one iteration of this loop.
+    StackZone stack_zone(thread_);
+    HANDLESCOPE(thread_);
+
     if (!table->HasValidClassAt(cid)) continue;
     if (cid == kVoidCid) continue;
     if (cid == kDynamicCid) continue;
@@ -281,7 +287,7 @@
     if (cls.IsTopLevel()) continue;
 
     cls_type = cls.RareType();
-    if (cls_type.IsSubtypeOf(type, NULL, NULL, Heap::kOld)) {
+    if (cls_type.IsSubtypeOf(type, NULL, NULL, Heap::kNew)) {
       last_matching_cid = cid;
       if (*lower_limit == -1) {
         // Found beginning of range.
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index f43b12e..7423157 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -702,6 +702,7 @@
   friend class Object;
   friend class RawInstance;
   friend class RawInstructions;
+  friend class RawTypeArguments;
   friend class SnapshotReader;
   friend class InstanceSerializationCluster;
   friend class CidRewriteVisitor;
@@ -1701,6 +1702,7 @@
   int8_t type_state_;
 
   friend class CidRewriteVisitor;
+  friend class RawTypeArguments;
 };
 
 
diff --git a/runtime/vm/raw_object_snapshot.cc b/runtime/vm/raw_object_snapshot.cc
index 77f0576..95a71c1 100644
--- a/runtime/vm/raw_object_snapshot.cc
+++ b/runtime/vm/raw_object_snapshot.cc
@@ -504,7 +504,25 @@
   // Write out the individual types.
   intptr_t len = Smi::Value(ptr()->length_);
   for (intptr_t i = 0; i < len; i++) {
-    writer->WriteObjectImpl(ptr()->types()[i], kAsReference);
+    // The Dart VM reuses type argument lists across instances in order
+    // to reduce memory footprint, this can sometimes lead to a type from
+    // such a shared type argument list being sent over to another isolate.
+    // In such scenarios where it is not appropriate to send the types
+    // across (isolates spawned using spawnURI) we send them as dynamic.
+    if (!writer->can_send_any_object()) {
+      // Lookup the type class.
+      RawType* raw_type = Type::RawCast(ptr()->types()[i]);
+      RawSmi* raw_type_class_id = Smi::RawCast(raw_type->ptr()->type_class_id_);
+      RawClass* type_class =
+          writer->isolate()->class_table()->At(Smi::Value(raw_type_class_id));
+      if (!writer->AllowObjectsInDartLibrary(type_class->ptr()->library_)) {
+        writer->WriteVMIsolateObject(kDynamicType);
+      } else {
+        writer->WriteObjectImpl(ptr()->types()[i], kAsReference);
+      }
+    } else {
+      writer->WriteObjectImpl(ptr()->types()[i], kAsReference);
+    }
   }
 }
 
diff --git a/runtime/vm/service/service.md b/runtime/vm/service/service.md
index d372c79..b9cdf81 100644
--- a/runtime/vm/service/service.md
+++ b/runtime/vm/service/service.md
@@ -697,7 +697,8 @@
 
 ```
 Success resume(string isolateId,
-               StepOption step [optional])
+               StepOption step [optional],
+               int frameIndex [optional])
 ```
 
 The _resume_ RPC is used to resume execution of a paused isolate.
@@ -715,6 +716,12 @@
 Out | Single step until the current function exits
 Rewind | Immediately exit the top frame(s) without executing any code. Isolate will be paused at the call of the last exited function.
 
+The _frameIndex_ parameter is only used when the _step_ parameter is Rewind. It
+specifies the stack frame to rewind to. Stack frame 0 is the currently executing
+function, so _frameIndex_ must be at least 1.
+
+If the _frameIndex_ parameter is not provided, it defaults to 1.
+
 See [Success](#success), [StepOption](#StepOption).
 
 ### setExceptionPauseMode
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index 13757ec..b073188 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -1137,7 +1137,7 @@
       }
       if (newobj.raw() != objref->raw()) {
         ZoneGrowableArray<intptr_t>* patches = backref.patch_records();
-        ASSERT(newobj.IsCanonical());
+        ASSERT(newobj.IsNull() || newobj.IsCanonical());
         ASSERT(patches != NULL);
         // First we replace the back ref table with the canonical object.
         *objref = newobj.raw();
diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
index 79b5b1b..fec51a0 100644
--- a/runtime/vm/snapshot_test.cc
+++ b/runtime/vm/snapshot_test.cc
@@ -139,6 +139,8 @@
 
   // Check that the two messages are the same.
   CompareDartCObjects(root, new_root);
+
+  free(buffer);
 }
 
 
@@ -147,6 +149,7 @@
   ApiMessageWriter writer(&buffer, &malloc_allocator);
   const bool result = writer.WriteCMessage(root);
   EXPECT_EQ(false, result);
+  free(buffer);
 }
 
 
@@ -1653,6 +1656,7 @@
     EXPECT(isolate == NULL);
     EXPECT(error != NULL);
     EXPECT_SUBSTRING("got 'script', expected 'core'", error);
+    free(error);
   }
 
   {
diff --git a/runtime/vm/timeline_test.cc b/runtime/vm/timeline_test.cc
index 2266898..aa2972f 100644
--- a/runtime/vm/timeline_test.cc
+++ b/runtime/vm/timeline_test.cc
@@ -91,7 +91,7 @@
     event->Complete();
   }
 
-  static void Clear(TimelineEventEndlessRecorder* recorder) {
+  static void Clear(TimelineEventRecorder* recorder) {
     ASSERT(recorder != NULL);
     recorder->Clear();
   }
@@ -343,6 +343,8 @@
   EXPECT_EQ(0, recorder->CountFor(TimelineEvent::kAsyncEnd));
   event->Complete();
   EXPECT_EQ(1, recorder->CountFor(TimelineEvent::kAsyncEnd));
+
+  delete recorder;
 }
 
 
@@ -466,6 +468,9 @@
     EXPECT(LabelMatch(it.Next(), "F"));
     EXPECT(!it.HasNext());
   }
+
+  TimelineTestHelper::Clear(recorder);
+  delete recorder;
 }
 
 
@@ -502,6 +507,9 @@
   const char* alpha = strstr(js.ToCString(), "Alpha");
   const char* beta = strstr(js.ToCString(), "Beta");
   EXPECT(alpha < beta);
+
+  TimelineTestHelper::Clear(recorder);
+  delete recorder;
 }
 
 
@@ -674,6 +682,8 @@
     EXPECT_EQ(8, pauses.MaxExclusiveTime("a"));
   }
   TimelineTestHelper::Clear(recorder);
+
+  delete recorder;
 }
 
 
@@ -884,6 +894,8 @@
     EXPECT(pauses.has_error());
   }
   TimelineTestHelper::Clear(recorder);
+
+  delete recorder;
 }
 
 #endif  // !PRODUCT
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc
index c036981..ce50f4d 100644
--- a/runtime/vm/unit_test.cc
+++ b/runtime/vm/unit_test.cc
@@ -52,10 +52,9 @@
 
 
 Dart_Isolate TestCase::CreateIsolate(const uint8_t* buffer, const char* name) {
-  bin::IsolateData* isolate_data = new bin::IsolateData(name, NULL, NULL);
   char* err;
   Dart_Isolate isolate =
-      Dart_CreateIsolate(name, NULL, buffer, NULL, isolate_data, &err);
+      Dart_CreateIsolate(name, NULL, buffer, NULL, NULL, &err);
   if (isolate == NULL) {
     OS::Print("Creation of isolate failed '%s'\n", err);
     free(err);
diff --git a/sdk/lib/_blink/dartium/_blink_dartium.dart b/sdk/lib/_blink/dartium/_blink_dartium.dart
index bb80827..eb77a67 100644
--- a/sdk/lib/_blink/dartium/_blink_dartium.dart
+++ b/sdk/lib/_blink/dartium/_blink_dartium.dart
@@ -7,8 +7,10 @@
  */
 library dart.dom._blink;
 
+import 'dart:async';
 import 'dart:js' as js;
 import 'dart:html' show DomException;
+import 'dart:_internal' as internal;
 
 // This is a place to put custom renames if we need them.
 final resolverMap = {
@@ -23275,6 +23277,15 @@
 
   static register(document, tag, customType, extendsTagName) native "Utils_register";
 
+  // Below code sets up VMLibraryHooks for resolvePackageUri.
+  static Uri resolvePackageUri(Uri packageUri) native "Utils_resolvePackageUri";
+  static Future<Uri> _resolvePackageUriFuture(Uri packageUri) async {
+      return resolvePackageUri(packageUri);
+  }
+  static void _setupHooks() {
+    internal.VMLibraryHooks.resolvePackageUriFuture = _resolvePackageUriFuture;
+  }
+
   // Defines an interceptor if there is an appropriate JavaScript prototype to define it on.
   // In any case, returns a typed JS wrapper compatibile with dart:html and the new
   // typed JS Interop.
diff --git a/sdk/lib/_internal/js_runtime/lib/core_patch.dart b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
index 3715679..ba537fd 100644
--- a/sdk/lib/_internal/js_runtime/lib/core_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
@@ -706,6 +706,9 @@
 }
 
 // Called from kernel generated code.
+_malformedTypeError(message) => new RuntimeError(message);
+
+// Called from kernel generated code.
 _genericNoSuchMethod(receiver, memberName, positionalArguments, namedArguments,
     existingArguments) {
   return new NoSuchMethodError(
@@ -730,4 +733,67 @@
 }
 
 // Called from kernel generated code.
-_malformedTypeError(message) => new RuntimeError(message);
+_unresolvedStaticGetterError(receiver, memberName, positionalArguments,
+    namedArguments, existingArguments) {
+  // TODO(sra): Generate customized message.
+  return new NoSuchMethodError(
+      receiver,
+      memberName,
+      positionalArguments,
+      namedArguments);
+}
+
+// Called from kernel generated code.
+_unresolvedStaticSetterError(receiver, memberName, positionalArguments,
+    namedArguments, existingArguments) {
+  // TODO(sra): Generate customized message.
+  return new NoSuchMethodError(
+      receiver,
+      memberName,
+      positionalArguments,
+      namedArguments);
+}
+
+// Called from kernel generated code.
+_unresolvedStaticMethodError(receiver, memberName, positionalArguments,
+    namedArguments, existingArguments) {
+  // TODO(sra): Generate customized message.
+  return new NoSuchMethodError(
+      receiver,
+      memberName,
+      positionalArguments,
+      namedArguments);
+}
+
+// Called from kernel generated code.
+_unresolvedTopLevelGetterError(receiver, memberName, positionalArguments,
+    namedArguments, existingArguments) {
+  // TODO(sra): Generate customized message.
+  return new NoSuchMethodError(
+      receiver,
+      memberName,
+      positionalArguments,
+      namedArguments);
+}
+
+// Called from kernel generated code.
+_unresolvedTopLevelSetterError(receiver, memberName, positionalArguments,
+    namedArguments, existingArguments) {
+  // TODO(sra): Generate customized message.
+  return new NoSuchMethodError(
+      receiver,
+      memberName,
+      positionalArguments,
+      namedArguments);
+}
+
+// Called from kernel generated code.
+_unresolvedTopLevelMethodError(receiver, memberName, positionalArguments,
+    namedArguments, existingArguments) {
+  // TODO(sra): Generate customized message.
+  return new NoSuchMethodError(
+      receiver,
+      memberName,
+      positionalArguments,
+      namedArguments);
+}
diff --git a/sdk/lib/_internal/js_runtime/lib/js_helper.dart b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
index 3be1e9d..638a31c 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_helper.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
@@ -3467,8 +3467,7 @@
  * field that is currently being initialized.
  */
 void throwCyclicInit(String staticName) {
-  throw new CyclicInitializationError(
-      "Cyclic initialization for static $staticName");
+  throw new CyclicInitializationError(staticName);
 }
 
 /**
diff --git a/sdk/lib/_internal/js_runtime/lib/js_mirrors.dart b/sdk/lib/_internal/js_runtime/lib/js_mirrors.dart
index b554437..7489b21 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_mirrors.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_mirrors.dart
@@ -4,63 +4,60 @@
 
 library dart._js_mirrors;
 
-import 'dart:_js_embedded_names' show
-    JsGetName,
-    ALL_CLASSES,
-    LAZIES,
-    LIBRARIES,
-    STATICS,
-    TYPE_INFORMATION,
-    TYPEDEF_PREDICATE_PROPERTY_NAME,
-    TYPEDEF_TYPE_PROPERTY_NAME;
+import 'dart:_js_embedded_names'
+    show
+        JsGetName,
+        ALL_CLASSES,
+        LAZIES,
+        LIBRARIES,
+        STATICS,
+        TYPE_INFORMATION,
+        TYPEDEF_PREDICATE_PROPERTY_NAME,
+        TYPEDEF_TYPE_PROPERTY_NAME;
 
-import 'dart:collection' show
-    UnmodifiableListView,
-    UnmodifiableMapView;
+import 'dart:collection' show UnmodifiableListView, UnmodifiableMapView;
 
 import 'dart:mirrors';
 
-import 'dart:_foreign_helper' show
-    JS,
-    JS_GET_FLAG,
-    JS_GET_STATIC_STATE,
-    JS_CURRENT_ISOLATE_CONTEXT,
-    JS_EMBEDDED_GLOBAL,
-    JS_GET_NAME;
-
+import 'dart:_foreign_helper'
+    show
+        JS,
+        JS_GET_FLAG,
+        JS_GET_STATIC_STATE,
+        JS_CURRENT_ISOLATE_CONTEXT,
+        JS_EMBEDDED_GLOBAL,
+        JS_GET_NAME;
 
 import 'dart:_internal' as _symbol_dev;
 
-import 'dart:_js_helper' show
-    BoundClosure,
-    CachedInvocation,
-    Closure,
-    JSInvocationMirror,
-    JsCache,
-    Primitives,
-    ReflectionInfo,
-    RuntimeError,
-    TearOffClosure,
-    TypeVariable,
-    UnimplementedNoSuchMethodError,
-    createRuntimeType,
-    createUnmangledInvocationMirror,
-    getMangledTypeName,
-    getMetadata,
-    getType,
-    getRuntimeType,
-    isDartFunctionType,
-    runtimeTypeToString,
-    setRuntimeTypeInfo,
-    throwInvalidReflectionError,
-    TypeImpl,
-    deferredLoadHook;
+import 'dart:_js_helper'
+    show
+        BoundClosure,
+        CachedInvocation,
+        Closure,
+        JSInvocationMirror,
+        JsCache,
+        Primitives,
+        ReflectionInfo,
+        RuntimeError,
+        TearOffClosure,
+        TypeVariable,
+        UnimplementedNoSuchMethodError,
+        createRuntimeType,
+        createUnmangledInvocationMirror,
+        getMangledTypeName,
+        getMetadata,
+        getType,
+        getRuntimeType,
+        isDartFunctionType,
+        runtimeTypeToString,
+        setRuntimeTypeInfo,
+        throwInvalidReflectionError,
+        TypeImpl,
+        deferredLoadHook;
 
-import 'dart:_interceptors' show
-    Interceptor,
-    JSArray,
-    JSExtendableArray,
-    getInterceptor;
+import 'dart:_interceptors'
+    show Interceptor, JSArray, JSExtendableArray, getInterceptor;
 
 import 'dart:_js_names';
 
@@ -152,10 +149,11 @@
       if (uriString != "") {
         uri = Uri.parse(uriString);
       } else {
-        uri = new Uri(scheme: 'https',
-                      host: 'dartlang.org',
-                      path: 'dart2js-stripped-uri',
-                      queryParameters: { 'lib': name });
+        uri = new Uri(
+            scheme: 'https',
+            host: 'dartlang.org',
+            path: 'dart2js-stripped-uri',
+            queryParameters: {'lib': name});
       }
       List<String> classes = data[2];
       List<String> functions = data[3];
@@ -164,12 +162,11 @@
       bool isRoot = data[6];
       var globalObject = data[7];
       List metadata = (metadataFunction == null)
-          ? const [] : JS('List', '#()', metadataFunction);
+          ? const []
+          : JS('List', '#()', metadataFunction);
       var libraries = result.putIfAbsent(name, () => <LibraryMirror>[]);
-      libraries.add(
-          new JsLibraryMirror(
-              s(name), uri, classes, functions, metadata, fields, isRoot,
-              globalObject));
+      libraries.add(new JsLibraryMirror(s(name), uri, classes, functions,
+          metadata, fields, isRoot, globalObject));
     }
     return result;
   }
@@ -217,8 +214,8 @@
   bool get isCurrent => JS_CURRENT_ISOLATE_CONTEXT() == _isolateContext;
 
   LibraryMirror get rootLibrary {
-    return currentJsMirrorSystem.libraries.values.firstWhere(
-        (JsLibraryMirror library) => library._isRoot);
+    return currentJsMirrorSystem.libraries.values
+        .firstWhere((JsLibraryMirror library) => library._isRoot);
   }
 }
 
@@ -255,8 +252,8 @@
   final int _metadataIndex;
   TypeMirror _cachedUpperBound;
 
-  JsTypeVariableMirror(TypeVariable typeVariable, this.owner,
-                       this._metadataIndex)
+  JsTypeVariableMirror(
+      TypeVariable typeVariable, this.owner, this._metadataIndex)
       : this._typeVariable = typeVariable,
         super(s(typeVariable.name));
 
@@ -291,8 +288,7 @@
 }
 
 class JsTypeMirror extends JsDeclarationMirror implements TypeMirror {
-  JsTypeMirror(Symbol simpleName)
-      : super(simpleName);
+  JsTypeMirror(Symbol simpleName) : super(simpleName);
 
   String get _prettyName => 'TypeMirror';
 
@@ -325,7 +321,8 @@
   }
 }
 
-class JsLibraryMirror extends JsDeclarationMirror with JsObjectMirror
+class JsLibraryMirror extends JsDeclarationMirror
+    with JsObjectMirror
     implements LibraryMirror {
   final Uri _uri;
   final List<String> _classes;
@@ -345,14 +342,15 @@
   UnmodifiableMapView<Symbol, DeclarationMirror> _cachedDeclarations;
   UnmodifiableListView<InstanceMirror> _cachedMetadata;
 
-  JsLibraryMirror(Symbol simpleName,
-                  this._uri,
-                  this._classes,
-                  this._functions,
-                  this._metadata,
-                  this._compactFieldSpecification,
-                  this._isRoot,
-                  this._globalObject)
+  JsLibraryMirror(
+      Symbol simpleName,
+      this._uri,
+      this._classes,
+      this._functions,
+      this._metadata,
+      this._compactFieldSpecification,
+      this._isRoot,
+      this._globalObject)
       : super(simpleName) {
     preserveLibraryNames();
   }
@@ -379,7 +377,7 @@
       if (cls is JsClassMirror) {
         result[cls.simpleName] = cls;
         cls._owner = this;
-      } else  if (cls is JsTypedefMirror) {
+      } else if (cls is JsTypedefMirror) {
         result[cls.simpleName] = cls;
       }
     }
@@ -414,9 +412,8 @@
     return reflect(JS("", "#()", getter));
   }
 
-  InstanceMirror invoke(Symbol memberName,
-                        List positionalArguments,
-                        [Map<Symbol, dynamic> namedArguments]) {
+  InstanceMirror invoke(Symbol memberName, List positionalArguments,
+      [Map<Symbol, dynamic> namedArguments]) {
     if (namedArguments != null && !namedArguments.isEmpty) {
       throw new UnsupportedError('Named arguments are not implemented.');
     }
@@ -474,14 +471,13 @@
         continue;
       }
       bool isConstructor = unmangledName.startsWith('new ');
-      bool isStatic = !isConstructor; // Top-level functions are static, but
-                                      // constructors are not.
+      // Top-level functions are static, but constructors are not.
+      bool isStatic = !isConstructor;
       if (isConstructor) {
         unmangledName = unmangledName.substring(4).replaceAll(r'$', '.');
       }
-      JsMethodMirror mirror =
-          new JsMethodMirror.fromUnmangledName(
-              unmangledName, jsFunction, isStatic, isConstructor);
+      JsMethodMirror mirror = new JsMethodMirror.fromUnmangledName(
+          unmangledName, jsFunction, isStatic, isConstructor);
       result.add(mirror);
       mirror._owner = this;
     }
@@ -533,11 +529,12 @@
   }
 
   Map<Symbol, Mirror> get __members {
-    if (_cachedMembers !=  null) return _cachedMembers;
+    if (_cachedMembers != null) return _cachedMembers;
     Map<Symbol, Mirror> result = new Map.from(__classes);
     addToResult(Symbol key, Mirror value) {
       result[key] = value;
     }
+
     __functions.forEach(addToResult);
     __getters.forEach(addToResult);
     __setters.forEach(addToResult);
@@ -551,6 +548,7 @@
     addToResult(Symbol key, Mirror value) {
       result[key] = value;
     }
+
     __members.forEach(addToResult);
     return _cachedDeclarations =
         new UnmodifiableMapView<Symbol, DeclarationMirror>(result);
@@ -566,8 +564,8 @@
   // TODO(ahe): Test this getter.
   DeclarationMirror get owner => null;
 
-  List<LibraryDependencyMirror> get libraryDependencies
-      => throw new UnimplementedError();
+  List<LibraryDependencyMirror> get libraryDependencies =>
+      throw new UnimplementedError();
 }
 
 String n(Symbol symbol) => _symbol_dev.Symbol.getName(symbol);
@@ -589,8 +587,19 @@
   }
 }
 
-TypeMirror reflectType(Type key) {
-  return reflectClassByMangledName(getMangledTypeName(key));
+TypeMirror reflectType(Type key, [List<Type> typeArguments]) {
+  String mangledName = getMangledTypeName(key);
+  if (typeArguments != null) {
+    if (typeArguments.isEmpty || !typeArguments.every((_) => _ is TypeImpl)) {
+      var message = typeArguments.isEmpty
+          ? 'Type arguments list can not be empty.'
+          : 'Type arguments list must contain only instances of Type.';
+      throw new ArgumentError.value(typeArguments, 'typeArguments', message);
+    }
+    var mangledTypeArguments = typeArguments.map(getMangledTypeName);
+    mangledName = "${mangledName}<${mangledTypeArguments.join(', ')}>";
+  }
+  return reflectClassByMangledName(mangledName);
 }
 
 TypeMirror reflectClassByMangledName(String mangledName) {
@@ -612,11 +621,12 @@
   if (typeArgIndex != -1) {
     TypeMirror originalDeclaration =
         reflectClassByMangledName(mangledName.substring(0, typeArgIndex))
-        .originalDeclaration;
+            .originalDeclaration;
     if (originalDeclaration is JsTypedefMirror) {
       throw new UnimplementedError();
     }
-    mirror = new JsTypeBoundClassMirror(originalDeclaration,
+    mirror = new JsTypeBoundClassMirror(
+        originalDeclaration,
         // Remove the angle brackets enclosing the type arguments.
         mangledName.substring(typeArgIndex + 1, mangledName.length - 1));
     JsCache.update(classMirrors, mangledName, mirror);
@@ -635,8 +645,8 @@
   if (descriptor == null) {
     // This is a native class, or an intercepted class.
     // TODO(ahe): Preserve descriptor for such classes.
-  } else if (JS('bool', '# in #',
-                TYPEDEF_PREDICATE_PROPERTY_NAME, descriptor)) {
+  } else if (JS(
+      'bool', '# in #', TYPEDEF_PREDICATE_PROPERTY_NAME, descriptor)) {
     // Typedefs are represented as normal classes with two special properties:
     //   TYPEDEF_PREDICATE_PROPERTY_NAME and TYPEDEF_TYPE_PROPERTY_NAME.
     // For example:
@@ -688,6 +698,43 @@
   return mirror;
 }
 
+/// Splits input `typeArguments` string into a list of strings for each argument.
+/// Takes into account nested generic types.
+/// For example, `Map<int, String>, String` will become a list of two items:
+/// `Map<int, String>` and `String`.
+List<String> splitTypeArguments(String typeArguments) {
+  if (typeArguments.indexOf('<') == -1) {
+    return typeArguments.split(',');
+  }
+  var argumentList = new List<String>();
+  int level = 0;
+  String currentTypeArgument = '';
+
+  for (int i = 0; i < typeArguments.length; i++) {
+    var character = typeArguments[i];
+    if (character == ' ') {
+      continue;
+    } else if (character == '<') {
+      currentTypeArgument += character;
+      level++;
+    } else if (character == '>') {
+      currentTypeArgument += character;
+      level--;
+    } else if (character == ',') {
+      if (level > 0) {
+        currentTypeArgument += character;
+      } else {
+        argumentList.add(currentTypeArgument);
+        currentTypeArgument = '';
+      }
+    } else {
+      currentTypeArgument += character;
+    }
+  }
+  argumentList.add(currentTypeArgument);
+  return argumentList;
+}
+
 Map<Symbol, MethodMirror> filterMethods(List<MethodMirror> methods) {
   var result = new Map();
   for (JsMethodMirror method in methods) {
@@ -708,12 +755,11 @@
   return result;
 }
 
-Map<Symbol, MethodMirror> filterGetters(List<MethodMirror> methods,
-                                        Map<Symbol, VariableMirror> fields) {
+Map<Symbol, MethodMirror> filterGetters(
+    List<MethodMirror> methods, Map<Symbol, VariableMirror> fields) {
   var result = new Map();
   for (JsMethodMirror method in methods) {
     if (method.isGetter) {
-
       // TODO(ahe): This is a hack to remove getters corresponding to a field.
       if (fields[method.simpleName] != null) continue;
 
@@ -723,12 +769,11 @@
   return result;
 }
 
-Map<Symbol, MethodMirror> filterSetters(List<MethodMirror> methods,
-                                        Map<Symbol, VariableMirror> fields) {
+Map<Symbol, MethodMirror> filterSetters(
+    List<MethodMirror> methods, Map<Symbol, VariableMirror> fields) {
   var result = new Map();
   for (JsMethodMirror method in methods) {
     if (method.isSetter) {
-
       // TODO(ahe): This is a hack to remove setters corresponding to a field.
       String name = n(method.simpleName);
       name = name.substring(0, name.length - 1); // Remove '='.
@@ -740,8 +785,8 @@
   return result;
 }
 
-Map<Symbol, Mirror> filterMembers(List<MethodMirror> methods,
-                                  Map<Symbol, VariableMirror> variables) {
+Map<Symbol, Mirror> filterMembers(
+    List<MethodMirror> methods, Map<Symbol, VariableMirror> variables) {
   Map<Symbol, Mirror> result = new Map.from(variables);
   for (JsMethodMirror method in methods) {
     if (method.isSetter) {
@@ -777,15 +822,16 @@
   return superclass;
 }
 
-class JsMixinApplication extends JsTypeMirror with JsObjectMirror
+class JsMixinApplication extends JsTypeMirror
+    with JsObjectMirror
     implements ClassMirror {
   final ClassMirror superclass;
   final ClassMirror mixin;
   Symbol _cachedSimpleName;
   Map<Symbol, MethodMirror> _cachedInstanceMembers;
 
-  JsMixinApplication(ClassMirror superclass, ClassMirror mixin,
-                     String mangledName)
+  JsMixinApplication(
+      ClassMirror superclass, ClassMirror mixin, String mangledName)
       : this.superclass = superclass,
         this.mixin = mixin,
         super(s(mangledName));
@@ -833,10 +879,8 @@
 
   _asRuntimeType() => null;
 
-  InstanceMirror invoke(
-      Symbol memberName,
-      List positionalArguments,
-      [Map<Symbol,dynamic> namedArguments]) {
+  InstanceMirror invoke(Symbol memberName, List positionalArguments,
+      [Map<Symbol, dynamic> namedArguments]) {
     throw new NoSuchStaticMethodError.method(
         null, memberName, positionalArguments, namedArguments);
   }
@@ -858,10 +902,8 @@
 
   Map<Symbol, MethodMirror> get __constructors => _mixin.__constructors;
 
-  InstanceMirror newInstance(
-      Symbol constructorName,
-      List positionalArguments,
-      [Map<Symbol,dynamic> namedArguments]) {
+  InstanceMirror newInstance(Symbol constructorName, List positionalArguments,
+      [Map<Symbol, dynamic> namedArguments]) {
     throw new UnsupportedError(
         "Can't instantiate mixin application '${n(qualifiedName)}'");
   }
@@ -890,8 +932,7 @@
   bool isAssignableTo(TypeMirror other) => throw new UnimplementedError();
 }
 
-abstract class JsObjectMirror implements ObjectMirror {
-}
+abstract class JsObjectMirror implements ObjectMirror {}
 
 class JsInstanceMirror extends JsObjectMirror implements InstanceMirror {
   final reflectee;
@@ -907,19 +948,17 @@
     return reflectType(getRuntimeType(reflectee));
   }
 
-  InstanceMirror invoke(Symbol memberName,
-                        List positionalArguments,
-                        [Map<Symbol,dynamic> namedArguments]) {
+  InstanceMirror invoke(Symbol memberName, List positionalArguments,
+      [Map<Symbol, dynamic> namedArguments]) {
     if (namedArguments == null) namedArguments = const {};
     // We can safely pass positionalArguments to _invoke as it will wrap it in
     // a JSArray if needed.
-    return _invoke(memberName, JSInvocationMirror.METHOD,
-                   positionalArguments, namedArguments);
+    return _invoke(memberName, JSInvocationMirror.METHOD, positionalArguments,
+        namedArguments);
   }
 
-  InstanceMirror _invokeMethodWithNamedArguments(
-      String reflectiveName,
-      List positionalArguments, Map<Symbol,dynamic> namedArguments) {
+  InstanceMirror _invokeMethodWithNamedArguments(String reflectiveName,
+      List positionalArguments, Map<Symbol, dynamic> namedArguments) {
     assert(namedArguments.isNotEmpty);
     var interceptor = getInterceptor(reflectee);
 
@@ -983,12 +1022,13 @@
   }
 
   String _computeReflectiveName(Symbol symbolName, int type,
-                                List positionalArguments,
-                                Map<Symbol, dynamic> namedArguments) {
+      List positionalArguments, Map<Symbol, dynamic> namedArguments) {
     String name = n(symbolName);
     switch (type) {
-      case JSInvocationMirror.GETTER: return name;
-      case JSInvocationMirror.SETTER: return '$name=';
+      case JSInvocationMirror.GETTER:
+        return name;
+      case JSInvocationMirror.SETTER:
+        return '$name=';
       case JSInvocationMirror.METHOD:
         if (namedArguments.isNotEmpty) return '$name*';
         int nbArgs = positionalArguments.length as int;
@@ -1004,8 +1044,7 @@
    * Caches the result.
    */
   _getCachedInvocation(Symbol name, int type, String reflectiveName,
-      List positionalArguments, Map<Symbol,dynamic> namedArguments) {
-
+      List positionalArguments, Map<Symbol, dynamic> namedArguments) {
     var cache = _classInvocationCache;
     var cacheEntry = JsCache.fetch(cache, reflectiveName);
     var result;
@@ -1037,10 +1076,8 @@
   /// Invoke the member specified through name and type on the reflectee.
   /// As a side-effect, this populates the class-specific invocation cache
   /// for the reflectee.
-  InstanceMirror _invoke(Symbol name,
-                         int type,
-                         List positionalArguments,
-                         Map<Symbol,dynamic> namedArguments) {
+  InstanceMirror _invoke(Symbol name, int type, List positionalArguments,
+      Map<Symbol, dynamic> namedArguments) {
     String reflectiveName =
         _computeReflectiveName(name, type, positionalArguments, namedArguments);
 
@@ -1055,8 +1092,8 @@
     if (cacheEntry.isNoSuchMethod || !_isReflectable(cacheEntry)) {
       // Could be that we want to invoke a getter, or get a method.
       if (type == JSInvocationMirror.METHOD && _instanceFieldExists(name)) {
-        return getField(name).invoke(
-            #call, positionalArguments, namedArguments);
+        return getField(name)
+            .invoke(#call, positionalArguments, namedArguments);
       }
 
       if (type == JSInvocationMirror.SETTER) {
@@ -1086,15 +1123,11 @@
   }
 
   // JS helpers for getField optimizations.
-  static bool isUndefined(x)
-      => JS('bool', 'typeof # == "undefined"', x);
-  static bool isMissingCache(x)
-      => JS('bool', 'typeof # == "number"', x);
-  static bool isMissingProbe(Symbol symbol)
-      => JS('bool', 'typeof #.\$p == "undefined"', symbol);
-  static bool isEvalAllowed()
-      => !JS_GET_FLAG("USE_CONTENT_SECURITY_POLICY");
-
+  static bool isUndefined(x) => JS('bool', 'typeof # == "undefined"', x);
+  static bool isMissingCache(x) => JS('bool', 'typeof # == "number"', x);
+  static bool isMissingProbe(Symbol symbol) =>
+      JS('bool', 'typeof #.\$p == "undefined"', symbol);
+  static bool isEvalAllowed() => !JS_GET_FLAG("USE_CONTENT_SECURITY_POLICY");
 
   /// The getter cache is lazily allocated after a couple
   /// of invocations of [InstanceMirror.getField]. The delay is
@@ -1113,13 +1146,14 @@
     int getterType = JSInvocationMirror.GETTER;
     String getterName =
         _computeReflectiveName(name, getterType, const [], const {});
-    var getterCacheEntry = _getCachedInvocation(
-        name, getterType, getterName, const [], const {});
+    var getterCacheEntry =
+        _getCachedInvocation(name, getterType, getterName, const [], const {});
     return !getterCacheEntry.isNoSuchMethod && !getterCacheEntry.isGetterStub;
   }
 
   InstanceMirror getField(Symbol fieldName) {
-    FASTPATH: {
+    FASTPATH:
+    {
       var cache = _getterCache;
       if (isMissingCache(cache) || isMissingProbe(fieldName)) break FASTPATH;
       // If the [fieldName] has an associated probe function, we can use
@@ -1207,8 +1241,8 @@
     return JS('', 'new Function("o", #)', body);
   }
 
-  _newGetterNoEvalFn(n) => JS('',
-      '(function(n){return(function(o){return o[n]()})})(#)', n);
+  _newGetterNoEvalFn(n) =>
+      JS('', '(function(n){return(function(o){return o[n]()})})(#)', n);
 
   _newInterceptedGetterFn(String name, bool useEval) {
     var object = reflectee;
@@ -1219,22 +1253,20 @@
     if (!useEval) return _newInterceptGetterNoEvalFn(name, interceptor);
     String className = JS('String', '#.constructor.name', interceptor);
     String functionName = '$className\$$name';
-    String body =
-        '  function $functionName(o){return i.$name(o)}'
+    String body = '  function $functionName(o){return i.$name(o)}'
         '  return $functionName;';
     return JS('', '(new Function("i", #))(#)', body, interceptor);
   }
 
-  _newInterceptGetterNoEvalFn(n, i) => JS('',
-      '(function(n,i){return(function(o){return i[n](o)})})(#,#)', n, i);
+  _newInterceptGetterNoEvalFn(n, i) =>
+      JS('', '(function(n,i){return(function(o){return i[n](o)})})(#,#)', n, i);
 
   delegate(Invocation invocation) {
     return JSInvocationMirror.invokeFromMirror(invocation, reflectee);
   }
 
   operator ==(other) {
-    return other is JsInstanceMirror &&
-           identical(reflectee, other.reflectee);
+    return other is JsInstanceMirror && identical(reflectee, other.reflectee);
   }
 
   int get hashCode {
@@ -1332,54 +1364,25 @@
       }
     }
 
-    if (_typeArguments.indexOf('<') == -1) {
-      _typeArguments.split(',').forEach((t) => addTypeArgument(t));
-    } else {
-      int level = 0;
-      String currentTypeArgument = '';
-
-      for (int i = 0; i < _typeArguments.length; i++) {
-        var character = _typeArguments[i];
-        if (character == ' ') {
-          continue;
-        } else if (character == '<') {
-          currentTypeArgument += character;
-          level++;
-        } else if (character == '>') {
-          currentTypeArgument += character;
-          level--;
-        } else if (character == ',') {
-          if (level > 0) {
-            currentTypeArgument += character;
-          } else {
-            addTypeArgument(currentTypeArgument);
-            currentTypeArgument = '';
-          }
-        } else {
-          currentTypeArgument += character;
-        }
-      }
-      addTypeArgument(currentTypeArgument);
-    }
+    splitTypeArguments(_typeArguments).forEach(addTypeArgument);
     return _cachedTypeArguments = new UnmodifiableListView(result);
   }
 
   List<JsMethodMirror> get _methods {
     if (_cachedMethods != null) return _cachedMethods;
-    return _cachedMethods =_class._getMethodsWithOwner(this);
+    return _cachedMethods = _class._getMethodsWithOwner(this);
   }
 
   Map<Symbol, MethodMirror> get __methods {
     if (_cachedMethodsMap != null) return _cachedMethodsMap;
-    return _cachedMethodsMap = new UnmodifiableMapView<Symbol, MethodMirror>(
-        filterMethods(_methods));
+    return _cachedMethodsMap =
+        new UnmodifiableMapView<Symbol, MethodMirror>(filterMethods(_methods));
   }
 
   Map<Symbol, MethodMirror> get __constructors {
     if (_cachedConstructors != null) return _cachedConstructors;
-    return _cachedConstructors =
-        new UnmodifiableMapView<Symbol, MethodMirror>(
-            filterConstructors(_methods));
+    return _cachedConstructors = new UnmodifiableMapView<Symbol, MethodMirror>(
+        filterConstructors(_methods));
   }
 
   Map<Symbol, MethodMirror> get __getters {
@@ -1397,7 +1400,7 @@
   Map<Symbol, VariableMirror> get __variables {
     if (_cachedVariables != null) return _cachedVariables;
     var result = new Map();
-    for (JsVariableMirror mirror in  _class._getFieldsWithOwner(this)) {
+    for (JsVariableMirror mirror in _class._getFieldsWithOwner(this)) {
       result[mirror.simpleName] = mirror;
     }
     return _cachedVariables =
@@ -1451,8 +1454,10 @@
         result.addAll(superclass.instanceMembers);
       }
       declarations.values.forEach((decl) {
-        if (decl is MethodMirror && !decl.isStatic &&
-            !decl.isConstructor && !decl.isAbstract) {
+        if (decl is MethodMirror &&
+            !decl.isStatic &&
+            !decl.isConstructor &&
+            !decl.isAbstract) {
           result[decl.simpleName] = decl;
         }
         if (decl is VariableMirror && !decl.isStatic) {
@@ -1477,19 +1482,17 @@
 
   InstanceMirror getField(Symbol fieldName) => _class.getField(fieldName);
 
-  InstanceMirror newInstance(Symbol constructorName,
-                             List positionalArguments,
-                             [Map<Symbol, dynamic> namedArguments]) {
-    var instance = _class._getInvokedInstance(constructorName,
-                                              positionalArguments,
-                                              namedArguments);
+  InstanceMirror newInstance(Symbol constructorName, List positionalArguments,
+      [Map<Symbol, dynamic> namedArguments]) {
+    var instance = _class._getInvokedInstance(
+        constructorName, positionalArguments, namedArguments);
     return reflect(setRuntimeTypeInfo(
         instance, typeArguments.map((t) => t._asRuntimeType()).toList()));
   }
 
   _asRuntimeType() {
-    return [_class._jsConstructor].addAll(
-        typeArguments.map((t) => t._asRuntimeType()));
+    return [_class._jsConstructor]
+        .addAll(typeArguments.map((t) => t._asRuntimeType()));
   }
 
   JsLibraryMirror get owner => _class.owner;
@@ -1507,9 +1510,8 @@
     return _superclass = typeMirrorFromRuntimeTypeRepresentation(this, type);
   }
 
-  InstanceMirror invoke(Symbol memberName,
-                        List positionalArguments,
-                        [Map<Symbol,dynamic> namedArguments]) {
+  InstanceMirror invoke(Symbol memberName, List positionalArguments,
+      [Map<Symbol, dynamic> namedArguments]) {
     return _class.invoke(memberName, positionalArguments, namedArguments);
   }
 
@@ -1562,14 +1564,12 @@
   final bool isGetter;
   final bool isStatic;
   final bool isTopLevel;
-  final _target;  /// The field or type that introduces the synthetic accessor.
 
-  JsSyntheticAccessor(this.owner,
-                      this.simpleName,
-                      this.isGetter,
-                      this.isStatic,
-                      this.isTopLevel,
-                      this._target);
+  /// The field or type that introduces the synthetic accessor.
+  final _target;
+
+  JsSyntheticAccessor(this.owner, this.simpleName, this.isGetter, this.isStatic,
+      this.isTopLevel, this._target);
 
   bool get isSynthetic => true;
   bool get isRegularMethod => false;
@@ -1622,7 +1622,8 @@
   SourceLocation get location => throw new UnimplementedError();
 }
 
-class JsClassMirror extends JsTypeMirror with JsObjectMirror
+class JsClassMirror extends JsTypeMirror
+    with JsObjectMirror
     implements ClassMirror {
   final String _mangledName;
   final _jsConstructor;
@@ -1649,26 +1650,22 @@
   // Set as side-effect of accessing JsLibraryMirror.classes.
   JsLibraryMirror _owner;
 
-  JsClassMirror(Symbol simpleName,
-                this._mangledName,
-                this._jsConstructor,
-                this._fieldsDescriptor,
-                this._fieldsMetadata)
+  JsClassMirror(Symbol simpleName, this._mangledName, this._jsConstructor,
+      this._fieldsDescriptor, this._fieldsMetadata)
       : super(simpleName);
 
   String get _prettyName => 'ClassMirror';
 
   Map<Symbol, MethodMirror> get __constructors {
     if (_cachedConstructors != null) return _cachedConstructors;
-    return _cachedConstructors =
-        new UnmodifiableMapView<Symbol, MethodMirror>(
-            filterConstructors(_methods));
+    return _cachedConstructors = new UnmodifiableMapView<Symbol, MethodMirror>(
+        filterConstructors(_methods));
   }
 
   _asRuntimeType() {
-    if (typeVariables.isEmpty)  return _jsConstructor;
+    if (typeVariables.isEmpty) return _jsConstructor;
     var type = [_jsConstructor];
-    for (int i = 0; i < typeVariables.length; i ++) {
+    for (int i = 0; i < typeVariables.length; i++) {
       type.add(JsMirrorSystem._dynamicType._asRuntimeType);
     }
     return type;
@@ -1678,7 +1675,7 @@
     var prototype = JS('', '#.prototype', _jsConstructor);
     // The prototype might not have been processed yet, so do that now.
     JS('', '#[#]()', prototype,
-                     JS_GET_NAME(JsGetName.DEFERRED_ACTION_PROPERTY));
+        JS_GET_NAME(JsGetName.DEFERRED_ACTION_PROPERTY));
     List<String> keys = extractKeys(prototype);
     var result = <JsMethodMirror>[];
     for (String key in keys) {
@@ -1692,9 +1689,8 @@
       var function = JS('', '#[#]', prototype, key);
       if (!isOrdinaryReflectableMethod(function)) continue;
       if (isAliasedSuperMethod(function, key)) continue;
-      var mirror =
-          new JsMethodMirror.fromUnmangledName(
-              simpleName, function, false, false);
+      var mirror = new JsMethodMirror.fromUnmangledName(
+          simpleName, function, false, false);
       result.add(mirror);
       mirror._owner = methodOwner;
     }
@@ -1720,9 +1716,8 @@
         continue;
       }
       bool isStatic = !isConstructor; // Constructors are not static.
-      JsMethodMirror mirror =
-          new JsMethodMirror.fromUnmangledName(
-              unmangledName, jsFunction, isStatic, isConstructor);
+      JsMethodMirror mirror = new JsMethodMirror.fromUnmangledName(
+          unmangledName, jsFunction, isStatic, isConstructor);
       result.add(mirror);
       mirror._owner = methodOwner;
     }
@@ -1740,8 +1735,8 @@
 
     var instanceFieldSpecfication = _fieldsDescriptor.split(';')[1];
     if (_fieldsMetadata != null) {
-      instanceFieldSpecfication =
-          [instanceFieldSpecfication]..addAll(_fieldsMetadata);
+      instanceFieldSpecfication = [instanceFieldSpecfication]
+        ..addAll(_fieldsMetadata);
     }
     parseCompactFieldSpecification(
         fieldOwner, instanceFieldSpecfication, false, result);
@@ -1751,10 +1746,10 @@
     if (staticDescriptor != null) {
       parseCompactFieldSpecification(
           fieldOwner,
-          JS('', '#[#]',
-              staticDescriptor,
+          JS('', '#[#]', staticDescriptor,
               JS_GET_NAME(JsGetName.CLASS_DESCRIPTOR_PROPERTY)),
-          true, result);
+          true,
+          result);
     }
     return result;
   }
@@ -1804,6 +1799,7 @@
     addToResult(Symbol key, Mirror value) {
       result[key] = value;
     }
+
     __members.forEach(addToResult);
     __constructors.forEach(addToResult);
     typeVariables.forEach((tv) => result[tv.simpleName] = tv);
@@ -1841,8 +1837,10 @@
         result.addAll(superclass.instanceMembers);
       }
       declarations.values.forEach((decl) {
-        if (decl is MethodMirror && !decl.isStatic &&
-            !decl.isConstructor && !decl.isAbstract) {
+        if (decl is MethodMirror &&
+            !decl.isStatic &&
+            !decl.isConstructor &&
+            !decl.isAbstract) {
           result[decl.simpleName] = decl;
         }
         if (decl is VariableMirror && !decl.isStatic) {
@@ -1926,32 +1924,28 @@
     throw new NoSuchStaticMethodError.method(null, fieldName, null, null);
   }
 
-  _getInvokedInstance(Symbol constructorName,
-                      List positionalArguments,
-                      [Map<Symbol, dynamic> namedArguments]) {
-     if (namedArguments != null && !namedArguments.isEmpty) {
-       throw new UnsupportedError('Named arguments are not implemented.');
-     }
-     JsMethodMirror mirror =
-         JsCache.fetch(_jsConstructorCache, n(constructorName));
-     if (mirror == null) {
-       mirror = __constructors.values.firstWhere(
-           (m) => m.constructorName == constructorName,
-           orElse: () {
-             throw new NoSuchStaticMethodError.method(
-                 null, constructorName, positionalArguments, namedArguments);
-           });
-       JsCache.update(_jsConstructorCache, n(constructorName), mirror);
-     }
-     return mirror._invoke(positionalArguments, namedArguments);
-   }
+  _getInvokedInstance(Symbol constructorName, List positionalArguments,
+      [Map<Symbol, dynamic> namedArguments]) {
+    if (namedArguments != null && !namedArguments.isEmpty) {
+      throw new UnsupportedError('Named arguments are not implemented.');
+    }
+    JsMethodMirror mirror =
+        JsCache.fetch(_jsConstructorCache, n(constructorName));
+    if (mirror == null) {
+      mirror = __constructors.values
+          .firstWhere((m) => m.constructorName == constructorName, orElse: () {
+        throw new NoSuchStaticMethodError.method(
+            null, constructorName, positionalArguments, namedArguments);
+      });
+      JsCache.update(_jsConstructorCache, n(constructorName), mirror);
+    }
+    return mirror._invoke(positionalArguments, namedArguments);
+  }
 
-  InstanceMirror newInstance(Symbol constructorName,
-                             List positionalArguments,
-                             [Map<Symbol, dynamic> namedArguments]) {
-    return reflect(_getInvokedInstance(constructorName,
-                                       positionalArguments,
-                                       namedArguments));
+  InstanceMirror newInstance(Symbol constructorName, List positionalArguments,
+      [Map<Symbol, dynamic> namedArguments]) {
+    return reflect(_getInvokedInstance(
+        constructorName, positionalArguments, namedArguments));
   }
 
   JsLibraryMirror get owner {
@@ -2001,16 +1995,16 @@
           // Use _superclass == this to represent class with no superclass
           // (Object).
           _superclass = (superclassName == '')
-              ? this : reflectClassByMangledName(superclassName);
-          }
+              ? this
+              : reflectClassByMangledName(superclassName);
         }
       }
+    }
     return _superclass == this ? null : _superclass;
   }
 
-  InstanceMirror invoke(Symbol memberName,
-                        List positionalArguments,
-                        [Map<Symbol,dynamic> namedArguments]) {
+  InstanceMirror invoke(Symbol memberName, List positionalArguments,
+      [Map<Symbol, dynamic> namedArguments]) {
     // Mirror API gotcha: Calling [invoke] on a ClassMirror means invoke a
     // static method.
 
@@ -2065,15 +2059,15 @@
   }
 
   List<TypeVariableMirror> get typeVariables {
-   if (_cachedTypeVariables != null) return _cachedTypeVariables;
-   List result = new List();
-   List typeVariables =
+    if (_cachedTypeVariables != null) return _cachedTypeVariables;
+    List result = new List();
+    List typeVariables =
         JS('JSExtendableArray|Null', '#.prototype["<>"]', _jsConstructor);
     if (typeVariables == null) return result;
     for (int i = 0; i < typeVariables.length; i++) {
       TypeVariable typeVariable = getMetadata(typeVariables[i]);
-      result.add(new JsTypeVariableMirror(typeVariable, this,
-                                          typeVariables[i]));
+      result
+          .add(new JsTypeVariableMirror(typeVariable, this, typeVariables[i]));
     }
     return _cachedTypeVariables = new UnmodifiableListView(result);
   }
@@ -2103,8 +2097,9 @@
     }
     if (other is JsFunctionTypeMirror) {
       return false;
-    } if (other is JsClassMirror &&
-          JS('bool', '# == #', other._jsConstructor, _jsConstructor)) {
+    }
+    if (other is JsClassMirror &&
+        JS('bool', '# == #', other._jsConstructor, _jsConstructor)) {
       return true;
     } else if (superclass == null) {
       return false;
@@ -2115,7 +2110,6 @@
 }
 
 class JsVariableMirror extends JsDeclarationMirror implements VariableMirror {
-
   // TODO(ahe): The values in these fields are virtually untested.
   final String _jsName;
   final bool isFinal;
@@ -2125,19 +2119,12 @@
   final int _type;
   List _metadata;
 
-  JsVariableMirror(Symbol simpleName,
-                   this._jsName,
-                   this._type,
-                   this.isFinal,
-                   this.isStatic,
-                   this._metadataFunction,
-                   this._owner)
+  JsVariableMirror(Symbol simpleName, this._jsName, this._type, this.isFinal,
+      this.isStatic, this._metadataFunction, this._owner)
       : super(simpleName);
 
-  factory JsVariableMirror.from(String descriptor,
-                                metadataFunction,
-                                JsDeclarationMirror owner,
-                                bool isStatic) {
+  factory JsVariableMirror.from(String descriptor, metadataFunction,
+      JsDeclarationMirror owner, bool isStatic) {
     List<String> fieldInformation = descriptor.split('-');
     if (fieldInformation.length == 1) {
       // The field is not available for reflection.
@@ -2180,13 +2167,8 @@
       }
     }
     int type = int.parse(fieldInformation[1], onError: (_) => null);
-    return new JsVariableMirror(s(unmangledName),
-                                jsName,
-                                type,
-                                isFinal,
-                                isStatic,
-                                metadataFunction,
-                                owner);
+    return new JsVariableMirror(s(unmangledName), jsName, type, isFinal,
+        isStatic, metadataFunction, owner);
   }
 
   String get _prettyName => 'VariableMirror';
@@ -2201,7 +2183,8 @@
     preserveMetadata();
     if (_metadata == null) {
       _metadata = (_metadataFunction == null)
-          ? const [] : JS('', '#()', _metadataFunction);
+          ? const []
+          : JS('', '#()', _metadataFunction);
     }
     return _metadata.map(reflect).toList();
   }
@@ -2233,8 +2216,7 @@
 }
 
 class JsClosureMirror extends JsInstanceMirror implements ClosureMirror {
-  JsClosureMirror(reflectee)
-      : super(reflectee);
+  JsClosureMirror(reflectee) : super(reflectee);
 
   MethodMirror get function {
     String cacheName = Primitives.mirrorFunctionCacheName;
@@ -2262,7 +2244,8 @@
             }
             return null;
           })(#, #)''',
-        reflectee, callPrefix);
+        reflectee,
+        callPrefix);
 
     if (callName == null) {
       throw new RuntimeError('Cannot find callName on "$reflectee"');
@@ -2276,22 +2259,29 @@
       if (name == null) {
         throwInvalidReflectionError(name);
       }
-      cachedFunction = new JsMethodMirror.fromUnmangledName(
-          name, target, false, false);
+      cachedFunction =
+          new JsMethodMirror.fromUnmangledName(name, target, false, false);
     } else {
       bool isStatic = true; // TODO(ahe): Compute isStatic correctly.
       var jsFunction = JS('', '#[#]', reflectee, callName);
       var dummyOptionalParameterCount = 0;
       cachedFunction = new JsMethodMirror(
-          s(callName), jsFunction, parameterCount, dummyOptionalParameterCount,
-          false, false, isStatic, false, false);
+          s(callName),
+          jsFunction,
+          parameterCount,
+          dummyOptionalParameterCount,
+          false,
+          false,
+          isStatic,
+          false,
+          false);
     }
     JS('void', r'#.constructor[#] = #', reflectee, cacheName, cachedFunction);
     return cachedFunction;
   }
 
   InstanceMirror apply(List positionalArguments,
-                       [Map<Symbol, dynamic> namedArguments]) {
+      [Map<Symbol, dynamic> namedArguments]) {
     return reflect(
         Function.apply(reflectee, positionalArguments, namedArguments));
   }
@@ -2316,21 +2306,20 @@
   TypeMirror _returnType;
   UnmodifiableListView<ParameterMirror> _parameters;
 
-  JsMethodMirror(Symbol simpleName,
-                 this._jsFunction,
-                 this._requiredParameterCount,
-                 this._optionalParameterCount,
-                 this.isGetter,
-                 this.isSetter,
-                 this.isStatic,
-                 this.isConstructor,
-                 this.isOperator)
+  JsMethodMirror(
+      Symbol simpleName,
+      this._jsFunction,
+      this._requiredParameterCount,
+      this._optionalParameterCount,
+      this.isGetter,
+      this.isSetter,
+      this.isStatic,
+      this.isConstructor,
+      this.isOperator)
       : super(simpleName);
 
-  factory JsMethodMirror.fromUnmangledName(String name,
-                                           jsFunction,
-                                           bool isStatic,
-                                           bool isConstructor) {
+  factory JsMethodMirror.fromUnmangledName(
+      String name, jsFunction, bool isStatic, bool isConstructor) {
     List<String> info = name.split(':');
     name = info[0];
     bool isOperator = isOperatorName(name);
@@ -2349,12 +2338,19 @@
       ReflectionInfo reflectionInfo = new ReflectionInfo(jsFunction);
       requiredParameterCount = reflectionInfo.requiredParameterCount;
       optionalParameterCount = reflectionInfo.optionalParameterCount;
-      assert(int.parse(info[1]) == requiredParameterCount
-          + optionalParameterCount);
+      assert(int.parse(info[1]) ==
+          requiredParameterCount + optionalParameterCount);
     }
     return new JsMethodMirror(
-        s(name), jsFunction, requiredParameterCount, optionalParameterCount,
-        isGetter, isSetter, isStatic, isConstructor, isOperator);
+        s(name),
+        jsFunction,
+        requiredParameterCount,
+        optionalParameterCount,
+        isGetter,
+        isSetter,
+        isStatic,
+        isConstructor,
+        isOperator);
   }
 
   String get _prettyName => 'MethodMirror';
@@ -2384,8 +2380,8 @@
       var formals = new List(_parameterCount);
       ReflectionInfo info = new ReflectionInfo(_jsFunction);
       if (info != null) {
-        assert(_parameterCount
-               == info.requiredParameterCount + info.optionalParameterCount);
+        assert(_parameterCount ==
+            info.requiredParameterCount + info.optionalParameterCount);
         var functionType = info.functionType;
         var type;
         if (functionType is int) {
@@ -2397,8 +2393,7 @@
           TypeMirror ownerType = owner;
           JsClassMirror ownerClass = ownerType.originalDeclaration;
           type = new JsFunctionTypeMirror(
-              info.computeFunctionRti(ownerClass._jsConstructor),
-              owner);
+              info.computeFunctionRti(ownerClass._jsConstructor), owner);
         }
         // Constructors aren't reified with their return type.
         if (isConstructor) {
@@ -2417,9 +2412,11 @@
                 metadataList: annotations);
           } else {
             var defaultValue = info.defaultValue(i);
-            p = new JsParameterMirror(
-                name, this, parameter._type, metadataList: annotations,
-                isOptional: true, isNamed: isNamed, defaultValue: defaultValue);
+            p = new JsParameterMirror(name, this, parameter._type,
+                metadataList: annotations,
+                isOptional: true,
+                isNamed: isNamed,
+                defaultValue: defaultValue);
           }
           formals[i++] = p;
         }
@@ -2449,7 +2446,7 @@
     }
     int positionalLength = positionalArguments.length;
     if (positionalLength < _requiredParameterCount ||
-        positionalLength >  _parameterCount ||
+        positionalLength > _parameterCount ||
         _jsFunction == null) {
       // TODO(ahe): What receiver to use?
       throw new NoSuchMethodError(
@@ -2469,7 +2466,7 @@
     // care who their receiver is. But to lazy getters, it is important that
     // 'this' is '$'.
     return JS('', r'#.apply(#, #)', _jsFunction, JS_GET_STATIC_STATE(),
-              new List.from(positionalArguments));
+        new List.from(positionalArguments));
   }
 
   _getField(JsMirror receiver) {
@@ -2527,13 +2524,11 @@
 
   final List<int> metadataList;
 
-  JsParameterMirror(String unmangledName,
-                    this.owner,
-                    this._type,
-                     {this.metadataList: const <int>[],
-                     this.isOptional: false,
-                     this.isNamed: false,
-                     defaultValue})
+  JsParameterMirror(String unmangledName, this.owner, this._type,
+      {this.metadataList: const <int>[],
+      this.isOptional: false,
+      this.isNamed: false,
+      defaultValue})
       : _defaultValue = defaultValue,
         super(s(unmangledName));
 
@@ -2568,7 +2563,7 @@
   final String _mangledName;
   JsFunctionTypeMirror referent;
 
-  JsTypedefMirror(Symbol simpleName,  this._mangledName, _typeData)
+  JsTypedefMirror(Symbol simpleName, this._mangledName, _typeData)
       : super(simpleName) {
     referent = new JsFunctionTypeMirror(_typeData, this);
   }
@@ -2607,23 +2602,21 @@
   Type get reflectedType => throw new UnimplementedError();
   ClassMirror get superclass => throw new UnimplementedError();
   List<ClassMirror> get superinterfaces => throw new UnimplementedError();
-  Map<Symbol, DeclarationMirror> get declarations
-      => throw new UnimplementedError();
-  Map<Symbol, MethodMirror> get instanceMembers
-      => throw new UnimplementedError();
+  Map<Symbol, DeclarationMirror> get declarations =>
+      throw new UnimplementedError();
+  Map<Symbol, MethodMirror> get instanceMembers =>
+      throw new UnimplementedError();
   Map<Symbol, MethodMirror> get staticMembers => throw new UnimplementedError();
   ClassMirror get mixin => throw new UnimplementedError();
-  InstanceMirror newInstance(
-      Symbol constructorName,
-      List positionalArguments,
-      [Map<Symbol, dynamic> namedArguments]) => throw new UnimplementedError();
-  InstanceMirror invoke(Symbol memberName,
-                        List positionalArguments,
-                        [Map<Symbol, dynamic> namedArguments])
-      => throw new UnimplementedError();
+  InstanceMirror newInstance(Symbol constructorName, List positionalArguments,
+          [Map<Symbol, dynamic> namedArguments]) =>
+      throw new UnimplementedError();
+  InstanceMirror invoke(Symbol memberName, List positionalArguments,
+          [Map<Symbol, dynamic> namedArguments]) =>
+      throw new UnimplementedError();
   InstanceMirror getField(Symbol fieldName) => throw new UnimplementedError();
-  InstanceMirror setField(Symbol fieldName, Object value)
-      => throw new UnimplementedError();
+  InstanceMirror setField(Symbol fieldName, Object value) =>
+      throw new UnimplementedError();
   delegate(Invocation invocation) => throw new UnimplementedError();
   List<TypeVariableMirror> get typeVariables => throw new UnimplementedError();
   List<TypeMirror> get typeArguments => throw new UnimplementedError();
@@ -2662,36 +2655,39 @@
   }
 
   bool get _hasArguments {
-    return JS('bool', '# in #',
-              JS_GET_NAME(JsGetName.FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG),
-               _typeData);
+    return JS(
+        'bool',
+        '# in #',
+        JS_GET_NAME(JsGetName.FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG),
+        _typeData);
   }
+
   List get _arguments {
-    return JS('JSExtendableArray', '#[#]',
-              _typeData,
-              JS_GET_NAME(JsGetName.FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG));
+    return JS('JSExtendableArray', '#[#]', _typeData,
+        JS_GET_NAME(JsGetName.FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG));
   }
 
   bool get _hasOptionalArguments {
-    return JS('bool', '# in #',
-              JS_GET_NAME(JsGetName.FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG),
-              _typeData);
+    return JS(
+        'bool',
+        '# in #',
+        JS_GET_NAME(JsGetName.FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG),
+        _typeData);
   }
+
   List get _optionalArguments {
-    return JS('JSExtendableArray', '#[#]',
-              _typeData,
-              JS_GET_NAME(JsGetName.FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG));
+    return JS('JSExtendableArray', '#[#]', _typeData,
+        JS_GET_NAME(JsGetName.FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG));
   }
 
   bool get _hasNamedArguments {
     return JS('bool', '# in #',
-              JS_GET_NAME(JsGetName.FUNCTION_TYPE_NAMED_PARAMETERS_TAG),
-              _typeData);
+        JS_GET_NAME(JsGetName.FUNCTION_TYPE_NAMED_PARAMETERS_TAG), _typeData);
   }
+
   get _namedArguments {
-    return JS('=Object', '#[#]',
-              _typeData,
-              JS_GET_NAME(JsGetName.FUNCTION_TYPE_NAMED_PARAMETERS_TAG));
+    return JS('=Object', '#[#]', _typeData,
+        JS_GET_NAME(JsGetName.FUNCTION_TYPE_NAMED_PARAMETERS_TAG));
   }
 
   bool get isOriginalDeclaration => true;
@@ -2730,8 +2726,8 @@
         result.add(new JsParameterMirror(name, this, type));
       }
     }
-    return _cachedParameters = new UnmodifiableListView<ParameterMirror>(
-        result);
+    return _cachedParameters =
+        new UnmodifiableListView<ParameterMirror>(result);
   }
 
   String _unmangleIfPreserved(String mangled) {
@@ -2804,8 +2800,7 @@
 }
 
 TypeMirror typeMirrorFromRuntimeTypeRepresentation(
-    DeclarationMirror owner,
-    var /*int|List|JsFunction|TypeImpl*/ type) {
+    DeclarationMirror owner, var /*int|List|JsFunction|TypeImpl*/ type) {
   // TODO(ahe): This method might benefit from using convertRtiToRuntimeType
   // instead of working on strings.
   ClassMirror ownerClass;
@@ -2852,8 +2847,7 @@
       // [type] represents a type variable used as type argument for example
       // the type argument of Bar: class Foo<T> extends Bar<T> {}
       TypeMirror typeArgument = getTypeArgument(type);
-      if (typeArgument is JsTypeVariableMirror)
-        return typeArgument;
+      if (typeArgument is JsTypeVariableMirror) return typeArgument;
     }
     String substituteTypeVariable(int index) {
       var typeArgument = getTypeArgument(index);
@@ -2873,6 +2867,7 @@
       }
       return typeArgument._mangledName;
     }
+
     representation =
         runtimeTypeToString(type, onTypeVariable: substituteTypeVariable);
   }
@@ -2905,19 +2900,17 @@
   if (metadataFunction != null) return JS('', '#()', metadataFunction);
   if (JS('bool', 'typeof # != "function"', victim)) return const [];
   if (JS('bool', '# in #', r'$metadataIndex', victim)) {
-    return JSArray.markFixedList(
-        JS('JSExtendableArray',
-           r'#.$reflectionInfo.splice(#.$metadataIndex)', victim, victim))
-        .map((int i) => getMetadata(i)).toList();
+    return JSArray
+        .markFixedList(JS('JSExtendableArray',
+            r'#.$reflectionInfo.splice(#.$metadataIndex)', victim, victim))
+        .map((int i) => getMetadata(i))
+        .toList();
   }
   return const [];
 }
 
-void parseCompactFieldSpecification(
-    JsDeclarationMirror owner,
-    fieldSpecification,
-    bool isStatic,
-    List<Mirror> result) {
+void parseCompactFieldSpecification(JsDeclarationMirror owner,
+    fieldSpecification, bool isStatic, List<Mirror> result) {
   List fieldsMetadata = null;
   List<String> fields;
   if (fieldSpecification is List) {
@@ -2930,7 +2923,7 @@
   }
   int fieldNumber = 0;
   for (String field in fields) {
-    if (r'$ti' == field) continue;  // Strip type info pseudofield.
+    if (r'$ti' == field) continue; // Strip type info pseudofield.
     var metadata;
     if (fieldsMetadata != null) {
       metadata = fieldsMetadata[fieldNumber++];
@@ -2950,29 +2943,29 @@
 
 bool isOperatorName(String name) {
   switch (name) {
-  case '==':
-  case '[]':
-  case '*':
-  case '/':
-  case '%':
-  case '~/':
-  case '+':
-  case '<<':
-  case '>>':
-  case '>=':
-  case '>':
-  case '<=':
-  case '<':
-  case '&':
-  case '^':
-  case '|':
-  case '-':
-  case 'unary-':
-  case '[]=':
-  case '~':
-    return true;
-  default:
-    return false;
+    case '==':
+    case '[]':
+    case '*':
+    case '/':
+    case '%':
+    case '~/':
+    case '+':
+    case '<<':
+    case '>>':
+    case '>=':
+    case '>':
+    case '<=':
+    case '<':
+    case '&':
+    case '^':
+    case '|':
+    case '-':
+    case 'unary-':
+    case '[]=':
+    case '~':
+      return true;
+    default:
+      return false;
   }
 }
 
@@ -3010,35 +3003,28 @@
   final int _kind;
 
   NoSuchStaticMethodError.missingConstructor(
-      this._cls,
-      this._name,
-      this._positionalArguments,
-      this._namedArguments)
+      this._cls, this._name, this._positionalArguments, this._namedArguments)
       : _kind = MISSING_CONSTRUCTOR;
 
   /// If the given class is `null` the static method/getter/setter is top-level.
   NoSuchStaticMethodError.method(
-      this._cls,
-      this._name,
-      this._positionalArguments,
-      this._namedArguments)
+      this._cls, this._name, this._positionalArguments, this._namedArguments)
       : _kind = MISSING_METHOD;
 
   String toString() {
     // TODO(floitsch): show arguments.
-    switch(_kind) {
-    case MISSING_CONSTRUCTOR:
-      return
-          "NoSuchMethodError: No constructor named '${n(_name)}' in class"
-          " '${n(_cls.qualifiedName)}'.";
-    case MISSING_METHOD:
-      if (_cls == null) {
-        return "NoSuchMethodError: No top-level method named '${n(_name)}'.";
-      }
-      return "NoSuchMethodError: No static method named '${n(_name)}' in"
-             " class '${n(_cls.qualifiedName)}'";
-    default:
-      return 'NoSuchMethodError';
+    switch (_kind) {
+      case MISSING_CONSTRUCTOR:
+        return "NoSuchMethodError: No constructor named '${n(_name)}' in class"
+            " '${n(_cls.qualifiedName)}'.";
+      case MISSING_METHOD:
+        if (_cls == null) {
+          return "NoSuchMethodError: No top-level method named '${n(_name)}'.";
+        }
+        return "NoSuchMethodError: No static method named '${n(_name)}' in"
+            " class '${n(_cls.qualifiedName)}'";
+      default:
+        return 'NoSuchMethodError';
     }
   }
 }
@@ -3048,8 +3034,7 @@
     return new _symbol_dev.Symbol.validated(name);
   }
   if (library == null) {
-    throw new ArgumentError(
-        "Library required for private symbol name: $name");
+    throw new ArgumentError("Library required for private symbol name: $name");
   }
   if (!_symbol_dev.Symbol.isValidSymbol(name)) {
     throw new ArgumentError("Not a valid symbol name: $name");
diff --git a/sdk/lib/_internal/js_runtime/lib/mirrors_patch.dart b/sdk/lib/_internal/js_runtime/lib/mirrors_patch.dart
index eb6319c..c370043 100644
--- a/sdk/lib/_internal/js_runtime/lib/mirrors_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/mirrors_patch.dart
@@ -43,9 +43,9 @@
 }
 
 @patch
-TypeMirror reflectType(Type key) {
+TypeMirror reflectType(Type key, [List<Type> typeArguments]) {
   if (key == dynamic) {
     return currentMirrorSystem().dynamicType;
   }
-  return js.reflectType(key);
+  return js.reflectType(key, typeArguments);
 }
diff --git a/sdk/lib/core/string.dart b/sdk/lib/core/string.dart
index 40d87bf..78818b7 100644
--- a/sdk/lib/core/string.dart
+++ b/sdk/lib/core/string.dart
@@ -360,7 +360,7 @@
   String operator *(int times);
 
   /**
-   * Pads this string on the left if it is shorther than [width].
+   * Pads this string on the left if it is shorter than [width].
    *
    * Return a new string that prepends [padding] onto this string
    * one time for each position the length is less than [width].
@@ -378,7 +378,7 @@
   String padLeft(int width, [String padding = ' ']);
 
   /**
-   * Pads this string on the right if it is shorther than [width].
+   * Pads this string on the right if it is shorter than [width].
    *
    * Return a new string that appends [padding] after this string
    * one time for each position the length is less than [width].
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 39f4dc3..afa40c5 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -37662,10 +37662,10 @@
     if ((blob_OR_source_OR_stream is Blob || blob_OR_source_OR_stream == null)) {
       return _blink.BlinkURL.instance.createObjectURL_Callback_1_(blob_OR_source_OR_stream);
     }
-    if ((blob_OR_source_OR_stream is MediaSource)) {
+    if ((blob_OR_source_OR_stream is MediaStream)) {
       return _blink.BlinkURL.instance.createObjectURL_Callback_1_(blob_OR_source_OR_stream);
     }
-    if ((blob_OR_source_OR_stream is MediaStream)) {
+    if ((blob_OR_source_OR_stream is MediaSource)) {
       return _blink.BlinkURL.instance.createObjectURL_Callback_1_(blob_OR_source_OR_stream);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
diff --git a/sdk/lib/internal/iterable.dart b/sdk/lib/internal/iterable.dart
index 637b021..5ab7d4c 100644
--- a/sdk/lib/internal/iterable.dart
+++ b/sdk/lib/internal/iterable.dart
@@ -402,8 +402,7 @@
  *
  * Expects efficient `length` and `elementAt` on the source iterable.
  */
-class MappedListIterable<S, T> extends ListIterable<T>
-                               implements EfficientLengthIterable<T> {
+class MappedListIterable<S, T> extends ListIterable<T> {
   final Iterable<S> _source;
   final _Transformation<S, T> _f;
 
diff --git a/sdk/lib/mirrors/mirrors.dart b/sdk/lib/mirrors/mirrors.dart
index 3aa88f4..4cfbf19 100644
--- a/sdk/lib/mirrors/mirrors.dart
+++ b/sdk/lib/mirrors/mirrors.dart
@@ -171,11 +171,16 @@
  * If [key] is not an instance of [Type], then this function throws an
  * [ArgumentError].
  *
+ * Optionally takes a list of [typeArguments] for generic classes. If the list
+ * is provided, then the [key] must be a generic class type, and the number of
+ * the provided type arguments must be equal to the number of type variables 
+ * declared by the class.
+ *
  * Note that since one cannot obtain a [Type] object from another isolate, this
  * function can only be used to obtain type mirrors on types of the current
  * isolate.
  */
-external TypeMirror reflectType(Type key);
+external TypeMirror reflectType(Type key, [List<Type> typeArguments]);
 
 /**
  * A [Mirror] reflects some Dart language entity.
@@ -1229,7 +1234,7 @@
  * see the comments for [symbols], [targets], [metaTargets] and [override].
  *
  * An import of `dart:mirrors` may have multiple [MirrorsUsed] annotations. This
- * is particularly helpful to specify overrides for specific libraries. For 
+ * is particularly helpful to specify overrides for specific libraries. For
  * example:
  *
  *     @MirrorsUsed(targets: 'foo.Bar', override: 'foo')
@@ -1241,7 +1246,7 @@
  */
 class MirrorsUsed {
   // Note: the fields of this class are untyped.  This is because the most
-  // convenient way to specify symbols today is using a single string. In 
+  // convenient way to specify symbols today is using a single string. In
   // some cases, a const list of classes might be convenient. Some
   // might prefer to use a const list of symbols.
 
@@ -1258,7 +1263,7 @@
    *
    * Dart2js currently supports the following formats to specify symbols:
    *
-   * * A constant [List] of [String] constants representing symbol names, 
+   * * A constant [List] of [String] constants representing symbol names,
    *   e.g., `const ['foo', 'bar']`.
    * * A single [String] constant whose value is a comma-separated list of
    *   symbol names, e.g., `"foo, bar"`.
@@ -1306,14 +1311,14 @@
    * 1. If the qualified name matches a library name, the matching library is
    *    the target.
    * 2. Else, find the longest prefix of the name such that the prefix ends
-   *    just before a `.` and is a library name. 
+   *    just before a `.` and is a library name.
    * 3. Use that library as current scope. If no matching prefix was found, use
-   *    the current library, i.e., the library where the [MirrorsUsed] 
+   *    the current library, i.e., the library where the [MirrorsUsed]
    *    annotation was placed.
    * 4. Split the remaining suffix (the entire name if no library name was
-   *    found in step 3) into a list of [String] using `.` as a 
+   *    found in step 3) into a list of [String] using `.` as a
    *    separator.
-   * 5. Select all targets in the current scope whose name matches a [String] 
+   * 5. Select all targets in the current scope whose name matches a [String]
    *    from the list.
    *
    * For example:
@@ -1329,11 +1334,11 @@
    *     @MirrorsUsed(targets: "my.library.one.A.aField")
    *     import "dart:mirrors";
    *
-   * The [MirrorsUsed] annotation specifies `A` and `aField` from library 
+   * The [MirrorsUsed] annotation specifies `A` and `aField` from library
    * `my.library.one` as targets. This will mark the class `A` as a reflective
    * target. The target specification for `aField` has no effect, as there is
-   * no target in `my.library.one` with that name. 
-   * 
+   * no target in `my.library.one` with that name.
+   *
    * Note that everything within a target also is available for reflection.
    * So, if a library is specified as target, all classes in that library
    * become targets for reflection. Likewise, if a class is a target, all
@@ -1355,9 +1360,9 @@
    * effect. In particular, adding a library to [metaTargets] does not make
    * the library's classes valid metadata annotations to enable reflection.
    *
-   * If an instance of a class specified in [metaTargets] is used as 
+   * If an instance of a class specified in [metaTargets] is used as
    * metadata annotation on a library, class, field or method, that library,
-   * class, field or  method is added to the set of targets for reflection. 
+   * class, field or  method is added to the set of targets for reflection.
    *
    * Example usage:
    *
@@ -1377,10 +1382,10 @@
    *     }
    *
    * In the above example. `reflectableMethod` is marked as reflectable by
-   * using the `Reflectable` class, which in turn is specified in the 
+   * using the `Reflectable` class, which in turn is specified in the
    * [metaTargets] annotation.
    *
-   * The method `nonReflectableMethod` lacks a metadata annotation and thus 
+   * The method `nonReflectableMethod` lacks a metadata annotation and thus
    * will not be reflectable at runtime.
    */
   final metaTargets;
@@ -1390,7 +1395,7 @@
    *
    * When used as metadata on an import of "dart:mirrors", this metadata does
    * not apply to the library in which the annotation is used, but instead
-   * applies to the other libraries (all libraries if "*" is used). 
+   * applies to the other libraries (all libraries if "*" is used).
    *
    * The following text is non-normative:
    *
@@ -1400,31 +1405,31 @@
    *   libraries.
    * * A single [String] constant whose value is a comma-separated list of
    *   library names.
-   * 
-   * Conceptually, a [MirrorsUsed] annotation with [override] has the same 
+   *
+   * Conceptually, a [MirrorsUsed] annotation with [override] has the same
    * effect as placing the annotation directly on the import of `dart:mirrors`
-   * in each of the referenced libraries. Thus, if the library had no 
-   * [MirrorsUsed] annotation before, its unconditional import of 
+   * in each of the referenced libraries. Thus, if the library had no
+   * [MirrorsUsed] annotation before, its unconditional import of
    * `dart:mirrors` is overridden by an annotated import.
-   * 
+   *
    * Note that, like multiple explicit [MirrorsUsed] annotations, using
    * override on a library with an existing [MirrorsUsed] annotation is
    * additive. That is, the overall set of reflective targets is the union
    * of the reflective targets that arise from the original and the
-   * overriding [MirrorsUsed] annotations. 
+   * overriding [MirrorsUsed] annotations.
    *
-   * The use of [override] is only meaningful for libraries that have an 
+   * The use of [override] is only meaningful for libraries that have an
    * import of `dart:mirrors` without annotation because otherwise it would
    * work exactly the same way without the [override] parameter.
    *
    * While the annotation will apply to the given target libraries, the
-   * [symbols], [targets] and [metaTargets] are still evaluated in the 
+   * [symbols], [targets] and [metaTargets] are still evaluated in the
    * scope of the annotation. Thus, to select a target from library `foo`,
    * a qualified name has to be used or, if the target is visible in the
    * current scope, its type may be referenced.
-   * 
+   *
    * For example, the following code marks all targets in the library `foo`
-   * as reflectable that have a metadata annotation using the `Reflectable` 
+   * as reflectable that have a metadata annotation using the `Reflectable`
    * class from the same library.
    *
    *     @MirrorsUsed(metaTargets: "foo.Reflectable", override: "foo")
@@ -1438,8 +1443,8 @@
   final override;
 
   /**
-   * See the documentation for [MirrorsUsed.symbols], [MirrorsUsed.targets], 
-   * [MirrorsUsed.metaTargets] and [MirrorsUsed.override] for documentation 
+   * See the documentation for [MirrorsUsed.symbols], [MirrorsUsed.targets],
+   * [MirrorsUsed.metaTargets] and [MirrorsUsed.override] for documentation
    * of the parameters.
    */
   const MirrorsUsed(
diff --git a/tests/benchmark_smoke/benchmark_smoke.status b/tests/benchmark_smoke/benchmark_smoke.status
index 69c792c..de17765 100644
--- a/tests/benchmark_smoke/benchmark_smoke.status
+++ b/tests/benchmark_smoke/benchmark_smoke.status
@@ -10,7 +10,3 @@
 
 [ $compiler == dart2js && $cps_ir && $checked ]
 *: Skip # Issue 25761
-
-[ $compiler == dart2analyzer ]
-# Issue #28236
-benchmark_smoke_test: StaticWarning
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
index f51c40d..953714c 100644
--- a/tests/co19/co19-kernel.status
+++ b/tests/co19/co19-kernel.status
@@ -122,27 +122,18 @@
 
 # dartk: Shared JIT & Precompiled failures
 [ ($compiler == dartk && $runtime == vm) || ($compiler == dartkp && $runtime == dart_precompiled) ]
-Language/Classes/Constructors/Generative_Constructors/execution_of_a_superinitializer_t01: RuntimeError
 Language/Classes/Constructors/Generative_Constructors/execution_of_an_initializer_t02: RuntimeError
 Language/Classes/Constructors/Generative_Constructors/initializing_formals_execution_t02: RuntimeError
 Language/Classes/definition_t23: CompileTimeError
-Language/Enums/declaration_equivalent_t01: RuntimeError
-Language/Expressions/Constants/string_length_t01: Crash
 Language/Expressions/Function_Invocation/Function_Expression_Invocation/not_a_function_expression_t01: RuntimeError
 Language/Expressions/Function_Invocation/Unqualified_Invocation/function_expr_invocation_t03: RuntimeError
 Language/Expressions/Function_Invocation/Unqualified_Invocation/function_expr_invocation_t04: RuntimeError
 Language/Expressions/Function_Invocation/Unqualified_Invocation/static_method_invocation_t02: RuntimeError
-Language/Expressions/Function_Invocation/async_cleanup_t07: Fail
-Language/Expressions/Function_Invocation/async_cleanup_t08: Fail
-Language/Expressions/Function_Invocation/async_generator_invokation_t05: RuntimeError
-Language/Expressions/Function_Invocation/async_generator_invokation_t06: RuntimeError
-Language/Expressions/Function_Invocation/async_generator_invokation_t09: RuntimeError
 Language/Expressions/Identifier_Reference/built_in_identifier_t35: Pass
 Language/Expressions/Identifier_Reference/built_in_identifier_t36: Pass
 Language/Expressions/Identifier_Reference/built_in_identifier_t37: Pass
 Language/Expressions/Identifier_Reference/built_in_not_dynamic_t14: Pass
 Language/Expressions/Identifier_Reference/evaluation_property_extraction_t03: RuntimeError
-Language/Expressions/Identifier_Reference/evaluation_type_parameter_t01: RuntimeError
 Language/Expressions/Instance_Creation/New/evaluation_t12: RuntimeError
 Language/Expressions/Instance_Creation/New/evaluation_t19: RuntimeError
 Language/Expressions/Instance_Creation/New/evaluation_t20: RuntimeError
@@ -166,14 +157,8 @@
 Language/Libraries_and_Scripts/Imports/invalid_uri_t02: Pass
 Language/Libraries_and_Scripts/Parts/syntax_t06: Pass
 Language/Statements/Labels/syntax_t03: Pass
-Language/Statements/Rethrow/execution_t04: RuntimeError
 Language/Statements/Switch/syntax_t02: Pass
 Language/Statements/Try/catch_scope_t01: RuntimeError
-Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t04: Fail
-Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t05: Fail
-Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t06: Fail
-Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t01: RuntimeError
-Language/Types/Interface_Types/subtype_t44: RuntimeError
 Language/Types/Static_Types/deferred_type_t01: RuntimeError
 Language/Variables/final_t01/01: MissingRuntimeError
 Language/Variables/final_t02/01: MissingRuntimeError
@@ -197,7 +182,6 @@
 # dartk: JIT failures (debug)
 [ $compiler == dartk && $runtime == vm && $mode == debug ]
 Language/Expressions/Shift/syntax_t15: Crash  # Invalid class id during isolate shutdown Heap::VerifyGC
-Language/Expressions/Spawning_an_Isolate/new_isolate_t01: Crash  # Class finalization issue
 Language/Libraries_and_Scripts/Scripts/top_level_main_t05: Crash  # !main_obj.IsNull()
 
 # dartk: precompilation failures
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index b4e205c..fcf344b 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -189,12 +189,6 @@
 [ ($runtime == vm || $runtime == dart_precompiled ) && $mode == debug ]
 LibTest/core/List/List_class_A01_t02: Pass, Slow
 LibTest/isolate/Isolate/spawn_A04_t01: Pass, Fail  # Issue 28269
-Language/Types/Interface_Types/subtype_t28: Pass, Slow
-Language/Types/Interface_Types/subtype_t27: Pass, Slow
-LibTest/collection/ListMixin/ListMixin_class_A01_t02: Pass, Slow
-
-[ ($runtime == dart_precompiled || $runtime == dart_app) && $mode == debug ]
-Language/Libraries_and_Scripts/Imports/deferred_import_t02: Crash # Issue 27201
 
 [ ($runtime == vm || $runtime == dart_precompiled) && ($arch != x64 && $arch != simarm64 && $arch != arm64 && $arch != simdbc64 && $arch != simdbc) ]
 LibTest/core/int/operator_left_shift_A01_t02: Fail # co19 issue 129
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 2dfdb3b..c730f6e 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -160,6 +160,7 @@
 
 [ $runtime == vm || $runtime == dart_precompiled ]
 regexp/global_test: Skip # Timeout. Issue 21709 and 21708
+regexp/pcre_test: Pass, Slow, Timeout # Issues 21593 and 22008
 
 [ $runtime != vm && $runtime != dart_precompiled && $compiler != dart2analyzer]
 data_resource_test: RuntimeError # Issue 23825 (not implemented yet).
diff --git a/tests/corelib_strong/corelib_strong_kernel.status b/tests/corelib_strong/corelib_strong_kernel.status
index 945b79f..8b36750 100644
--- a/tests/corelib_strong/corelib_strong_kernel.status
+++ b/tests/corelib_strong/corelib_strong_kernel.status
@@ -8,6 +8,7 @@
 compare_to2_test: RuntimeError
 const_list_remove_range_test: DartkCompileTimeError
 const_list_set_range_test: DartkCompileTimeError
+hash_map2_test: Crash # VM does not support BottomType
 int_from_environment_test: RuntimeError
 iterable_return_type_test/01: RuntimeError
 iterable_return_type_test/02: RuntimeError
@@ -33,4 +34,4 @@
 string_case_test/01: RuntimeError
 string_from_environment2_test: RuntimeError
 string_from_environment_test: RuntimeError
-unicode_test: RuntimeError
\ No newline at end of file
+unicode_test: RuntimeError
diff --git a/tests/html/html.status b/tests/html/html.status
index 14ab0bd..0bf4421 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -422,163 +422,6 @@
 window_nosuchmethod_test: StaticWarning
 js_typed_interop_default_arg_test/default_value: MissingCompileTimeError # Issue #25759
 
-# Issue #28236
-async_spawnuri_test: StaticWarning
-async_test: StaticWarning
-audiobuffersourcenode_test: StaticWarning
-audiocontext_test: StaticWarning
-audioelement_test: StaticWarning
-b_element_test: StaticWarning
-blob_constructor_test: StaticWarning
-cache_test: StaticWarning
-callbacks_test: StaticWarning
-canvas_pixel_array_type_alias_test: StaticWarning
-canvas_test: StaticWarning
-canvasrenderingcontext2d_test: StaticWarning
-cdata_test: StaticWarning
-client_rect_test: StaticWarning
-cross_domain_iframe_test: StaticWarning
-crypto_test: StaticWarning
-css_rule_list_test: StaticWarning
-css_test: StaticWarning
-cssstyledeclaration_test: StaticWarning
-custom/attribute_changed_callback_test: StaticWarning
-custom/constructor_calls_created_synchronously_test: StaticWarning
-custom/created_callback_test: StaticWarning
-custom/document_register_template_test: StaticWarning
-custom/document_register_type_extensions_test: StaticWarning
-custom/entered_left_view_test: StaticWarning
-custom/js_custom_test: StaticWarning
-custom/mirrors_test: StaticWarning
-custom/regress_194523002_test: StaticWarning
-custom_element_method_clash_test: StaticWarning
-custom_element_name_clash_test: StaticWarning
-custom_elements_23127_test: StaticWarning
-custom_elements_test: StaticWarning
-custom_tags_test: StaticWarning
-dart_object_local_storage_test: StaticWarning
-document_test: StaticWarning
-dom_constructors_test: StaticWarning
-domparser_test: StaticWarning
-element_animate_test: StaticWarning
-element_classes_svg_test: StaticWarning
-element_classes_test: StaticWarning
-element_constructor_1_test: StaticWarning
-element_dimensions_test: StaticWarning
-element_offset_test: StaticWarning
-element_types_constructors1_test: StaticWarning
-element_types_constructors2_test: StaticWarning
-element_types_constructors3_test: StaticWarning
-element_types_constructors4_test: StaticWarning
-element_types_constructors5_test: StaticWarning
-element_types_constructors6_test: StaticWarning
-element_types_test: StaticWarning
-event_customevent_test: StaticWarning
-event_test: StaticWarning
-exceptions_test: StaticWarning
-fileapi_test: StaticWarning
-filereader_test: StaticWarning
-filteredelementlist_test: StaticWarning
-fontface_loaded_test: StaticWarning
-fontface_test: StaticWarning
-form_data_test: StaticWarning
-form_element_test: StaticWarning
-gamepad_test: StaticWarning
-geolocation_test: StaticWarning
-hidden_dom_1_test: StaticWarning
-hidden_dom_2_test: StaticWarning
-history_test: StaticWarning
-htmlcollection_test: StaticWarning
-htmloptionscollection_test: StaticWarning
-indexeddb_1_test: StaticWarning
-indexeddb_2_test: StaticWarning
-indexeddb_3_test: StaticWarning
-indexeddb_4_test: StaticWarning
-indexeddb_5_test: StaticWarning
-input_element_test: StaticWarning
-instance_of_test: StaticWarning
-isolates_test: StaticWarning
-js_array_test: StaticWarning
-js_dart_to_string_test: StaticWarning
-js_dispatch_property_test: StaticWarning
-js_function_getter_test: StaticWarning
-js_interop_1_test: StaticWarning
-js_interop_constructor_name_test: StaticWarning
-js_test: StaticWarning
-js_type_test: StaticWarning
-js_typed_interop_anonymous2_exp_test: StaticWarning
-js_typed_interop_anonymous2_test: StaticWarning
-js_typed_interop_anonymous_exp_test: StaticWarning
-js_typed_interop_anonymous_test: StaticWarning
-js_typed_interop_anonymous_unreachable_exp_test: StaticWarning
-js_typed_interop_anonymous_unreachable_test: StaticWarning
-js_typed_interop_bind_this_test: StaticWarning
-js_typed_interop_callable_object_test: StaticWarning
-js_typed_interop_default_arg_test/explicit_argument: StaticWarning
-js_typed_interop_default_arg_test/none: StaticWarning
-js_typed_interop_side_cast_exp_test: StaticWarning
-js_typed_interop_side_cast_test: StaticWarning
-js_typed_interop_test: StaticWarning
-js_typed_interop_window_property_test: StaticWarning
-js_util_test: StaticWarning
-keyboard_event_test: StaticWarning
-location_test: StaticWarning
-media_stream_test: StaticWarning
-mediasource_test: StaticWarning
-messageevent_test: StaticWarning
-mirrors_js_typed_interop_test: StaticWarning
-mouse_event_test: StaticWarning
-native_gc_test: StaticWarning
-navigator_test: StaticWarning
-node_test: StaticWarning
-node_validator_important_if_you_suppress_make_the_bug_critical_test: StaticWarning
-non_instantiated_is_test: StaticWarning
-notification_test: StaticWarning
-performance_api_test: StaticWarning
-postmessage_structured_test: StaticWarning
-query_test: StaticWarning
-range_test: StaticWarning
-request_animation_frame_test: StaticWarning
-rtc_test: StaticWarning
-selectelement_test: StaticWarning
-serialized_script_value_test: StaticWarning
-shadow_dom_test: StaticWarning
-shadowroot_test: StaticWarning
-speechrecognition_test: StaticWarning
-storage_test: StaticWarning
-streams_test: StaticWarning
-svg_test: StaticWarning
-svgelement_test: StaticWarning
-table_test: StaticWarning
-text_event_test: StaticWarning
-touchevent_test: StaticWarning
-transition_event_test: StaticWarning
-trusted_html_tree_sanitizer_test: StaticWarning
-typed_arrays_1_test: StaticWarning
-typed_arrays_2_test: StaticWarning
-typed_arrays_3_test: StaticWarning
-typed_arrays_4_test: StaticWarning
-typed_arrays_5_test: StaticWarning
-typed_arrays_arraybuffer_test: StaticWarning
-typed_arrays_dataview_test: StaticWarning
-typed_arrays_simd_test: StaticWarning
-unknownelement_test: StaticWarning
-uri_test: StaticWarning
-url_test: StaticWarning
-webgl_extensions_test: StaticWarning
-websocket_test: StaticWarning
-websql_test: StaticWarning
-wheelevent_test: StaticWarning
-window_eq_test: StaticWarning
-window_mangling_test: StaticWarning
-window_test: StaticWarning
-worker_api_test: StaticWarning
-worker_test: StaticWarning
-wrapping_collections_test: StaticWarning
-xhr_cross_origin_test: StaticWarning
-xhr_test: StaticWarning
-xsltprocessor_test: StaticWarning
-
 [ $compiler == dart2js && $fast_startup ]
 custom/constructor_calls_created_synchronously_test: Fail # mirrors not supported
 custom/js_custom_test: Fail # mirrors not supported
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index 7a921a0..02c7df0 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -154,43 +154,12 @@
 simple_message_test/none: RuntimeError, OK  # Uses Isolate.spawn.
 start_paused_test: RuntimeError, OK  # Uses Isolate.spawn.
 message3_test/int32x4: RuntimeError, OK  # Uses Isolate.spawn.
-browser/package_*: Skip # Issue 25594 (missing implementation in Dartium).
+browser/package_resolve_browser_hook*: Skip # Tests that use defaultPackagesBase (not supported in Dartium).
 
 [ $compiler == dart2analyzer ]
 browser/typed_data_message_test: StaticWarning
 mint_maker_test: StaticWarning
 
-# Issue #28236
-browser/compute_this_script_browser_test: StaticWarning
-browser/package_resolve_browser_hook2_test: StaticWarning
-browser/package_resolve_browser_hook_test: StaticWarning
-browser/package_resolve_browser_test: StaticWarning
-count_test: StaticWarning
-cross_isolate_message_test: StaticWarning
-deferred_in_isolate2_test: StaticWarning
-illegal_msg_function_test: StaticWarning
-illegal_msg_mirror_test: StaticWarning
-isolate_complex_messages_test: StaticWarning
-mandel_isolate_test: StaticWarning
-message2_test: StaticWarning
-message_test: StaticWarning
-nested_spawn2_test: StaticWarning
-nested_spawn_test: StaticWarning
-raw_port_test: StaticWarning
-request_reply_test: StaticWarning
-spawn_function_custom_class_test: StaticWarning
-spawn_function_test: StaticWarning
-spawn_uri_multi_test/01: StaticWarning
-spawn_uri_multi_test/none: StaticWarning
-spawn_uri_nested_vm_test: StaticWarning
-spawn_uri_test: StaticWarning
-spawn_uri_vm_test: StaticWarning
-stacktrace_message_test: StaticWarning
-static_function_test: StaticWarning
-timer_isolate_test: StaticWarning
-unresolved_ports_test: StaticWarning
-
-
 [ $compiler == none && $runtime == vm ]
 scenarios/short_package/short_package_test: Fail, OK  # We do not plan to support the tested behavior anyway.
 
@@ -268,3 +237,8 @@
 deferred_in_isolate2_test: Crash # Requires deferred libraries
 issue_21398_parent_isolate2_test: Crash # Requires deferred libraries
 spawn_uri_nested_vm_test: Pass, Crash # Issue 28192
+
+[ $builder_tag == asan && $arch == x64 ]
+function_send_test: Fail # Issue 28351
+function_send1_test: Fail # Issue 28351
+issue_21398_parent_isolate_test: Fail # Issue 28351
diff --git a/tests/language/covariant_override_test.dart b/tests/language/covariant_override_test.dart
new file mode 100644
index 0000000..7a91126
--- /dev/null
+++ b/tests/language/covariant_override_test.dart
@@ -0,0 +1,92 @@
+
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library covariant_override_test;
+
+// This test contains cases where `covariant` is used as intended.
+
+abstract class A {
+  A(this.f1, this.f2, this.f3);
+
+  // Normal usage, "by design": superclass requests covariance.
+  void m1(covariant Object o);
+
+  // Normal usage, "ad hoc": subclass requests covariance.
+  void m2(Object o);
+
+  // Syntactic special case: omit the type in subclass.
+  void m3(Object o);
+
+  // Positional optional arguments.
+  void m4([covariant Object o]);
+  void m5([Object o]);
+  void m6([Object o]);
+
+  // Named arguments.
+  void m7({covariant Object arg});
+  void m8({Object arg});
+  void m9({Object arg});
+
+  // Normal usage on field, "by design": superclass requests covariance.
+  covariant Object f1;
+
+  // Normal usage on field, "ad hoc": subclass requests covariance.
+  Object f2;
+
+  // Syntactic special case.
+  Object f3;
+}
+
+abstract class B extends A {
+  B(num f1, num f2, num f3): super(f1, f2, f3);
+
+  void m1(num n);
+  void m2(covariant num n);
+  void m3(covariant n);
+  void m4([num n]);
+  void m5([covariant num n]);
+  void m6([covariant n]);
+  void m7({num arg});
+  void m8({covariant num arg});
+  void m9({covariant arg});
+  void set f1(num n);
+  void set f2(covariant num n);
+  void set f3(covariant n);
+}
+
+class C extends B {
+  C(int f1, int f2, int f3): super(f1, f2, f3);
+  
+  void m1(int i) {}
+  void m2(int i) {}
+  void m3(int i) {}
+  void m4([int i]) {}
+  void m5([int i]) {}
+  void m6([int i]) {}
+  void m7({int arg}) {}
+  void m8({int arg}) {}
+  void m9({int arg}) {}
+  void set f1(int i) {}
+  void set f2(int i) {}
+  void set f3(int i) {}
+}
+
+main() {
+  // For Dart 1.x, `covariant` has no runtime semantics; we just ensure
+  // that the code is not unused, such that we know it will be parsed.
+  A a = new C(39, 40, 41);
+  a.m1(42);
+  a.m2(42);
+  a.m3(42);
+  a.m4(42);
+  a.m5(42);
+  a.m6(42);
+  a.m7(arg: 42);
+  a.m8(arg: 42);
+  a.m9(arg: 42);
+  a.f1 = 42;
+  a.f2 = 42;
+  a.f3 = 42;
+}
diff --git a/tests/language/covariant_test.dart b/tests/language/covariant_test.dart
new file mode 100644
index 0000000..b93c901
--- /dev/null
+++ b/tests/language/covariant_test.dart
@@ -0,0 +1,378 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test that `covariant` can be parsed (and ignored) by
+// dart2js and the VM.
+// This test only checks for non-strong mode behavior.
+//
+// Generally, `covariant` should be ignored, when it is used in the right
+// places.
+
+import 'package:expect/expect.dart';
+
+// Top level field may not have a covariant.
+// Would be considered a minor (acceptable) bug, if it was accepted here too.
+covariant  /// 00: compile-time error
+int x0;
+
+// Getters may never have `covariant`. (Neither on the top-level nor as members)
+covariant  /// 01: compile-time error
+int get x1 => 499;
+
+// Top level setters may not have a covariant.
+// Would be considered a minor (acceptable) bug, if it was accepted here too.
+void set x2(
+    covariant /// 02: compile-time error
+    int val) {}
+
+// Same as above, but with `covariant` in different positions.
+// The `covariant` is just wrong there.
+
+int
+covariant  /// 03: compile-time error
+x3;
+
+int
+covariant  /// 04: compile-time error
+get x4 => 499;
+
+void set x5(
+    int
+    covariant /// 05: compile-time error
+    val) {}
+
+
+// Same without types.
+
+// Since `covariant` is a built-in identifier, it is not allowed here.
+covariant x6;  /// 06: compile-time error
+
+// Getters may never have `covariant`.
+covariant  /// 07: compile-time error
+get x7 => 499;
+
+// Top level setters may not have a covariant.
+// Would be considered a minor (acceptable) bug, if it was accepted here too.
+void set x8(
+    covariant /// 08: compile-time error
+    val) {}
+
+// If there is no type, then `covariant` is simply the parameter name:
+void set x9(covariant) {}
+
+// Covariant won't work on return types.
+covariant  /// 10: compile-time error
+int f10() => 499;
+
+// Covariant won't work as a return type.
+covariant  /// 11: compile-time error
+f11() => 499;
+
+// Covariant should not work on top-level methods.
+// It's a minor (acceptable) bug to not error out here.
+int f12(
+    covariant /// 12: compile-time error
+    int x) => 499;
+
+// `Covariant` must be in front of the types.
+int f13(
+    int
+    covariant /// 13: compile-time error
+    x) => 499;
+
+// Covariant should not work on top-level methods.
+// It's a minor (acceptable) bug to not error out here.
+int f14(
+    covariant /// 14: compile-time error
+    final
+    x) => 499;
+
+// `Covariant` must be in front of modifiers.
+int f15(
+    final
+    covariant /// 15: compile-time error
+    x) => 499;
+
+// Covariant should not work on top-level methods.
+// It's a minor (acceptable) bug to not error out here.
+int f16(
+    covariant /// 16: compile-time error
+    final
+    int
+    x) => 499;
+
+// `Covariant` must be in front of modifiers.
+int f17(
+    final
+    covariant /// 17: compile-time error
+    int
+    x) => 499;
+
+// On its own, `covariant` is just a parameter name.
+int f18(covariant) => covariant;
+
+// All of the above as statics in a class.
+class A {
+  // Static fields may not have a covariant.
+  // Would be considered a minor (acceptable) bug, if it was accepted here too.
+  static
+  covariant  /// 20: compile-time error
+  int x20;
+
+  // Getters may never have `covariant`.
+  static
+  covariant  /// 21: compile-time error
+  int get x21 => 499;
+
+  // Getters may never have `covariant`.
+  covariant  /// 21b: compile-time error
+  static
+  int get x21b => 499;
+
+  // Static setters may not have a covariant.
+  // Would be considered a minor (acceptable) bug, if it was accepted here too.
+  static void set x22(
+      covariant /// 22: compile-time error
+      int val) {}
+
+  // Same as above, but with `covariant` in different positions.
+  // The `covariant` is just wrong there.
+
+  static int
+  covariant  /// 23: compile-time error
+  x23;
+
+  static int
+  covariant  /// 24: compile-time error
+  get x24 => 499;
+
+  static void set x25(
+    int
+    covariant /// 25: compile-time error
+    val) {}
+
+  // Since `covariant` is a built-in identifier, it is not allowed here.
+  static covariant x26; /// 26: compile-time error
+
+  // Getters may never have `covariant`.
+  static
+  covariant  /// 27: compile-time error
+  get x27 => 499;
+
+  covariant  /// 27b: compile-time error
+  static
+  get x27b => 499;
+
+  // Static setters may not have a covariant.
+  // Would be considered a minor (acceptable) bug, if it was accepted here too.
+  static void set x28(
+      covariant /// 28: compile-time error
+      val) {}
+
+  // If there is no type, then `covariant` is simply the parameter name:
+  static void set x29(covariant) {}
+
+  // Covariant won't work on return types.
+  static
+  covariant  /// 30: compile-time error
+  int f30() => 499;
+
+  covariant  /// 30b: compile-time error
+  static
+  int f30b() => 499;
+
+  // Covariant won't work as a return type.
+  static
+  covariant  /// 31: compile-time error
+  f31() => 499;
+
+  covariant  /// 31b: compile-time error
+  static
+  f31b() => 499;
+
+  // Covariant should not work on static methods.
+  // It's a minor (acceptable) bug to not error out here.
+  static int f32(
+      covariant /// 32: compile-time error
+      int x) => 499;
+
+  // `Covariant` must be in front of the types.
+  static int f33(
+      int
+      covariant /// 33: compile-time error
+      x) => 499;
+
+  // Covariant should not work on top-level methods.
+  // It's a minor (acceptable) bug to not error out here.
+  static int f34(
+      covariant /// 34: compile-time error
+      final
+      x) => 499;
+
+  // `Covariant` must be in front of modifiers.
+  static int f35(
+      final
+      covariant /// 35: compile-time error
+      x) => 499;
+
+  // Covariant should not work on top-level methods.
+  // It's a minor (acceptable) bug to not error out here.
+  static int f36(
+      covariant /// 36: compile-time error
+      final
+      int
+      x) => 499;
+
+  // `Covariant` must be in front of modifiers.
+  static int f37(
+      final
+      covariant /// 37: compile-time error
+      int
+      x) => 499;
+
+  // `Covariant` on its own is just a parameter name.
+  static int f38(covariant) => covariant;
+}
+
+// All of the above as instance members in a class.
+class B {
+  covariant int x40;
+
+  // Getters may never have `covariant`.
+  covariant  /// 41: compile-time error
+  int get x41 => 499;
+
+  void set x42(covariant int val) {}
+
+  // `covariant` in the wrong position.
+  int
+  covariant  /// 43: compile-time error
+  x43;
+
+  // `covariant` in the wrong position.
+  int
+  covariant  /// 44: compile-time error
+  get x44 => 499;
+
+  void set x45(
+    int
+    covariant /// 45: compile-time error
+    val) {}
+
+  // Since `covariant` is a built-in identifier, it is not allowed here.
+  covariant x46; /// 46: compile-time error
+
+  // Getters may never have `covariant`.
+  covariant  /// 47: compile-time error
+  get x47 => 499;
+
+  void set x48(covariant val) {}
+
+  // If there is no type, then `covariant` is simply the parameter name:
+  void set x49(covariant) {}
+
+  // Covariant won't work on return types.
+  covariant  /// 50: compile-time error
+  int f50() => 499;
+
+  // Covariant won't work as a return type.
+  covariant  /// 51: compile-time error
+  f51() => 499;
+
+  int f52(covariant int x) => 499;
+
+  // `Covariant` must be in front of the types.
+  int f53(
+      int
+      covariant /// 53: compile-time error
+      x) => 499;
+
+  int f54(covariant final x) => 499;
+
+  // `Covariant` must be in front of modifiers.
+  int f55(
+      final
+      covariant /// 55: compile-time error
+      x) => 499;
+
+  int f56(covariant final int x) => 499;
+
+  // `Covariant` must be in front of modifiers.
+  int f57(
+      final
+      covariant /// 57: compile-time error
+      int
+      x) => 499;
+
+  // `Covariant` on its own is just a parameter name.
+  int f58(covariant) => covariant;
+}
+
+void use(x) {}
+
+main() {
+  x0 = 0;
+  use(x1);
+  x2 = 499;
+  use(x3);
+  use(x4);
+  x5 = 42;
+  x6 = 0; /// 06: continued
+  use(x7);
+  x8 = 11;
+  x9 = 12;
+  use(f10());
+  use(f11());
+  use(f12(2));
+  use(f13(3));
+  use(f14(3));
+  use(f15(3));
+  use(f16(3));
+  use(f17(3));
+  Expect.equals(123, f18(123));
+
+  A.x20 = 0;
+  use(A.x21);
+  use(A.x21b);
+  A.x22 = 499;
+  use(A.x23);
+  use(A.x24);
+  A.x25 = 42;
+  A.x26 = 0; /// 26: continued
+  use(A.x27);
+  use(A.x27b);
+  A.x28 = 11;
+  A.x29 = 12;
+  use(A.f30());
+  use(A.f31());
+  use(A.f31b());
+  use(A.f32(2));
+  use(A.f33(3));
+  use(A.f34(3));
+  use(A.f35(3));
+  use(A.f36(3));
+  use(A.f37(3));
+  Expect.equals(1234, A.f38(1234));
+
+  var b = new B();
+  b.x40 = 0;
+  use(b.x41);
+  b.x42 = 499;
+  use(b.x43);
+  use(b.x44);
+  b.x45 = 42;
+  b.x46 = 0; /// 46: continued
+  use(b.x47);
+  b.x48 = 11;
+  b.x49 = 12;
+  use(b.f50());
+  use(b.f51());
+  use(b.f52(2));
+  use(b.f53(2));
+  use(b.f54(3));
+  use(b.f55(3));
+  use(b.f56(3));
+  use(b.f57(3));
+  Expect.equals(12345, b.f58(12345));
+}
\ No newline at end of file
diff --git a/tests/language/enum_test.dart b/tests/language/enum_test.dart
index a3b4586..7cdcee4 100644
--- a/tests/language/enum_test.dart
+++ b/tests/language/enum_test.dart
@@ -20,7 +20,7 @@
   Expect.equals('Enum2.A', Enum2.A.toString());
   Expect.equals(0, Enum2.A.index);
   Expect.listEquals([Enum2.A], Enum2.values);
-  Expect.identical(const [Enum2.A], Enum2.values);
+  Expect.identical(const <Enum2>[Enum2.A], Enum2.values);
   Enum2.values.forEach(test2);
 
   Expect.equals('Enum3.B', Enum3.B.toString());
diff --git a/tests/language/language.status b/tests/language/language.status
index ed6179e..83da9ad 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -5,10 +5,9 @@
 # This directory contains tests that are intended to show the
 # current state of the language.
 
-[ $compiler == none || $compiler == precompiler || $compiler == app_jit ]
-# Other issues:
-generic_methods_type_expression_test: RuntimeError # Issue 25869
-
+# These test entries will be valid for vm/dartium (with and without kernel).
+[ $compiler == none || $compiler == app_jit || $compiler == dartk || $runtime == dart_precompiled ]
+async_star_cancel_while_paused_test: RuntimeError
 # This is OK for now, but we may want to change the semantics to match the test.
 async_star_pause_test: Fail, OK
 
@@ -22,6 +21,8 @@
 constructor5_test: Fail # Issue 6422
 constructor6_test: Fail # Issue 6422
 
+generic_methods_type_expression_test: RuntimeError # Issue 25869 / 27460
+
 # Failures related to super call in ctor initializer list
 super_test: Fail, OK
 final_field_initialization_order_test: Fail, OK
@@ -30,26 +31,31 @@
 constructor3_test: Fail, OK
 constructor2_test: Fail, OK
 
-dynamic_prefix_core_test/01: RuntimeError # Issue 12478
-multiline_strings_test: Fail # Issue 23020
-
 # Regular bugs which should be fixed.
 duplicate_export_negative_test: Fail # Issue 6134
 
-deferred_redirecting_factory_test: Fail # Issue 23408
-redirecting_constructor_initializer_test: RuntimeError # Issue 23488
-
 # Non-contractive types are not supported in the vm.
 cyclic_type_test/02: Fail, OK
 cyclic_type_test/04: Fail, OK
 cyclic_type2_test: Fail, OK
 least_upper_bound_expansive_test/*: Fail, OK
 
-async_star_regression_2238_test: CompileTimeError, RuntimeError # drt only runtime-errs.
-async_star_cancel_while_paused_test: RuntimeError
 
-# Fails because `as T` is an error rather than being treated like `as dynamic`.
-generic_methods_type_expression_test: RuntimeError # Issue 27460
+[ $compiler == none || $compiler == precompiler || $compiler == app_jit ]
+
+enum_test: RuntimeError # Issue 28341
+
+dynamic_prefix_core_test/01: RuntimeError # Issue 12478
+multiline_strings_test: Fail # Issue 23020
+
+deferred_redirecting_factory_test: Fail # Issue 23408
+redirecting_constructor_initializer_test: RuntimeError # Issue 23488
+
+async_star_regression_2238_test: CompileTimeError, RuntimeError # drt only runtime-errs.
+
+# Doesn't yet implement `covariant` keyword.
+covariant_test/none: Fail # Issue 28166
+covariant_override_test: Fail # Issue 28166
 
 [ ($compiler == none || $compiler == precompiler || $compiler == app_jit) && $checked ]
 # These generic functions tests pass for the wrong reason in checked mode,
@@ -65,7 +71,6 @@
 class_keyword_test/02: MissingCompileTimeError # Issue 13627
 unicode_bom_test: Fail # Issue 16067
 vm/debug_break_enabled_vm_test/01: Crash, OK # Expected to hit breakpoint.
-try_catch_optimized1_test: Skip # Srdjan investigating
 
 [ ($compiler == none || $compiler == precompiler || $compiler == app_jit) && $checked ]
 type_variable_bounds4_test/01: Fail # Issue 14006
@@ -100,6 +105,7 @@
 main_test/42: Fail # Issue 20028
 mirror_in_static_init_test: Fail # Issue 22071
 vm/debug_break_enabled_vm_test/*: Skip # Issue 14651.
+vm/regress_28325_test: SkipByDesign  # Requires dart:io
 
 # These tests need the flag --initializing-formal-access to pass:
 initializing_formal_access_test: Skip
@@ -163,7 +169,8 @@
 stacktrace_rethrow_error_test: Pass, RuntimeError
 stacktrace_rethrow_nonerror_test: Pass, RuntimeError
 stacktrace_test: Pass, RuntimeError
-regress_26948_test: Skip # Crashes, regis investigating
+vm/regress_28325_test: RuntimeError  # Missing source position in AOT.
+
 
 [ $noopt || $runtime == dart_precompiled || $mode == product ]
 # Imports dart:mirrors
@@ -330,10 +337,3 @@
 null_bottom_test/01: Pass, CompileTimeError # Issue 28025
 null_bottom_test/02: Pass, CompileTimeError # Issue 28025
 null_bottom_test/03: Pass, CompileTimeError # Issue 28025
-
-# Issue #28236
-async_await_test: StaticWarning
-async_star_pause_test: StaticWarning
-async_star_test: StaticWarning
-regress_18535_test: StaticWarning
-
diff --git a/tests/language/language_analyzer2.status b/tests/language/language_analyzer2.status
index 272af1c..bb12210 100644
--- a/tests/language/language_analyzer2.status
+++ b/tests/language/language_analyzer2.status
@@ -7,6 +7,10 @@
 regress_26668_test: Fail # Issue 26678
 regress_27617_test/1: MissingCompileTimeError
 
+# Doesn't yet implement `covariant` keyword.
+covariant_test/none: CompileTimeError # Issue 28167
+covariant_override_test: CompileTimeError # Issue 28167
+
 # Runtime negative test. No static errors or warnings.
 closure_call_wrong_argument_count_negative_test: skip
 
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index fc253a47..f97480a 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -3,6 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dart2js ]
+enum_test: Fail # Issue 28340
 deferred_not_loaded_check_test: Fail # Issue 27577
 getter_setter_in_lib_test: Fail # Issue 23288
 method_name_test: Fail # issue 25574
@@ -39,6 +40,17 @@
 
 bad_typedef_test/00: Crash # Issue 28214
 
+covariant_test/02: MissingCompileTimeError, OK # Accepts `covariant` for statics/top-level.
+covariant_test/08: MissingCompileTimeError, OK # Accepts `covariant` for statics/top-level.
+covariant_test/12: MissingCompileTimeError, OK # Accepts `covariant` for statics/top-level.
+covariant_test/14: MissingCompileTimeError, OK # Accepts `covariant` for statics/top-level.
+covariant_test/16: MissingCompileTimeError, OK # Accepts `covariant` for statics/top-level.
+covariant_test/22: MissingCompileTimeError, OK # Accepts `covariant` for statics/top-level.
+covariant_test/28: MissingCompileTimeError, OK # Accepts `covariant` for statics/top-level.
+covariant_test/32: MissingCompileTimeError, OK # Accepts `covariant` for statics/top-level.
+covariant_test/34: MissingCompileTimeError, OK # Accepts `covariant` for statics/top-level.
+covariant_test/36: MissingCompileTimeError, OK # Accepts `covariant` for statics/top-level.
+
 [ $compiler == dart2js && $fast_startup ]
 const_evaluation_test/*: Fail # mirrors not supported
 deferred_constraints_constants_test/none: Fail # mirrors not supported
diff --git a/tests/language/language_kernel.status b/tests/language/language_kernel.status
index 3ea014e..144c004 100644
--- a/tests/language/language_kernel.status
+++ b/tests/language/language_kernel.status
@@ -3,10 +3,8 @@
 # BSD-style license that can be found in the LICENSE file.
 
 # These tests currently take too long. Remove when they are fixed.
-[ $compiler == dartk ]
-large_class_declaration_test: Skip
-large_implicit_getter_test: Skip
-larger_implicit_getter_test: Skip
+[ $compiler == dartk || $compiler == dartkp ]
+large_class_declaration_test: SkipSlow  # KernelVM Issue 28312
 
 ###############################################################################
 # Dartk Entries
@@ -34,47 +32,6 @@
 final_syntax_test/04: MissingCompileTimeError
 main_not_a_function_test/01: DartkCrash
 metadata_test: DartkCompileTimeError
-mixin_illegal_super_use_test/01: MissingCompileTimeError
-mixin_illegal_super_use_test/02: MissingCompileTimeError
-mixin_illegal_super_use_test/03: MissingCompileTimeError
-mixin_illegal_super_use_test/04: MissingCompileTimeError
-mixin_illegal_super_use_test/05: MissingCompileTimeError
-mixin_illegal_super_use_test/06: MissingCompileTimeError
-mixin_illegal_super_use_test/07: MissingCompileTimeError
-mixin_illegal_super_use_test/08: MissingCompileTimeError
-mixin_illegal_super_use_test/09: MissingCompileTimeError
-mixin_illegal_super_use_test/10: MissingCompileTimeError
-mixin_illegal_super_use_test/11: MissingCompileTimeError
-mixin_illegal_superclass_test/01: MissingCompileTimeError
-mixin_illegal_superclass_test/02: MissingCompileTimeError
-mixin_illegal_superclass_test/03: MissingCompileTimeError
-mixin_illegal_superclass_test/04: MissingCompileTimeError
-mixin_illegal_superclass_test/05: MissingCompileTimeError
-mixin_illegal_superclass_test/06: MissingCompileTimeError
-mixin_illegal_superclass_test/07: MissingCompileTimeError
-mixin_illegal_superclass_test/08: MissingCompileTimeError
-mixin_illegal_superclass_test/09: MissingCompileTimeError
-mixin_illegal_superclass_test/10: MissingCompileTimeError
-mixin_illegal_superclass_test/11: MissingCompileTimeError
-mixin_illegal_superclass_test/12: MissingCompileTimeError
-mixin_illegal_superclass_test/13: MissingCompileTimeError
-mixin_illegal_superclass_test/14: MissingCompileTimeError
-mixin_illegal_superclass_test/15: MissingCompileTimeError
-mixin_illegal_superclass_test/16: MissingCompileTimeError
-mixin_illegal_superclass_test/17: MissingCompileTimeError
-mixin_illegal_superclass_test/18: MissingCompileTimeError
-mixin_illegal_superclass_test/19: MissingCompileTimeError
-mixin_illegal_superclass_test/20: MissingCompileTimeError
-mixin_illegal_superclass_test/21: MissingCompileTimeError
-mixin_illegal_superclass_test/22: MissingCompileTimeError
-mixin_illegal_superclass_test/23: MissingCompileTimeError
-mixin_illegal_superclass_test/24: MissingCompileTimeError
-mixin_illegal_superclass_test/25: MissingCompileTimeError
-mixin_illegal_superclass_test/26: MissingCompileTimeError
-mixin_illegal_superclass_test/27: MissingCompileTimeError
-mixin_illegal_superclass_test/28: MissingCompileTimeError
-mixin_illegal_superclass_test/29: MissingCompileTimeError
-mixin_illegal_superclass_test/30: MissingCompileTimeError
 multiline_newline_test/01: DartkCompileTimeError
 multiline_newline_test/02: DartkCompileTimeError
 multiline_newline_test/03: DartkCompileTimeError
@@ -90,6 +47,9 @@
 vm/debug_break_enabled_vm_test/none: DartkCompileTimeError
 vm/reflect_core_vm_test: DartkCompileTimeError
 vm/regress_27201_test: DartkCompileTimeError
+vm/regress_28325_test: RuntimeError  # Issue 28055.
+covariant_test/none: CompileTimeError # Issue 28166
+covariant_override_test: DartkCrash # Issue 28166
 
 # dartk: JIT failures
 [ $compiler == dartk && $runtime == vm ]
@@ -118,24 +78,10 @@
 accessor_conflict_import_prefixed_test: RuntimeError
 accessor_conflict_import_test: RuntimeError
 assertion_test: RuntimeError
-async_await_test: Crash, RuntimeError
-async_star_cancel_and_throw_in_finally_test: RuntimeError
-async_star_cancel_while_paused_test: RuntimeError
-async_star_pause_test: Crash, RuntimeError
-async_star_regression_fisk_test: Timeout
-async_star_stream_take_test: Timeout
-async_star_take_reyield_test: Timeout
-async_star_test: Crash, Timeout
-asyncstar_throw_in_catch_test: Timeout
-asyncstar_yield_test: Timeout
-asyncstar_yieldstar_test: Timeout
 bad_raw_string_negative_test: Fail
-cha_deopt1_test: RuntimeError
-cha_deopt2_test: RuntimeError
-cha_deopt3_test: RuntimeError
-closure_type_variable_test: RuntimeError
-closures_initializer_test: RuntimeError
-compile_time_constant12_test: Crash
+cha_deopt1_test: RuntimeError  # Deferred Loading Issue 28335
+cha_deopt2_test: RuntimeError  # Deferred Loading Issue 28335
+cha_deopt3_test: RuntimeError  # Deferred Loading Issue 28335
 compile_time_constant_k_test/01: RuntimeError
 compile_time_constant_k_test/02: RuntimeError
 compile_time_constant_k_test/03: RuntimeError
@@ -146,19 +92,12 @@
 const_error_multiply_initialized_test/02: RuntimeError
 const_error_multiply_initialized_test/04: RuntimeError
 const_nested_test: RuntimeError
-constructor2_test: RuntimeError
-constructor3_test: RuntimeError
-constructor5_test: RuntimeError
-constructor6_test: RuntimeError
 constructor_duplicate_final_test/01: MissingRuntimeError
 constructor_duplicate_final_test/02: MissingRuntimeError
 custom_await_stack_trace_test: RuntimeError
-cyclic_type2_test: CompileTimeError
 cyclic_type_test/00: RuntimeError
 cyclic_type_test/01: RuntimeError
-cyclic_type_test/02: CompileTimeError
 cyclic_type_test/03: RuntimeError
-cyclic_type_test/04: CompileTimeError
 cyclic_type_variable_test/01: Crash
 cyclic_type_variable_test/02: Crash
 cyclic_type_variable_test/03: Crash
@@ -209,32 +148,10 @@
 deferred_type_dependency_test/is: RuntimeError
 deferred_type_dependency_test/none: RuntimeError
 deferred_type_dependency_test/type_annotation: RuntimeError
-duplicate_export_negative_test: Fail
-enum_duplicate_test/01: RuntimeError
-enum_duplicate_test/02: RuntimeError
-enum_duplicate_test/none: RuntimeError
-enum_mirror_test: RuntimeError
-enum_private_test/01: RuntimeError
-enum_private_test/02: RuntimeError
-enum_private_test/none: RuntimeError
-enum_test: RuntimeError
 evaluation_redirecting_constructor_test: RuntimeError
-example_constructor_test: RuntimeError
 external_test/10: MissingRuntimeError
 external_test/13: MissingRuntimeError
 external_test/20: MissingRuntimeError
-f_bounded_equality_test: RuntimeError
-field_initialization_order_test: RuntimeError
-final_field_initialization_order_test: RuntimeError
-fixed_type_variable2_test/02: RuntimeError
-fixed_type_variable2_test/04: RuntimeError
-fixed_type_variable2_test/06: RuntimeError
-fixed_type_variable_test/01: RuntimeError
-fixed_type_variable_test/02: RuntimeError
-fixed_type_variable_test/03: RuntimeError
-fixed_type_variable_test/04: RuntimeError
-fixed_type_variable_test/05: RuntimeError
-fixed_type_variable_test/06: RuntimeError
 for2_test: RuntimeError
 for_variable_capture_test: RuntimeError
 function_subtype2_test: RuntimeError
@@ -248,15 +165,9 @@
 function_type_alias2_test: RuntimeError
 function_type_alias3_test: RuntimeError
 function_type_alias4_test: RuntimeError
-generic2_test: RuntimeError
 generic_closure_test: RuntimeError
-generic_creation_test: RuntimeError
-generic_field_mixin2_test: RuntimeError
 generic_field_mixin4_test: RuntimeError
-generic_field_mixin5_test: RuntimeError
-generic_inheritance_test: RuntimeError
 generic_method_types_test: Pass, RuntimeError
-generic_methods_type_expression_test: RuntimeError
 generic_test: RuntimeError
 getter_closure_execution_order_test: RuntimeError
 getter_setter_in_lib_test: RuntimeError
@@ -265,72 +176,41 @@
 is_not_class2_test: RuntimeError
 issue13474_test: RuntimeError
 issue_1751477_test: RuntimeError
-least_upper_bound_expansive_test/01: CompileTimeError
-least_upper_bound_expansive_test/02: CompileTimeError
-least_upper_bound_expansive_test/03: CompileTimeError
-least_upper_bound_expansive_test/04: CompileTimeError
-least_upper_bound_expansive_test/05: CompileTimeError
-least_upper_bound_expansive_test/06: CompileTimeError
-least_upper_bound_expansive_test/07: CompileTimeError
-least_upper_bound_expansive_test/08: CompileTimeError
-least_upper_bound_expansive_test/09: CompileTimeError
-least_upper_bound_expansive_test/10: CompileTimeError
-least_upper_bound_expansive_test/11: CompileTimeError
-least_upper_bound_expansive_test/12: CompileTimeError
-least_upper_bound_expansive_test/none: CompileTimeError
 library_env_test/has_html_support: RuntimeError
 library_env_test/has_no_io_support: RuntimeError
 list_literal4_test: RuntimeError
 malformed_test/none: RuntimeError
 map_literal3_test: RuntimeError
-map_literal4_test: RuntimeError
+map_literal4_test: RuntimeError  # Checked Mode Issue
 map_literal6_test: RuntimeError
 method_override_test: RuntimeError
-mixin_generic_test: RuntimeError
-mixin_mixin2_test: RuntimeError
-mixin_mixin3_test: RuntimeError
-mixin_mixin4_test: RuntimeError
-mixin_mixin5_test: RuntimeError
-mixin_mixin_bound2_test: RuntimeError
-mixin_mixin_bound_test: RuntimeError
-mixin_super_test: RuntimeError
-mixin_type_parameters_simple_test: RuntimeError
 mixin_type_parameters_super_extends_test: RuntimeError
 mixin_type_parameters_super_test: RuntimeError
 multiline_newline_test/none: RuntimeError
 named_parameters_type_test/01: MissingRuntimeError
 named_parameters_type_test/02: MissingRuntimeError
 named_parameters_type_test/03: MissingRuntimeError
-not_enough_positional_arguments_test/02: MissingRuntimeError
-not_enough_positional_arguments_test/05: MissingRuntimeError
-null_test/none: RuntimeError
+not_enough_positional_arguments_test/02: MissingRuntimeError  # Dartk Issue 28301
+not_enough_positional_arguments_test/05: MissingRuntimeError  # Dartk Issue 28301
 number_identifier_test/05: RuntimeError
 positional_parameters_type_test/01: MissingRuntimeError
 positional_parameters_type_test/02: MissingRuntimeError
 prefix10_negative_test: Fail
 prefix21_test: RuntimeError
 redirecting_constructor_initializer_test: RuntimeError
-regress_18713_test: RuntimeError
-regress_22443_test: RuntimeError
-regress_22700_test: RuntimeError
-regress_23408_test: RuntimeError
-regress_27164_test: CompileTimeError
-regress_r24720_test: RuntimeError
-regress_28278_test: RuntimeError
-reify_typevar_test: RuntimeError
+regress_22443_test: RuntimeError  # Deferred Loading Issue 28335
+regress_23408_test: RuntimeError  # Deferred Loading Issue 28335
+regress_28278_test: RuntimeError  # Mirrors Issue
 script1_negative_test: Fail
 script2_negative_test: Fail
 setter_no_getter_call_test/none: RuntimeError
 static_setter_get_test/01: RuntimeError
-super_test: RuntimeError
 switch7_negative_test: Fail
 switch_try_catch_test: RuntimeError
-sync_generator3_test/test2: RuntimeError
 try_catch_on_syntax_test/10: MissingRuntimeError
 try_catch_on_syntax_test/11: MissingRuntimeError
 try_finally_regress_25654_test: RuntimeError
 type_checks_in_factory_method_test: RuntimeError
-type_parameter_literal_test: RuntimeError
 type_variable_function_type_test: RuntimeError
 vm/type_cast_vm_test: RuntimeError
 vm/type_vm_test: RuntimeError
@@ -339,28 +219,23 @@
 [ $compiler == dartk && $runtime == vm ]
 const_evaluation_test/01: RuntimeError
 const_locals_test: RuntimeError
-constructor_named_arguments_test/01: Crash
-const_string_test: RuntimeError
+constructor_named_arguments_test/01: Crash  # Dartk Issue 28301
+const_string_test: RuntimeError  # Dartk Issue 28306
 instance_creation_in_function_annotation_test: RuntimeError
 library_env_test/has_no_mirror_support: RuntimeError
 redirecting_factory_reflection_test: RuntimeError
 
 # dartk: JIT failures (debug)
 [ $compiler == dartk && $runtime == vm && $mode == debug ]
-async_star_regression_fisk_test: Crash  # Stack mismatch during expression translation.
-async_star_test: Crash  # Stack mismatch during expression translation.
-issue23244_test: Crash  # Class finalization issue
-not_enough_positional_arguments_test/02: Crash
-not_enough_positional_arguments_test/05: Crash
-vm/optimized_guarded_field_isolates_test: Crash  # Class finalization issue
+not_enough_positional_arguments_test/02: Crash  # Dartk Issue 28301
+not_enough_positional_arguments_test/05: Crash  # Dartk Issue 28301
 
 # dartk: precompilation failures
 [ $compiler == dartkp && $runtime == dart_precompiled ]
-if_null_assignment_static_test/35: Crash
-large_class_declaration_test: Pass, Timeout
-string_interpolation7_test: RuntimeError
+if_null_assignment_static_test/35: Crash  # Dartk Issue 28302
+string_interpolation7_test: RuntimeError  # Dartk Issue 28306
 
 # dartk: precompilation failures (debug)
 [ $compiler == dartkp && $runtime == dart_precompiled && $mode == debug ]
-constructor_named_arguments_test/01: Crash
-not_enough_positional_arguments_test/05: Crash
+constructor_named_arguments_test/01: Crash  # Dartk Issue 28301
+not_enough_positional_arguments_test/05: Crash  # Dartk Issue 28301
diff --git a/tests/language/lazy_static8_test.dart b/tests/language/lazy_static8_test.dart
new file mode 100644
index 0000000..812219f
--- /dev/null
+++ b/tests/language/lazy_static8_test.dart
@@ -0,0 +1,73 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+// Test re-entrant initializer - calls throw CyclicInitializationError.
+
+var trace;
+
+final foo = bar;
+
+get bar {
+  trace.add('bar');
+  try {
+    return foo ?? 1;
+  } catch (e) {
+    trace.add(e is CyclicInitializationError);
+  }
+  try {
+    return foo ?? 2;
+  } catch (e) {
+    trace.add(e is CyclicInitializationError);
+  }
+  return 42;  
+}
+
+void testTopLevel() {
+  trace = [];
+  var result = foo;
+  Expect.equals(42, result);
+  Expect.equals('bar,true,true', trace.join(','));
+  trace = [];
+  result = foo;
+  Expect.equals(42, result);
+  Expect.equals('', trace.join(','));
+
+}
+
+class X {
+  static final foo = X.bar;
+
+  static get bar {
+    trace.add('X.bar');
+    try {
+      return foo ?? 1;
+    } catch (e) {
+      trace.add(e is CyclicInitializationError);
+    }
+    try {
+      return foo ?? 2;
+    } catch (e) {
+      trace.add(e is CyclicInitializationError);
+    }
+    return 49;  
+  }
+}
+
+void testClassStatic() {
+  trace = [];
+  var result = X.foo;
+  Expect.equals(49, result);
+  Expect.equals('X.bar,true,true', trace.join(','));
+  trace = [];
+  result = X.foo;
+  Expect.equals(49, result);
+  Expect.equals('', trace.join(','));
+}
+
+main() {
+  testTopLevel();
+  testClassStatic();
+}
diff --git a/tests/language/vm/regress_28325_test.dart b/tests/language/vm/regress_28325_test.dart
new file mode 100644
index 0000000..5276381
--- /dev/null
+++ b/tests/language/vm/regress_28325_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test source positions in async errors.
+
+import "package:expect/expect.dart";
+import "dart:io";
+
+main() async {
+  try {
+    await Socket.connect("localhost", 0);
+    Expect.isTrue(false);  // Unreachable.
+  } catch (e, s) {
+    Expect.isTrue(e is SocketException);
+    Expect.isTrue(s.toString().contains("regress_28325_test.dart"));
+    print(s);
+    Expect.isTrue(s.toString().contains(":12"));  // Line number of "await".
+  }
+}
diff --git a/tests/language_strong/await_in_cascade_test.dart b/tests/language_strong/await_in_cascade_test.dart
index e9fbcf9..7049e73 100644
--- a/tests/language_strong/await_in_cascade_test.dart
+++ b/tests/language_strong/await_in_cascade_test.dart
@@ -11,5 +11,5 @@
 }
 
 main() async {
-  Expect.equals(await new C().m(), 42);
+  Expect.equals((await new C().m()).first, 42);
 }
diff --git a/tests/language_strong/language_strong_kernel.status b/tests/language_strong/language_strong_kernel.status
index 30aff8b..7858270 100644
--- a/tests/language_strong/language_strong_kernel.status
+++ b/tests/language_strong/language_strong_kernel.status
@@ -3,6 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dartk && $runtime == vm ]
+arithmetic2_test: RuntimeError # Throws CastError instead of TypeError
 assertion_test: RuntimeError
 async_await_test/02: DartkCompileTimeError
 async_await_test/03: DartkCompileTimeError
@@ -23,6 +24,7 @@
 asyncstar_yieldstar_test: Timeout
 await_in_cascade_test: RuntimeError
 bad_raw_string_negative_test: Fail
+bool_test: RuntimeError # Throws CastError instead of TypeError
 cha_deopt1_test: RuntimeError
 cha_deopt2_test: RuntimeError
 cha_deopt3_test: RuntimeError
@@ -127,6 +129,7 @@
 generic_inheritance_test: RuntimeError
 generic_tearoff_test: Crash
 getter_closure_execution_order_test: RuntimeError
+if_null_evaluation_order_test: Crash # VM does not support BottomType
 inferrer_closure_test: RuntimeError
 initializing_formal_final_test: RuntimeError
 instance_creation_in_function_annotation_test: RuntimeError
@@ -146,6 +149,7 @@
 mixin_mixin_bound2_test: RuntimeError
 mixin_mixin_bound_test: RuntimeError
 no_main_test/01: DartkCrash
+operator4_test: RuntimeError # Throws CastError instead of TypeError
 prefix10_negative_test: Fail
 prefix21_test: RuntimeError
 recursive_generic_test: RuntimeError
@@ -155,7 +159,9 @@
 regress_r24720_test: RuntimeError
 reify_typevar_static_test/00: MissingCompileTimeError
 reify_typevar_test: RuntimeError
+setter_no_getter_test/01: Crash # VM does not support BottomType
 switch_try_catch_test: RuntimeError
 sync_generator3_test/test2: RuntimeError
+type_error_test: RuntimeError # Throws CastError instead of TypeError
 type_literal_test: RuntimeError
-type_parameter_literal_test: RuntimeError
\ No newline at end of file
+type_parameter_literal_test: RuntimeError
diff --git a/tests/language_strong/recursive_mixin_test.dart b/tests/language_strong/recursive_mixin_test.dart
new file mode 100644
index 0000000..b2c1e3c
--- /dev/null
+++ b/tests/language_strong/recursive_mixin_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class A<T> {
+  bool foo(T x) => true;
+}
+
+class B extends Object with A<B> {}
+
+main() {
+  var b = new B();
+  Expect.isTrue(b is B);
+  Expect.isTrue(b is A);
+
+  // Verify that runtime checking enforces A<B> instead of A
+  dynamic d = b;
+  Expect.isTrue(d.foo(b));
+  Expect.throws(() => d.foo(42));
+}
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 34a3a77..9598983 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -105,6 +105,18 @@
 mirrors/raw_type_test/01: RuntimeError # Issue 6490
 mirrors/mirrors_reader_test: Slow, RuntimeError # Issue 16589
 mirrors/regress_26187_test: RuntimeError # Issue 6490
+mirrors/reflected_type_generics_test/01: Fail # Issues in reflecting generic typedefs.
+mirrors/reflected_type_generics_test/02: Fail # Issues in reflecting bounded type variables.
+# The following tests fail because we have disabled a test in
+# `reflectClassByName`. `MirrorsUsed` leads to classes not having the
+# information necessary to correctly handle these checks.
+mirrors/reflected_type_generics_test/03: Fail # Issues in reflecting generic typedefs.
+mirrors/reflected_type_generics_test/04: Fail # Issues in reflecting bounded type variables.
+mirrors/reflected_type_generics_test/05: Fail # Issues in reflecting generic typedefs.
+mirrors/reflected_type_generics_test/06: Fail # Issues in reflecting bounded type variables.
+
+[ $compiler == none && $unchecked ]
+mirrors/reflected_type_generics_test/02: Fail, Ok # Type check for a bounded type argument.
 
 [ $compiler == dart2js && $fast_startup ]
 mirrors/*: Fail # mirrors not supported
@@ -333,47 +345,6 @@
 profiler/metrics_test: Fail # Issue 20309
 profiler/metrics_num_test: Fail # Issue 20309
 
-# Issue #28236
-async/first_regression_test: StaticWarning
-async/future_timeout_test: StaticWarning
-async/multiple_timer_test: StaticWarning
-async/schedule_microtask2_test: StaticWarning
-async/schedule_microtask3_test: StaticWarning
-async/schedule_microtask5_test: StaticWarning
-async/stream_controller_async_test: StaticWarning
-async/stream_first_where_test: StaticWarning
-async/stream_from_iterable_test: StaticWarning
-async/stream_iterator_test: StaticWarning
-async/stream_join_test: StaticWarning
-async/stream_last_where_test: StaticWarning
-async/stream_periodic2_test: StaticWarning
-async/stream_periodic3_test: StaticWarning
-async/stream_periodic4_test: StaticWarning
-async/stream_periodic5_test: StaticWarning
-async/stream_periodic6_test: StaticWarning
-async/stream_periodic_test: StaticWarning
-async/stream_single_test: StaticWarning
-async/stream_single_to_multi_subscriber_test: StaticWarning
-async/stream_state_nonzero_timer_test: StaticWarning
-async/stream_state_test: StaticWarning
-async/stream_subscription_as_future_test: StaticWarning
-async/stream_subscription_cancel_test: StaticWarning
-async/stream_timeout_test: StaticWarning
-async/stream_transform_test: StaticWarning
-async/stream_transformation_broadcast_test: StaticWarning
-async/timer_cancel1_test: StaticWarning
-async/timer_cancel2_test: StaticWarning
-async/timer_cancel_test: StaticWarning
-async/timer_isActive_test: StaticWarning
-async/timer_repeat_test: StaticWarning
-async/timer_test: StaticWarning
-convert/json_lib_test: StaticWarning
-js/null_test: StaticWarning
-math/point_test: StaticWarning
-math/rectangle_test: StaticWarning
-mirrors/library_uri_io_test: StaticWarning
-mirrors/library_uri_package_test: StaticWarning
-
 
 [ ($compiler == dartanalyzer || $compiler == dart2analyzer) && $checked ]
 mirrors/regress_16321_test/01: MissingCompileTimeError # Issue 16391
diff --git a/tests/lib/mirrors/mirrors_used_generic_types_test.dart b/tests/lib/mirrors/mirrors_used_generic_types_test.dart
new file mode 100644
index 0000000..5962214
--- /dev/null
+++ b/tests/lib/mirrors/mirrors_used_generic_types_test.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library Test;
+
+@MirrorsUsed(targets: const ["Test"])
+import 'dart:mirrors';
+import 'dart:async';
+
+import 'package:expect/expect.dart';
+
+class A {
+  // Because of the `mirrors-used` annotation, the types `List` and `Future`
+  // are not reflectable.
+  // However, we still need to be able to create a Mirror for them, when we
+  // create a mirror for `foo`. In particular, it must be able to create a
+  // mirror, even though there are generic types.
+  List<int> foo(Future<int> x) {
+    return null;
+  }
+}
+
+void main() {
+  var m = reflect(new A()).type.instanceMembers[#foo];
+  Expect.equals(#List, m.returnType.simpleName);
+  Expect.equals(#Future, m.parameters[0].type.simpleName);
+}
diff --git a/tests/lib/mirrors/reflected_type_generics_test.dart b/tests/lib/mirrors/reflected_type_generics_test.dart
new file mode 100644
index 0000000..f10425c
--- /dev/null
+++ b/tests/lib/mirrors/reflected_type_generics_test.dart
@@ -0,0 +1,99 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library test.reflected_type_generics_test;
+
+@MirrorsUsed(targets: "test.reflected_type_generics_test")
+import 'dart:mirrors';
+
+import 'package:expect/expect.dart';
+
+import 'reflected_type_helper.dart';
+
+class A<T> {}
+
+class P {}
+
+class B extends A<P> {}
+
+class C<K, V> {}
+
+class D<T> extends A<T> {}
+
+class E<K> extends C<K, int> {}
+
+class F<G> {}
+
+typedef bool Predicate<T>(T arg);
+
+class FBounded<S extends FBounded> {}
+
+class Helper<T> {
+  Type get param => T;
+}
+
+class Mixin<T extends P> {}
+
+class Composite<K extends P, V> extends Object with Mixin<K> {}
+
+main() {
+  // "Happy" paths:
+  expectReflectedType(reflectType(A, [P]), new A<P>().runtimeType);
+  expectReflectedType(reflectType(C, [B, P]), new C<B, P>().runtimeType);
+  expectReflectedType(reflectType(D, [P]), new D<P>().runtimeType);
+  expectReflectedType(reflectType(E, [P]), new E<P>().runtimeType);
+  expectReflectedType(
+      reflectType(FBounded, [FBounded]), new FBounded<FBounded>().runtimeType);
+
+  var predicateHelper = new Helper<Predicate<P>>();
+  expectReflectedType(reflectType(Predicate, [P]), predicateHelper.param); /// 01: ok
+  var composite = new Composite<P, int>();
+  expectReflectedType(reflectType(Composite, [P, int]), composite.runtimeType);
+
+  // Edge cases:
+  Expect.throws(
+      () => reflectType(P, []),
+      (e) => e is ArgumentError && e.invalidValue is List,
+      "Should throw an ArgumentError if reflecting not a generic class with "
+      "empty list of type arguments");
+  Expect.throws(                                                              /// 03: ok
+      () => reflectType(P, [B]),                                              /// 03: continued
+      (e) => e is Error,                                                      /// 03: continued
+      "Should throw an ArgumentError if reflecting not a generic class with " /// 03: continued
+      "some type arguments");                                                 /// 03: continued
+  Expect.throws(
+      () => reflectType(A, []),
+      (e) => e is ArgumentError && e.invalidValue is List,
+      "Should throw an ArgumentError if type argument list is empty for a "
+      "generic class");
+  Expect.throws(                                                              /// 04: ok
+      () => reflectType(A, [P, B]),                                           /// 04: continued
+      (e) => e is ArgumentError && e.invalidValue is List,                    /// 04: continued
+      "Should throw an ArgumentError if number of type arguments is not "     /// 04: continued
+      "correct");                                                             /// 04: continued
+  Expect.throws(() => reflectType(B, [P]), (e) => e is Error,             /// 05: ok
+      "Should throw an ArgumentError for non-generic class extending "    /// 05: continued
+      "generic one");                                                     /// 05: continued
+  Expect.throws(
+      () => reflectType(A, ["non-type"]),
+      (e) => e is ArgumentError && e.invalidValue is List,
+      "Should throw an ArgumentError when any of type arguments is not a Type");
+  Expect.throws(                                                                 /// 06: ok
+      () => reflectType(A, [P, B]),                                               /// 06: continued
+      (e) => e is ArgumentError && e.invalidValue is List,                        /// 06: continued
+      "Should throw an ArgumentError if number of type arguments is not correct " /// 06: continued
+      "for generic extending another generic");                                   /// 06: continued
+  Expect.throws(
+      () => reflectType(reflectType(F).typeVariables[0].reflectedType, [int]));
+  Expect.throws(() => reflectType(FBounded, [int])); /// 02: ok
+  var boundedType =
+      reflectType(FBounded).typeVariables[0].upperBound.reflectedType;
+  Expect.throws(() => reflectType(boundedType, [int])); /// 02: ok
+  Expect.throws(() => reflectType(Composite, [int, int])); /// 02: ok
+
+  // Instantiation of a generic class preserves type information:
+  ClassMirror m = reflectType(A, [P]) as ClassMirror;
+  var instance = m.newInstance(const Symbol(""), []).reflectee;
+  Expect.equals(new A<P>().runtimeType, instance.runtimeType);
+}
diff --git a/tests/lib/mirrors/reflected_type_helper.dart b/tests/lib/mirrors/reflected_type_helper.dart
index e973854..bc47152 100644
--- a/tests/lib/mirrors/reflected_type_helper.dart
+++ b/tests/lib/mirrors/reflected_type_helper.dart
@@ -4,6 +4,7 @@
 
 library test.reflected_type_helper;
 
+@MirrorsUsed(targets: "test.reflected_type_helper")
 import 'dart:mirrors';
 import 'package:expect/expect.dart';
 
diff --git a/tests/lib_strong/lib_strong_kernel.status b/tests/lib_strong/lib_strong_kernel.status
index dc71cf7..ccbc515 100644
--- a/tests/lib_strong/lib_strong_kernel.status
+++ b/tests/lib_strong/lib_strong_kernel.status
@@ -9,6 +9,7 @@
 convert/chunked_conversion_utf83_test: DartkCompileTimeError
 convert/chunked_conversion_utf85_test: DartkCompileTimeError
 convert/encoding_test: DartkCompileTimeError
+convert/json_toEncodable_reviver_test: Crash # Type error in constant
 convert/json_utf8_chunk_test: DartkCompileTimeError
 convert/latin1_test: DartkCompileTimeError
 convert/streamed_conversion_json_encode1_test: RuntimeError
@@ -171,7 +172,7 @@
 html/xhr_test: DartkCompileTimeError
 html/xsltprocessor_test: DartkCompileTimeError
 mirrors/basic_types_in_dart_core_test: RuntimeError
-mirrors/class_mirror_location_test: Crash
+mirrors/class_mirror_location_test: RuntimeError
 mirrors/constructor_kinds_test/01: RuntimeError
 mirrors/constructor_kinds_test/none: RuntimeError
 mirrors/constructor_optional_args_test: CompileTimeError
@@ -216,6 +217,8 @@
 mirrors/library_metadata_test: RuntimeError
 mirrors/library_uri_io_test: DartkCompileTimeError
 mirrors/library_uri_package_test: DartkCompileTimeError
+mirrors/list_constructor_test/01: RuntimeError
+mirrors/list_constructor_test/none: RuntimeError
 mirrors/metadata_constructed_constant_test: RuntimeError
 mirrors/metadata_test: RuntimeError
 mirrors/method_mirror_location_test: RuntimeError
@@ -253,4 +256,4 @@
 mirrors/typedef_library_test: RuntimeError
 mirrors/typedef_metadata_test: RuntimeError
 mirrors/typedef_test: RuntimeError
-mirrors/typevariable_mirror_metadata_test: RuntimeError
\ No newline at end of file
+mirrors/typevariable_mirror_metadata_test: RuntimeError
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 6fb01d9..76e42fb 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -88,19 +88,6 @@
 # This is runtime test.
 io/process_exit_negative_test: Skip
 
-# Issue #28236
-io/addlatexhash_test: StaticWarning
-io/http_auth_digest_test: StaticWarning
-io/http_auth_test: StaticWarning
-io/http_proxy_advanced_test: StaticWarning
-io/http_proxy_test: StaticWarning
-io/skipping_dart2js_compilations_test: StaticWarning
-io/sleep_test: StaticWarning
-io/test_harness_analyzer_test: StaticWarning
-io/test_runner_test: StaticWarning
-io/web_socket_compression_test: StaticWarning
-io/web_socket_test: StaticWarning
-
 [ $compiler == dart2js ]
 number_identity_test: Skip # Bigints and int/double diff. not supported.
 typed_data_test: Skip # dart:typed_data support needed.
@@ -162,6 +149,9 @@
 out_of_memory_test: Skip # passes on Mac, crashes on Linux
 oom_error_stacktrace_test: Skip # Fails on Linux
 
+[ $arch == simmips ]
+io/socket_bind_test: Pass, Fail # Issue 28315
+
 [ ($arch == simarm || $arch == simdbc || $arch == simdbc64) && $mode == debug && $checked ]
 io/web_socket_test: Pass, Fail # Issue 26814
 
@@ -384,3 +374,8 @@
 io/http_ipv6_test: SkipByDesign
 io/socket_ipv6_test: SkipByDesign
 io/socket_info_ipv6_test: SkipByDesign
+
+[ $builder_tag == asan && $arch == x64 ]
+io/directory_error_test: Fail # Issue 28350
+io/directory_fuzz_test: Fail # Issue 28350
+io/directory_list_nonexistent_test: Fail # Issue 28350
diff --git a/tests/utils/utils.status b/tests/utils/utils.status
index 1af3a26..fde7eba 100644
--- a/tests/utils/utils.status
+++ b/tests/utils/utils.status
@@ -31,9 +31,3 @@
 
 [ $builder_tag == asan ]
 recursive_import_test: Skip # Issue 27441
-
-[ $compiler == dart2analyzer ]
-# Issue #28236
-dart2js_test: StaticWarning
-dummy_compiler_test: StaticWarning
-recursive_import_test: StaticWarning
diff --git a/tools/VERSION b/tools/VERSION
index d077412..9b9676a 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 1
 MINOR 22
 PATCH 0
-PRERELEASE 6
+PRERELEASE 7
 PRERELEASE_PATCH 0
diff --git a/tools/bots/cross-vm.py b/tools/bots/cross-vm.py
index 9865547..461123b 100644
--- a/tools/bots/cross-vm.py
+++ b/tools/bots/cross-vm.py
@@ -68,8 +68,7 @@
   test_py = os.path.join('tools', 'test.py')
   test_args = [sys.executable, test_py, '--progress=line', '--report',
                '--time', '--compiler=none', '--runtime=vm', '--write-debug-log',
-               '--write-test-outcome-log', '--mode=' + mode, '--arch=' + arch,
-               '--exclude-suite=pkg']
+               '--write-test-outcome-log', '--mode=' + mode, '--arch=' + arch]
   if total_shards and shard_index:
     test_args.append('--shards=%s' % total_shards)
     test_args.append('--shard=%s' % shard_index)
diff --git a/tools/bots/gn_tests.py b/tools/bots/gn_tests.py
index 1f44d69..2c4b428 100755
--- a/tools/bots/gn_tests.py
+++ b/tools/bots/gn_tests.py
@@ -16,7 +16,7 @@
 def main(argv):
   test_py = os.path.join(DART_ROOT, 'tools', 'test.py')
   build_result = subprocess.call(
-      ['python', test_py, '--builder-tag=no_ipv6', '--exclude-suite=pkg']
+      ['python', test_py, '--builder-tag=no_ipv6']
       + argv[1:])
   if build_result != 0:
     return build_result
diff --git a/tools/build.py b/tools/build.py
index 2645ef5..48062b3 100755
--- a/tools/build.py
+++ b/tools/build.py
@@ -427,6 +427,38 @@
   return 'use_goma = true' in open(args_gn, 'r').read()
 
 
+# Try to start goma, but don't bail out if we can't. Instead print an error
+# message, and let the build fail with its own error messages as well.
+def EnsureGomaStarted(out_dir):
+  args_gn_path = os.path.join(out_dir, 'args.gn')
+  goma_dir = None
+  with open(args_gn_path, 'r') as fp:
+    for line in fp:
+      if 'goma_dir' in line:
+        words = line.split()
+        goma_dir = words[2][1:-1]  # goma_dir = "/path/to/goma"
+  if not goma_dir:
+    print 'Could not find goma for ' + out_dir
+    return False
+  if not os.path.exists(goma_dir) or not os.path.isdir(goma_dir):
+    print 'Could not find goma at ' + goma_dir
+    return False
+  goma_ctl = os.path.join(goma_dir, 'goma_ctl.py')
+  goma_ctl_command = [
+    'python',
+    goma_ctl,
+    'ensure_start',
+  ]
+  process = subprocess.Popen(goma_ctl_command)
+  process.wait()
+  if process.returncode != 0:
+    print ("Tried to run goma_ctl.py, but it failed. Try running it manually: "
+           + "\n\t" + ' '.join(goma_ctl_command))
+    return False
+  return True
+
+
+
 def BuildNinjaCommand(options, target, target_os, mode, arch):
   out_dir = utils.GetBuildRoot(HOST_OS, mode, arch, target_os)
   if ShouldRunGN(out_dir):
@@ -435,7 +467,12 @@
   if options.verbose:
     command += ['-v']
   if UseGoma(out_dir):
-    command += ['-j1000']
+    if EnsureGomaStarted(out_dir):
+      command += ['-j1000']
+    else:
+      # If we couldn't ensure that goma is started, let the build start, but
+      # slowly so we can see any helpful error messages that pop out.
+      command += ['-j1']
   command += [target]
   return command
 
diff --git a/tools/create_pkg_manifest.py b/tools/create_pkg_manifest.py
index 932f263..f9e4c3a 100755
--- a/tools/create_pkg_manifest.py
+++ b/tools/create_pkg_manifest.py
@@ -70,7 +70,7 @@
     manifest.write('<?xml version="1.0" encoding="UTF-8"?>\n')
     manifest.write('<manifest>\n')
     manifest.write('  <projects>\n')
-    for path, remote in deps.iteritems():
+    for path, remote in sorted(deps.iteritems()):
       remote_components = remote.split('@')
       remote_url = remote_components[0]
       remote_version = remote_components[1]
diff --git a/tools/deps/dartium.deps/DEPS b/tools/deps/dartium.deps/DEPS
index 6b2e0f6..24fd5be 100644
--- a/tools/deps/dartium.deps/DEPS
+++ b/tools/deps/dartium.deps/DEPS
@@ -9,7 +9,7 @@
 
 vars.update({
   "dartium_chromium_commit": "7558afb6379171d7f96b2db68ae9d2b64b2c5544",
-  "dartium_webkit_commit": "e46ac6cf905ae6be30852fbee231cfd385c24420",
+  "dartium_webkit_commit": "cdb44f3ddd32f2594e77ef26cd806891597cc1d9",
   "chromium_base_revision": "338390",
 
   # We use mirrors of all github repos to guarantee reproducibility and
diff --git a/tools/dom/scripts/generate_blink_file.py b/tools/dom/scripts/generate_blink_file.py
index dee266c..2b119ed 100644
--- a/tools/dom/scripts/generate_blink_file.py
+++ b/tools/dom/scripts/generate_blink_file.py
@@ -96,8 +96,10 @@
  */
 library dart.dom._blink;
 
+import 'dart:async';
 import 'dart:js' as js;
 import 'dart:html' show DomException;
+import 'dart:_internal' as internal;
 // This is a place to put custom renames if we need them.
 final resolverMap = {
 };
@@ -127,6 +129,15 @@
 
   static register(document, tag, customType, extendsTagName) native "Utils_register";
 
+  // Below code sets up VMLibraryHooks for resolvePackageUri.
+  static Uri resolvePackageUri(Uri packageUri) native "Utils_resolvePackageUri";
+  static Future<Uri> _resolvePackageUriFuture(Uri packageUri) async {
+      return resolvePackageUri(packageUri);
+  }
+  static void _setupHooks() {
+    internal.VMLibraryHooks.resolvePackageUriFuture = _resolvePackageUriFuture;
+  }
+
   // Defines an interceptor if there is an appropriate JavaScript prototype to define it on.
   // In any case, returns a typed JS wrapper compatibile with dart:html and the new
   // typed JS Interop.
diff --git a/tools/gn.py b/tools/gn.py
index 24e9380..1e5120b 100755
--- a/tools/gn.py
+++ b/tools/gn.py
@@ -16,6 +16,41 @@
 SCRIPT_DIR = os.path.dirname(sys.argv[0])
 DART_ROOT = os.path.realpath(os.path.join(SCRIPT_DIR, '..'))
 
+# Environment variables for default settings.
+DART_USE_ASAN = "DART_USE_ASAN"  # Use instead of --asan
+DART_USE_MSAN = "DART_USE_MSAN"  # Use instead of --msan
+DART_USE_TSAN = "DART_USE_TSAN"  # Use instead of --tsan
+DART_USE_WHEEZY = "DART_USE_WHEEZY"  # Use instread of --wheezy
+DART_USE_TOOLCHAIN = "DART_USE_TOOLCHAIN"  # Use instread of --toolchain-prefix
+DART_USE_SYSROOT = "DART_USE_SYSROOT"  # Use instead of --target-sysroot
+
+def use_asan():
+  return DART_USE_ASAN in os.environ
+
+
+def use_msan():
+  return DART_USE_MSAN in os.environ
+
+
+def use_tsan():
+  return DART_USE_TSAN in os.environ
+
+
+def use_wheezy():
+  return DART_USE_WHEEZY in os.environ
+
+
+def toolchain_prefix(args):
+  if args.toolchain_prefix:
+    return args.toolchain_prefix
+  return os.environ.get(DART_USE_TOOLCHAIN)
+
+
+def target_sysroot(args):
+  if args.target_sysroot:
+    return args.target_sysroot
+  return os.environ.get(DART_USE_SYSROOT)
+
 
 def get_out_dir(mode, arch, target_os):
   return utils.GetBuildRoot(HOST_OS, mode, arch, target_os)
@@ -64,6 +99,16 @@
   return host_os
 
 
+# Where string_map is formatted as X1=Y1,X2=Y2 etc.
+# If key is X1, returns Y1.
+def parse_string_map(key, string_map):
+  for m in string_map.split(','):
+    l = m.split('=')
+    if l[0] == key:
+      return l[1]
+  return None
+
+
 def to_gn_args(args, mode, arch, target_os):
   gn_args = {}
 
@@ -137,11 +182,13 @@
   if gn_args['target_os'] == 'linux' and args.wheezy:
     gn_args['dart_use_wheezy_sysroot'] = True
   else:
-    if args.target_sysroot:
-      gn_args['target_sysroot'] = args.target_sysroot
+    sysroot = target_sysroot(args)
+    if sysroot:
+      gn_args['target_sysroot'] = parse_string_map(arch, sysroot)
 
-    if args.toolchain_prefix:
-      gn_args['toolchain_prefix'] = args.toolchain_prefix
+    toolchain = toolchain_prefix(args)
+    if toolchain:
+      gn_args['toolchain_prefix'] = parse_string_map(arch, toolchain)
 
   goma_dir = os.environ.get('GOMA_DIR')
   goma_home_dir = os.path.join(os.getenv('HOME', ''), 'goma')
@@ -219,25 +266,6 @@
     return '--ide=json'
 
 
-# Environment variables for default settings.
-DART_USE_ASAN = "DART_USE_ASAN"
-DART_USE_MSAN = "DART_USE_MSAN"
-DART_USE_TSAN = "DART_USE_TSAN"
-DART_USE_WHEEZY = "DART_USE_WHEEZY"
-
-def use_asan():
-  return DART_USE_ASAN in os.environ
-
-def use_msan():
-  return DART_USE_MSAN in os.environ
-
-def use_tsan():
-  return DART_USE_TSAN in os.environ
-
-def use_wheezy():
-  return DART_USE_WHEEZY in os.environ
-
-
 def parse_args(args):
   args = args[1:]
   parser = argparse.ArgumentParser(
@@ -304,10 +332,10 @@
       action='store_false')
   other_group.add_argument('--target-sysroot', '-s',
       type=str,
-      help='Path to the toolchain sysroot')
+      help='Comma-separated list of arch=/path/to/sysroot mappings')
   other_group.add_argument('--toolchain-prefix', '-t',
       type=str,
-      help='Path to the toolchain prefix')
+      help='Comma-separated list of arch=/path/to/toolchain-prefix mappings')
   other_group.add_argument('--tsan',
       help='Build with TSAN',
       default=use_tsan(),
diff --git a/tools/testing/dart/test_options.dart b/tools/testing/dart/test_options.dart
index ed54fc1..b9ad0f4 100644
--- a/tools/testing/dart/test_options.dart
+++ b/tools/testing/dart/test_options.dart
@@ -23,7 +23,6 @@
   'benchmark_smoke',
   'utils',
   'lib',
-  'pkg',
   'analyze_library',
   'service',
   'kernel',
@@ -485,7 +484,7 @@
           'Exclude suites from default selector, only works when no'
           ' selector has been specified on the command line',
           ['--exclude-suite'],
-          defaultTestSelectors,
+          [],
           null),
       new _TestOptionSpecification(
           'skip-compilation',
@@ -742,7 +741,7 @@
     }
     if (config['ie'] && Platform.operatingSystem != 'windows') {
       isValid = false;
-      print("Warning cannot run Internet Explorer on non-Windows operating"
+      print("Warning: cannot run Internet Explorer on non-Windows operating"
           " system.");
     }
     if (config['shard'] < 1 || config['shard'] > config['shards']) {
@@ -836,8 +835,7 @@
           if (selectors.contains(exclude)) {
             selectors.remove(exclude);
           } else {
-            print("Error: default selectors does not contain $exclude");
-            exit(1);
+            print("Warning: default selectors does not contain $exclude");
           }
         }
       }