Version 1.25.0-dev.8.0

Merge commit 'f434d8758107c2c072ee9174b84200d98240f230' into dev
diff --git a/.packages b/.packages
index be02891..e439efd 100644
--- a/.packages
+++ b/.packages
@@ -20,7 +20,6 @@
 charcode:third_party/pkg/charcode/lib
 charted:third_party/observatory_pub_packages/packages/charted/lib
 cli_util:third_party/pkg/cli_util/lib
-code_transformers:third_party/pkg/code_transformers/lib
 collection:third_party/pkg/collection/lib
 compiler:pkg/compiler/lib
 # Compiler is imported as compiler_unsupported so it can work outside the SDK.
@@ -44,7 +43,6 @@
 http_multi_server:third_party/pkg/http_multi_server/lib
 http_parser:third_party/pkg/http_parser/lib
 http_throttle:third_party/pkg/http_throttle/lib
-initialize:third_party/pkg/initialize/lib
 intl:third_party/pkg/intl/lib
 isolate:third_party/pkg/isolate/lib
 js:pkg/js/lib
@@ -58,14 +56,13 @@
 markdown:third_party/pkg/markdown/lib
 matcher:third_party/pkg/matcher/lib
 meta:pkg/meta/lib
-metatest:third_party/pkg/metatest/lib
 microlytics:pkg/microlytics/lib
 mime:third_party/pkg/mime/lib
 mustache4dart:third_party/pkg/mustache4dart/lib
 oauth2:third_party/pkg/oauth2/lib
-observable:third_party/pkg/observable/lib
 observatory:runtime/observatory/lib
-observe:third_party/pkg/observe/lib
+# Note: this is pointing to the observatory_pub_packages version of pkg/observe
+observe:third_party/observatory_pub_packages/packages/observe/lib
 package_config:third_party/pkg_tested/package_config/lib
 package_resolver:third_party/pkg_tested/package_resolver/lib
 path:third_party/pkg/path/lib
@@ -84,7 +81,8 @@
 shelf_packages_handler:third_party/pkg/shelf_packages_handler/lib
 shelf_static:third_party/pkg/shelf_static/lib
 shelf_web_socket:third_party/pkg/shelf_web_socket/lib
-smoke:third_party/pkg/smoke/lib
+# Note: this is pointing to the observatory_pub_packages version of pkg/observe
+smoke:third_party/observatory_pub_packages/packages/smoke/lib
 source_map_stack_trace:third_party/pkg/source_map_stack_trace/lib
 source_maps:third_party/pkg/source_maps/lib
 source_span:third_party/pkg/source_span/lib
@@ -103,6 +101,7 @@
 usage:third_party/pkg/usage/lib
 utf:third_party/pkg/utf/lib
 watcher:third_party/pkg/watcher/lib
-web_components:third_party/pkg/web_components/lib
+# Note: this is pointing to the observatory_pub_packages version of pkg/observe
+web_components:third_party/observatory_pub_packages/packages/web_components/lib
 web_socket_channel:third_party/pkg/web_socket_channel/lib
 yaml:third_party/pkg/yaml/lib
diff --git a/DEPS b/DEPS
index 72caed1..90ed3d4 100644
--- a/DEPS
+++ b/DEPS
@@ -58,14 +58,26 @@
   "charcode_tag": "@v1.1.1",
   "chrome_rev" : "@19997",
   "cli_util_tag" : "@0.1.0",
-  "code_transformers_tag": "@v0.5.1",
-  "collection_tag": "@1.13.0",
+  "collection_tag": "@1.14.3",
   "convert_tag": "@2.0.1",
-  "crypto_tag" : "@2.0.1",
+  "crypto_tag" : "@2.0.2",
   "csslib_tag" : "@0.13.3+1",
   "dart2js_info_tag" : "@0.5.4+2",
-  "dart_services_rev" : "@7aea2574e6f3924bf409a80afb8ad52aa2be4f97",
-  "dart_style_tag": "@1.0.7",
+
+  # Note: updates to dart_style have to be coordinated carefully with
+  # the infrastructure-team so that the internal formatter in
+  # `sdk/tools/sdks/*/dart-sdk/bin/dartfmt` matches the version here.
+  #
+  # Please follow this process to make updates:
+  #   * file an issue with area-infrastructure requesting a roll for this
+  #     package (please also indicate what version to roll).
+  #   * let the infrastructure team submit the change on your behalf,
+  #     so they can build a new dev release and roll the submitted sdks a few
+  #     minutes later.
+  #
+  # For more details, see https://github.com/dart-lang/sdk/issues/30164
+  "dart_style_tag": "@1.0.7",  # Please see the note above before updating.
+
   "dartdoc_tag" : "@v0.13.0+1",
   "fixnum_tag": "@0.10.5",
   "func_tag": "@1.0.0",
@@ -73,26 +85,23 @@
   "html_tag" : "@0.13.1",
   "http_multi_server_tag" : "@2.0.3",
   "http_parser_tag" : "@3.1.1",
-  "http_tag" : "@0.11.3+13",
+  "http_tag" : "@0.11.3+14",
   "http_throttle_tag" : "@1.0.1",
   "idl_parser_rev": "@7fbe68cab90c38147dee4f48c30ad0d496c17915",
-  "initialize_tag": "@v0.6.2+5",
   "intl_tag": "@0.14.0",
   "isolate_tag": "@1.0.0",
   "jinja2_rev": "@2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_tag": "@2.0.4",
-  "linter_tag": "@0.1.31",
+  "linter_tag": "@0.1.33",
   "logging_tag": "@0.11.3+1",
   "markdown_tag": "@0.11.3",
   "matcher_tag": "@0.12.0+2",
-  "metatest_tag": "@0.2.2+3",
   "mime_rev": "@75890811d4af5af080351ba8a2853ad4c8df98dd",
+  "mockito_tag": "@2.0.2",
   "mustache4dart_tag" : "@v1.1.0",
   "oauth2_tag": "@1.0.2",
-  "observable_tag": "@0.17.0",
   "observatory_pub_packages_rev": "@26aad88f1c1915d39bbcbff3cad589e2402fdcf1",
-  "observe_tag": "@0.15.0",
-  "package_config_tag": "@1.0.0",
+  "package_config_tag": "@1.0.1",
   "package_resolver_tag": "@1.0.2+1",
   "path_tag": "@1.4.1",
   "plugin_tag": "@0.2.0",
@@ -109,7 +118,6 @@
   "shelf_packages_handler_tag": "@1.0.0",
   "shelf_tag": "@0.6.7+2",
   "shelf_web_socket_tag": "@0.2.1",
-  "smoke_tag" : "@v0.3.6+2",
   "source_map_stack_trace_tag": "@1.1.4",
   "source_maps-0.9.4_rev": "@38524",
   "source_maps_tag": "@0.10.4",
@@ -125,7 +133,6 @@
   "usage_tag": "@3.3.0",
   "utf_tag": "@0.9.0+3",
   "watcher_tag": "@0.9.7+3",
-  "web_components_rev": "@6349e09f9118dce7ae1b309af5763745e25a9d61",
   "web_socket_channel_tag": "@1.0.4",
   "WebCore_rev": "@3c45690813c112373757bbef53de1602a62af609",
   "yaml_tag": "@2.1.12",
@@ -203,12 +210,6 @@
       (Var("github_mirror") % "crypto") + Var("crypto_tag"),
   Var("dart_root") + "/third_party/pkg/csslib":
       (Var("github_mirror") % "csslib") + Var("csslib_tag"),
-  Var("dart_root") + "/third_party/pkg/code_transformers":
-      (Var("github_mirror") % "code_transformers") +
-      Var("code_transformers_tag"),
-  Var("dart_root") + "/third_party/dart-services":
-      (Var("github_mirror") % "dart-services") +
-      Var("dart_services_rev"),
   Var("dart_root") + "/third_party/pkg_tested/dart_style":
       (Var("github_mirror") % "dart_style") + Var("dart_style_tag"),
   Var("dart_root") + "/third_party/pkg/dart2js_info":
@@ -233,8 +234,6 @@
   Var("dart_root") + "/third_party/pkg/http_throttle":
       (Var("github_mirror") % "http_throttle") +
       Var("http_throttle_tag"),
-  Var("dart_root") + "/third_party/pkg/initialize":
-      (Var("github_mirror") % "initialize") + Var("initialize_tag"),
   Var("dart_root") + "/third_party/pkg/intl":
       (Var("github_mirror") % "intl") + Var("intl_tag"),
   Var("dart_root") + "/third_party/pkg/isolate":
@@ -249,20 +248,16 @@
       (Var("github_mirror") % "markdown") + Var("markdown_tag"),
   Var("dart_root") + "/third_party/pkg/matcher":
       (Var("github_mirror") % "matcher") + Var("matcher_tag"),
-  Var("dart_root") + "/third_party/pkg/metatest":
-      (Var("github_mirror") % "metatest") + Var("metatest_tag"),
   Var("dart_root") + "/third_party/pkg/mime":
       (Var("github_mirror") % "mime") + Var("mime_rev"),
+  Var("dart_root") + "/third_party/pkg/mockito":
+      "https://github.com/dart-lang/mockito.git" + Var("mockito_tag"),
   Var("dart_root") + "/third_party/pkg/mustache4dart":
       Var("chromium_git")
       + "/external/github.com/valotas/mustache4dart.git"
       + Var("mustache4dart_tag"),
   Var("dart_root") + "/third_party/pkg/oauth2":
       (Var("github_mirror") % "oauth2") + Var("oauth2_tag"),
-  Var("dart_root") + "/third_party/pkg/observable":
-      (Var("github_mirror") % "observable") + Var("observable_tag"),
-  Var("dart_root") + "/third_party/pkg/observe":
-      (Var("github_mirror") % "observe") + Var("observe_tag"),
   Var("dart_root") + "/third_party/observatory_pub_packages":
       (Var("github_mirror") % "observatory_pub_packages")
       + Var("observatory_pub_packages_rev"),
@@ -301,8 +296,6 @@
   Var("dart_root") + "/third_party/pkg/shelf_web_socket":
       (Var("github_mirror") % "shelf_web_socket") +
       Var("shelf_web_socket_tag"),
-  Var("dart_root") + "/third_party/pkg/smoke":
-      (Var("github_mirror") % "smoke") + Var("smoke_tag"),
   Var("dart_root") + "/third_party/pkg/source_maps":
       (Var("github_mirror") % "source_maps") + Var("source_maps_tag"),
   Var("dart_root") + "/third_party/pkg/source_span":
@@ -336,9 +329,6 @@
       (Var("github_mirror") % "utf") + Var("utf_tag"),
   Var("dart_root") + "/third_party/pkg/watcher":
       (Var("github_mirror") % "watcher") + Var("watcher_tag"),
-  Var("dart_root") + "/third_party/pkg/web_components":
-      (Var("github_mirror") % "web-components") +
-      Var("web_components_rev"),
   Var("dart_root") + "/third_party/pkg/web_socket_channel":
       (Var("github_mirror") % "web_socket_channel") +
       Var("web_socket_channel_tag"),
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 870062a..64d30c3 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -10,18 +10,19 @@
 
 import imp
 import os
+import os.path
 import scm
 import subprocess
 import tempfile
 
 def _CheckBuildStatus(input_api, output_api):
-   results = []
-   status_check = input_api.canned_checks.CheckTreeIsOpen(
-       input_api,
-       output_api,
-       json_url='http://dart-status.appspot.com/current?format=json')
-   results.extend(status_check)
-   return results
+  results = []
+  status_check = input_api.canned_checks.CheckTreeIsOpen(
+      input_api,
+      output_api,
+      json_url='http://dart-status.appspot.com/current?format=json')
+  results.extend(status_check)
+  return results
 
 def _CheckDartFormat(input_api, output_api):
   local_root = input_api.change.RepositoryRoot()
@@ -96,9 +97,81 @@
 
   return []
 
+def _CheckNewTests(input_api, output_api):
+  testsDirectories = [
+      #    Dart 1 tests                DDC tests
+      # =================       ==========================
+      ("tests/language/",       "tests/language_2/"),
+      ("tests/corelib/",        "tests/corelib_2/"),
+      ("tests/lib/",            "tests/lib_2/"),
+      ("tests/html/",           "tests/lib_2/html/"),
+  ]
+
+  result = []
+  # Tuples of (new Dart 1 test path, expected DDC test path)
+  dart1TestsAdded = []
+  # Tuples of (original Dart test path, expected DDC test path)
+  ddcTestsExists = []
+  for f in input_api.AffectedFiles():
+    for oldPath, newPath in testsDirectories:
+      if f.LocalPath().startswith(oldPath):
+        if f.Action() == 'A':
+          # Compute where the new test should live.
+          ddcTestPath = f.LocalPath().replace(oldPath, newPath)
+          dart1TestsAdded.append((f.LocalPath(), ddcTestPath))
+        elif f.Action() == 'M':
+          # Find all modified tests in Dart 1.0
+          filename = f.LocalPath()
+          for oldPath, newPath in testsDirectories:
+            if filename.find(oldPath) == 0:
+              ddcTestFilePathAbs = "%s" % \
+                  f.AbsoluteLocalPath().replace(oldPath, newPath)
+              if os.path.isfile(ddcTestFilePathAbs):
+                #originalDart1Test.append(f.LocalPath())
+                ddcTestsExists.append((f.LocalPath(),
+                    f.LocalPath().replace(oldPath, newPath)))
+
+  # Does a Dart 2.0 DDC test exist if so it must be changed too.
+  missingDDCTestsChange = []
+  for (dartTest, ddcTest) in ddcTestsExists:
+    foundDDCTestModified = False
+    for f in input_api.AffectedFiles():
+      if f.LocalPath() == ddcTest:
+        # Found corresponding DDC test - great.
+        foundDDCTestModified = True
+        break
+    if not foundDDCTestModified:
+      # Add the tuple (dart 1 test path, DDC test path)
+      missingDDCTestsChange.append((dartTest, ddcTest))
+
+  if missingDDCTestsChange:
+    errorList = []
+    for idx, (orginalTest, ddcTest) in enumerate(missingDDCTestsChange):
+      errorList.append(
+          '%s. Dart 1.0 test changed: %s\n%s. DDC  test must change: ' \
+          '%s\n' % (idx + 1, orginalTest, idx + 1, ddcTest))
+    result.append(output_api.PresubmitError(
+        'Error: If you change a Dart 1.0 test, you must also update the DDC '
+        'test:\n%s' % ''.join(errorList)))
+
+  if dart1TestsAdded:
+    errorList = []
+    for idx, (oldTestPath, newTestPath) in enumerate(dart1TestsAdded):
+      errorList.append('%s. New Dart 1.0  test: %s\n'
+          '%s. Should be DDC test: %s\n' % \
+          (idx + 1, oldTestPath, idx + 1, newTestPath))
+    result.append(output_api.PresubmitError(
+        'Error: New Dart 1.0 test can not be added the test must be added as '
+        'a DDC test:\n'
+        'Fix tests:\n%s' % ''.join(errorList)))
+
+  return result
+
 def CheckChangeOnCommit(input_api, output_api):
   return (_CheckBuildStatus(input_api, output_api) +
+          _CheckNewTests(input_api, output_api) +
           _CheckDartFormat(input_api, output_api))
 
 def CheckChangeOnUpload(input_api, output_api):
-  return _CheckDartFormat(input_api, output_api)
+  return (_CheckNewTests(input_api, output_api) +
+          _CheckDartFormat(input_api, output_api))
diff --git a/codereview.settings b/codereview.settings
index ada9e3c..a170a5c 100644
--- a/codereview.settings
+++ b/codereview.settings
@@ -1,4 +1,5 @@
 # This file is used by gcl to get repository specific information.
+GERRIT_HOST: False
 CODE_REVIEW_SERVER: http://codereview.chromium.org
 VIEW_VC: https://github.com/dart-lang/sdk/commit/
 CC_LIST: reviews@dartlang.org
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index 6a73496..db05559 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -701,7 +701,6 @@
     return refactoring is ExtractLocalRefactoring ||
         refactoring is ExtractMethodRefactoring ||
         refactoring is InlineMethodRefactoring ||
-        refactoring is MoveFileRefactoring ||
         refactoring is RenameRefactoring;
   }
 
@@ -1051,12 +1050,6 @@
       inlineRefactoring.inlineAll = inlineOptions.inlineAll;
       return new RefactoringStatus();
     }
-    if (refactoring is MoveFileRefactoring) {
-      MoveFileRefactoring moveRefactoring = this.refactoring;
-      MoveFileOptions moveOptions = params.options;
-      moveRefactoring.newFile = moveOptions.newFile;
-      return new RefactoringStatus();
-    }
     if (refactoring is RenameRefactoring) {
       RenameRefactoring renameRefactoring = refactoring;
       RenameOptions renameOptions = params.options;
diff --git a/pkg/analysis_server/lib/src/plugin/plugin_manager.dart b/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
index 6b4fdc7..148cc37 100644
--- a/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
+++ b/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
@@ -13,6 +13,8 @@
 import 'package:analyzer/instrumentation/instrumentation.dart';
 import 'package:analyzer/src/generated/bazel.dart';
 import 'package:analyzer/src/generated/gn.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/generated/workspace.dart';
 import 'package:analyzer/src/util/glob.dart';
 import 'package:analyzer_plugin/channel/channel.dart';
 import 'package:analyzer_plugin/protocol/protocol.dart';
@@ -26,6 +28,7 @@
 import 'package:meta/meta.dart';
 import 'package:path/path.dart' as path;
 import 'package:watcher/watcher.dart' as watcher;
+import 'package:yaml/yaml.dart';
 
 /**
  * Information about a plugin that is built-in.
@@ -336,8 +339,8 @@
     PluginInfo plugin = _pluginMap[path];
     bool isNew = plugin == null;
     if (isNew) {
-      List<String> pluginPaths = _pathsFor(path);
-      if (pluginPaths == null || pluginPaths[1] == null) {
+      List<String> pluginPaths = pathsFor(path);
+      if (pluginPaths == null) {
         return;
       }
       plugin = new DiscoveredPluginInfo(path, pluginPaths[0], pluginPaths[1],
@@ -415,6 +418,46 @@
   }
 
   /**
+   * Return the execution path and .packages path associated with the plugin at
+   * the given [path], or `null` if there is a problem that prevents us from
+   * executing the plugin.
+   */
+  @visibleForTesting
+  List<String> pathsFor(String pluginPath) {
+    Folder pluginFolder = resourceProvider.getFolder(pluginPath);
+    File pubspecFile = pluginFolder.getChildAssumingFile('pubspec.yaml');
+    if (!pubspecFile.exists) {
+      // If there's no pubspec file, then we don't need to copy the package
+      // because we won't be running pub.
+      return _computePaths(pluginFolder);
+    }
+    Workspace workspace =
+        BazelWorkspace.find(resourceProvider, pluginFolder.path) ??
+            GnWorkspace.find(resourceProvider, pluginFolder.path);
+    if (workspace != null) {
+      // Similarly, we won't be running pub if we're in a workspace because
+      // there is exactly one version of each package.
+      return _computePaths(pluginFolder, workspace: workspace);
+    }
+    //
+    // Copy the plugin directory to a unique subdirectory of the plugin
+    // manager's state location. The subdirectory's name is selected such that
+    // it will be invariant across sessions, reducing the number of times the
+    // plugin will need to be copied and pub will need to be run.
+    //
+    Folder stateFolder = resourceProvider.getStateLocation('.plugin_manager');
+    String stateName = _uniqueDirectoryName(pluginPath);
+    Folder parentFolder = stateFolder.getChildAssumingFolder(stateName);
+    if (parentFolder.exists) {
+      Folder executionFolder =
+          parentFolder.getChildAssumingFolder(pluginFolder.shortName);
+      return _computePaths(executionFolder);
+    }
+    Folder executionFolder = pluginFolder.copyTo(parentFolder);
+    return _computePaths(executionFolder, runPub: true);
+  }
+
+  /**
    * Return a list of all of the plugins that are currently associated with the
    * given [contextRoot].
    */
@@ -518,6 +561,52 @@
     ];
   }
 
+  /**
+   * Compute the paths to be returned by the enclosing method given that the
+   * plugin should exist in the given [pluginFolder].
+   */
+  List<String> _computePaths(Folder pluginFolder,
+      {bool runPub: false, Workspace workspace}) {
+    File pluginFile = pluginFolder
+        .getChildAssumingFolder('bin')
+        .getChildAssumingFile('plugin.dart');
+    if (!pluginFile.exists) {
+      return null;
+    }
+    File packagesFile = pluginFolder.getChildAssumingFile('.packages');
+    if (!packagesFile.exists) {
+      if (runPub) {
+        String vmPath = Platform.executable;
+        String pubPath = path.join(path.dirname(vmPath), 'pub');
+        ProcessResult result = Process.runSync(pubPath, <String>['get'],
+            stderrEncoding: UTF8,
+            stdoutEncoding: UTF8,
+            workingDirectory: pluginFolder.path);
+        if (result.exitCode != 0) {
+          StringBuffer buffer = new StringBuffer();
+          buffer.writeln('Failed to run pub get');
+          buffer.writeln('  pluginFolder = ${pluginFolder.path}');
+          buffer.writeln('  exitCode = ${result.exitCode}');
+          buffer.writeln('  stdout = ${result.stdout}');
+          buffer.writeln('  stderr = ${result.stderr}');
+          instrumentationService.logError(buffer.toString());
+        }
+        if (!packagesFile.exists) {
+          packagesFile = null;
+        }
+      } else if (workspace != null) {
+        packagesFile =
+            _createPackagesFile(pluginFolder, workspace.packageUriResolver);
+      } else {
+        packagesFile = null;
+      }
+    }
+    if (packagesFile == null) {
+      return null;
+    }
+    return <String>[pluginFile.path, packagesFile.path];
+  }
+
   WatchEventType _convertChangeType(watcher.ChangeType type) {
     switch (type) {
       case watcher.ChangeType.ADD:
@@ -536,6 +625,61 @@
   }
 
   /**
+   * Return a temporary `.packages` file that is appropriate for the plugin in
+   * the given [pluginFolder]. The [packageUriResolver] is used to determine the
+   * location of the packages that need to be included in the packages file.
+   */
+  File _createPackagesFile(
+      Folder pluginFolder, UriResolver packageUriResolver) {
+    String pluginPath = pluginFolder.path;
+    Folder stateFolder = resourceProvider.getStateLocation('.plugin_manager');
+    String stateName = _uniqueDirectoryName(pluginPath) + '.packages';
+    File packagesFile = stateFolder.getChildAssumingFile(stateName);
+    if (!packagesFile.exists) {
+      File pluginPubspec = pluginFolder.getChildAssumingFile('pubspec.yaml');
+      if (!pluginPubspec.exists) {
+        return null;
+      }
+
+      try {
+        Map<String, String> visitedPackages = <String, String>{};
+        path.Context context = resourceProvider.pathContext;
+        visitedPackages[context.basename(pluginPath)] =
+            context.join(pluginFolder.path, 'lib');
+        List<File> pubspecFiles = <File>[];
+        pubspecFiles.add(pluginPubspec);
+        while (pubspecFiles.isNotEmpty) {
+          File pubspecFile = pubspecFiles.removeLast();
+          for (String packageName in _readDependecies(pubspecFile)) {
+            if (!visitedPackages.containsKey(packageName)) {
+              Uri uri = Uri.parse('package:$packageName/$packageName.dart');
+              Source packageSource = packageUriResolver.resolveAbsolute(uri);
+              String libDirPath = context.dirname(packageSource.fullName);
+              visitedPackages[packageName] = libDirPath;
+              String pubspecPath =
+                  context.join(context.dirname(libDirPath), 'pubspec.yaml');
+              pubspecFiles.add(resourceProvider.getFile(pubspecPath));
+            }
+          }
+        }
+
+        StringBuffer buffer = new StringBuffer();
+        visitedPackages.forEach((String name, String path) {
+          buffer.write(name);
+          buffer.write(':');
+          buffer.writeln(new Uri.file(path));
+        });
+        packagesFile.writeAsStringSync(buffer.toString());
+      } catch (exception) {
+        // If we are not able to produce a .packages file, return null so that
+        // callers will not try to load the plugin.
+        return null;
+      }
+    }
+    return packagesFile;
+  }
+
+  /**
    * Return `true` if the plugin with the given [path] has been whitelisted.
    */
   bool _isWhitelisted(String path) {
@@ -548,85 +692,20 @@
   }
 
   /**
-   * Return the execution path and .packages path associated with the plugin at
-   * the given [path], or `null` if there is a problem that prevents us from
-   * executing the plugin.
+   * Return the names of packages that are listed as dependencies in the given
+   * [pubspecFile].
    */
-  List<String> _pathsFor(String pluginPath) {
-    /**
-     * Return `true` if the plugin in the give [folder] needs to be copied to a
-     * temporary location so that 'pub' can be run to resolve dependencies. We
-     * need to run `pub` if the plugin contains a `pubspec.yaml` file and is not
-     * in a workspace.
-     */
-    bool needToCopy(Folder folder) {
-      File pubspecFile = folder.getChildAssumingFile('pubspec.yaml');
-      if (!pubspecFile.exists) {
-        return false;
+  Iterable<String> _readDependecies(File pubspecFile) {
+    YamlDocument document = loadYamlDocument(pubspecFile.readAsStringSync(),
+        sourceUrl: pubspecFile.toUri());
+    YamlNode contents = document.contents;
+    if (contents is YamlMap) {
+      YamlNode dependencies = contents['dependencies'];
+      if (dependencies is YamlMap) {
+        return dependencies.keys;
       }
-      return BazelWorkspace.find(resourceProvider, folder.path) == null &&
-          GnWorkspace.find(resourceProvider, folder.path) == null;
     }
-
-    /**
-     * Compute the paths to be returned by the enclosing method given that the
-     * plugin should exist in the given [pluginFolder].
-     */
-    List<String> computePaths(Folder pluginFolder, {bool runPub: false}) {
-      File pluginFile = pluginFolder
-          .getChildAssumingFolder('bin')
-          .getChildAssumingFile('plugin.dart');
-      if (!pluginFile.exists) {
-        return null;
-      }
-      File packagesFile = pluginFolder.getChildAssumingFile('.packages');
-      if (!packagesFile.exists) {
-        if (runPub) {
-          String vmPath = Platform.executable;
-          String pubPath = path.join(path.dirname(vmPath), 'pub');
-          ProcessResult result = Process.runSync(pubPath, <String>['get'],
-              stderrEncoding: UTF8,
-              stdoutEncoding: UTF8,
-              workingDirectory: pluginFolder.path);
-          if (result.exitCode != 0) {
-            StringBuffer buffer = new StringBuffer();
-            buffer.writeln('Failed to run pub get');
-            buffer.writeln('  pluginFolder = ${pluginFolder.path}');
-            buffer.writeln('  exitCode = ${result.exitCode}');
-            buffer.writeln('  stdout = ${result.stdout}');
-            buffer.writeln('  stderr = ${result.stderr}');
-            instrumentationService.logError(buffer.toString());
-          }
-          if (!packagesFile.exists) {
-            packagesFile = null;
-          }
-        } else {
-          packagesFile = null;
-        }
-      }
-      return <String>[pluginFile.path, packagesFile?.path];
-    }
-
-    Folder pluginFolder = resourceProvider.getFolder(pluginPath);
-    if (!needToCopy(pluginFolder)) {
-      return computePaths(pluginFolder);
-    }
-    //
-    // Copy the plugin directory to a unique subdirectory of the plugin
-    // manager's state location. The subdirectory's name is selected such that
-    // it will be invariant across sessions, reducing the number of times the
-    // plugin will need to be copied and pub will need to be run.
-    //
-    Folder stateFolder = resourceProvider.getStateLocation('.plugin_manager');
-    String stateName = _uniqueDirectoryName(pluginPath);
-    Folder parentFolder = stateFolder.getChildAssumingFolder(stateName);
-    if (parentFolder.exists) {
-      Folder executionFolder =
-          parentFolder.getChildAssumingFolder(pluginFolder.shortName);
-      return computePaths(executionFolder);
-    }
-    Folder executionFolder = pluginFolder.copyTo(parentFolder);
-    return computePaths(executionFolder, runPub: true);
+    return const <String>[];
   }
 
   /**
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 1052c9d..3accd66 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -1667,7 +1667,7 @@
         // prepare library name - unit name or 'dart:name' for SDK library
         String libraryName = libraryElement.definingCompilationUnit.displayName;
         if (libraryElement.isInSdk) {
-          libraryName = imp.uri;
+          libraryName = libraryElement.source.shortName;
         }
         // don't add this library again
         alreadyImportedWithPrefix.add(libraryElement.source);
diff --git a/pkg/analysis_server/lib/src/services/refactoring/move_file.dart b/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
deleted file mode 100644
index b7dcf55..0000000
--- a/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
+++ /dev/null
@@ -1,242 +0,0 @@
-// Copyright (c) 2014, 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 'dart:async';
-import 'dart:core';
-
-import 'package:analysis_server/src/protocol_server.dart' hide Element;
-import 'package:analysis_server/src/services/correction/status.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
-import 'package:analysis_server/src/services/search/search_engine.dart';
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/source.dart';
-import 'package:path/path.dart' as pathos;
-import 'package:source_span/src/span.dart';
-import 'package:yaml/yaml.dart';
-
-/**
- * [ExtractLocalRefactoring] implementation.
- */
-class MoveFileRefactoringImpl extends RefactoringImpl
-    implements MoveFileRefactoring {
-  final ResourceProvider resourceProvider;
-  final pathos.Context pathContext;
-  final SearchEngine searchEngine;
-  final AnalysisContext context;
-  final Source source;
-
-  String oldFile;
-  String newFile;
-
-  SourceChange change;
-  LibraryElement library;
-  String oldLibraryDir;
-  String newLibraryDir;
-
-  MoveFileRefactoringImpl(ResourceProvider resourceProvider, this.searchEngine,
-      this.context, this.source, this.oldFile)
-      : resourceProvider = resourceProvider,
-        pathContext = resourceProvider.pathContext {
-    if (source != null) {
-      oldFile = source.fullName;
-    }
-  }
-
-  @override
-  String get refactoringName => 'Move File';
-
-  @override
-  Future<RefactoringStatus> checkFinalConditions() {
-    RefactoringStatus result = new RefactoringStatus();
-    return new Future.value(result);
-  }
-
-  @override
-  Future<RefactoringStatus> checkInitialConditions() {
-    RefactoringStatus result = new RefactoringStatus();
-    return new Future.value(result);
-  }
-
-  @override
-  Future<SourceChange> createChange() async {
-    // move file
-    if (source != null) {
-      return _createFileChange();
-    }
-    // rename project
-    if (oldFile != null) {
-      Resource projectFolder = resourceProvider.getResource(oldFile);
-      if (projectFolder is Folder && projectFolder.exists) {
-        Resource pubspecFile = projectFolder.getChild('pubspec.yaml');
-        if (pubspecFile is File && pubspecFile.exists) {
-          return _createProjectChange(projectFolder, pubspecFile);
-        }
-      }
-    }
-    // no change
-    return null;
-  }
-
-  @override
-  bool requiresPreview() => false;
-
-  /**
-   * Computes the URI to use to reference [newFile] from [reference].
-   */
-  String _computeNewUri(SourceReference reference) {
-    String refDir = pathContext.dirname(reference.file);
-    // try to keep package: URI
-    if (_isPackageReference(reference)) {
-      Source newSource = new NonExistingSource(
-          newFile, pathos.toUri(newFile), UriKind.FILE_URI);
-      Uri restoredUri = context.sourceFactory.restoreUri(newSource);
-      if (restoredUri != null) {
-        return restoredUri.toString();
-      }
-    }
-    // if no package: URI, prepare relative
-    return _getRelativeUri(newFile, refDir);
-  }
-
-  Future<SourceChange> _createFileChange() async {
-    change = new SourceChange('Update File References');
-    List<Source> librarySources = context.getLibrariesContaining(source);
-    await Future.forEach(librarySources, (Source librarySource) async {
-      CompilationUnitElement unitElement =
-          context.getCompilationUnitElement(source, librarySource);
-      if (unitElement != null) {
-        // if a defining unit, update outgoing references
-        library = unitElement.library;
-        if (library.definingCompilationUnit == unitElement) {
-          oldLibraryDir = pathContext.dirname(oldFile);
-          newLibraryDir = pathContext.dirname(newFile);
-          _updateUriReferences(library.imports);
-          _updateUriReferences(library.exports);
-          _updateUriReferences(library.parts);
-        }
-        // update reference to the unit
-        List<SearchMatch> matches =
-            await searchEngine.searchReferences(unitElement);
-        List<SourceReference> references = getSourceReferences(matches);
-        for (SourceReference reference in references) {
-          String newUri = _computeNewUri(reference);
-          reference.addEdit(change, "'$newUri'");
-        }
-      }
-    });
-    return change;
-  }
-
-  Future<SourceChange> _createProjectChange(
-      Folder project, File pubspecFile) async {
-    change = new SourceChange('Rename project');
-    String oldPackageName = pathContext.basename(oldFile);
-    String newPackageName = pathContext.basename(newFile);
-    // add pubspec.yaml change
-    {
-      // prepare "name" field value location
-      SourceSpan nameSpan;
-      {
-        String pubspecString = pubspecFile.readAsStringSync();
-        YamlMap pubspecNode = loadYamlNode(pubspecString);
-        YamlNode nameNode = pubspecNode.nodes['name'];
-        nameSpan = nameNode.span;
-      }
-      int nameOffset = nameSpan.start.offset;
-      int nameLength = nameSpan.length;
-      // add edit
-      change.addEdit(pubspecFile.path, pubspecFile.modificationStamp,
-          new SourceEdit(nameOffset, nameLength, newPackageName));
-    }
-    // check all local libraries
-    for (Source librarySource in context.librarySources) {
-      // should be a local library
-      if (!project.contains(librarySource.fullName)) {
-        continue;
-      }
-      // we need LibraryElement
-      LibraryElement library = context.getLibraryElement(librarySource);
-      if (library == null) {
-        continue;
-      }
-      // update all imports
-      updateUriElements(List<UriReferencedElement> uriElements) {
-        for (UriReferencedElement element in uriElements) {
-          String uri = element.uri;
-          if (uri != null) {
-            String oldPrefix = 'package:$oldPackageName/';
-            if (uri.startsWith(oldPrefix)) {
-              doSourceChange_addElementEdit(
-                  change,
-                  library,
-                  new SourceEdit(element.uriOffset + 1, oldPrefix.length,
-                      'package:$newPackageName/'));
-            }
-          }
-        }
-      }
-
-      updateUriElements(library.imports);
-      updateUriElements(library.exports);
-    }
-    // done
-    return change;
-  }
-
-  String _getRelativeUri(String path, String from) {
-    String uri = pathContext.relative(path, from: from);
-    List<String> parts = pathContext.split(uri);
-    return pathos.posix.joinAll(parts);
-  }
-
-  bool _isPackageReference(SourceReference reference) {
-    Source source = reference.element.source;
-    int offset = reference.range.offset + "'".length;
-    String content = context.getContents(source).data;
-    return content.startsWith('package:', offset);
-  }
-
-  /**
-   * Checks if the given [path] represents a relative URI.
-   *
-   * The following URI's are not relative:
-   *    `/absolute/path/file.dart`
-   *    `dart:math`
-   */
-  bool _isRelativeUri(String path) {
-    // absolute URI
-    if (Uri.parse(path).isAbsolute) {
-      return false;
-    }
-    // absolute path
-    if (pathContext.isAbsolute(path)) {
-      return false;
-    }
-    // OK
-    return true;
-  }
-
-  void _updateUriReference(UriReferencedElement element) {
-    if (!element.isSynthetic) {
-      String elementUri = element.uri;
-      if (_isRelativeUri(elementUri)) {
-        String elementPath = pathContext.join(oldLibraryDir, elementUri);
-        String newUri = _getRelativeUri(elementPath, newLibraryDir);
-        int uriOffset = element.uriOffset;
-        int uriLength = element.uriEnd - uriOffset;
-        doSourceChange_addElementEdit(
-            change, library, new SourceEdit(uriOffset, uriLength, "'$newUri'"));
-      }
-    }
-  }
-
-  void _updateUriReferences(List<UriReferencedElement> elements) {
-    for (UriReferencedElement element in elements) {
-      _updateUriReference(element);
-    }
-  }
-}
diff --git a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
index d0cbfcb..1e51c6f 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
@@ -11,7 +11,6 @@
 import 'package:analysis_server/src/services/refactoring/extract_method.dart';
 import 'package:analysis_server/src/services/refactoring/inline_local.dart';
 import 'package:analysis_server/src/services/refactoring/inline_method.dart';
-import 'package:analysis_server/src/services/refactoring/move_file.dart';
 import 'package:analysis_server/src/services/refactoring/rename_class_member.dart';
 import 'package:analysis_server/src/services/refactoring/rename_constructor.dart';
 import 'package:analysis_server/src/services/refactoring/rename_import.dart';
@@ -22,10 +21,7 @@
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/dart/element/ast_provider.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart'
     show RefactoringMethodParameter, SourceChange;
 
@@ -291,29 +287,6 @@
 }
 
 /**
- * [Refactoring] to move/rename a file.
- */
-abstract class MoveFileRefactoring implements Refactoring {
-  /**
-   * Returns a new [MoveFileRefactoring] instance.
-   */
-  factory MoveFileRefactoring(
-      ResourceProvider resourceProvider,
-      SearchEngine searchEngine,
-      AnalysisContext context,
-      Source source,
-      String oldFile) {
-    return new MoveFileRefactoringImpl(
-        resourceProvider, searchEngine, context, source, oldFile);
-  }
-
-  /**
-   * The new file path to which the given file is being moved.
-   */
-  void set newFile(String newName);
-}
-
-/**
  * Abstract interface for all refactorings.
  */
 abstract class Refactoring {
@@ -390,7 +363,8 @@
           searchEngine, astProvider, element);
     }
     if (element is ImportElement) {
-      return new RenameImportRefactoringImpl(searchEngine, element);
+      return new RenameImportRefactoringImpl(
+          searchEngine, astProvider, element);
     }
     if (element is LabelElement) {
       return new RenameLabelRefactoringImpl(searchEngine, element);
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
index 8d03961..1f5ef92 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
+import 'package:analyzer/src/dart/element/ast_provider.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
@@ -21,7 +22,10 @@
  * A [Refactoring] for renaming [ImportElement]s.
  */
 class RenameImportRefactoringImpl extends RenameRefactoringImpl {
-  RenameImportRefactoringImpl(SearchEngine searchEngine, ImportElement element)
+  final AstProvider astProvider;
+
+  RenameImportRefactoringImpl(
+      SearchEngine searchEngine, this.astProvider, ImportElement element)
       : super(searchEngine, element);
 
   @override
@@ -52,14 +56,17 @@
       PrefixElement prefix = element.prefix;
       SourceEdit edit = null;
       if (newName.isEmpty) {
-        int uriEnd = element.uriEnd;
+        ImportDirective node = await _findNode();
+        int uriEnd = node.uri.end;
         int prefixEnd = element.prefixOffset + prefix.nameLength;
         edit = newSourceEdit_range(
             range.startOffsetEndOffset(uriEnd, prefixEnd), "");
       } else {
         if (prefix == null) {
-          edit = newSourceEdit_range(
-              new SourceRange(element.uriEnd, 0), " as $newName");
+          ImportDirective node = await _findNode();
+          int uriEnd = node.uri.end;
+          edit =
+              newSourceEdit_range(new SourceRange(uriEnd, 0), " as $newName");
         } else {
           int offset = element.prefixOffset;
           int length = prefix.nameLength;
@@ -95,6 +102,16 @@
   }
 
   /**
+   * Return the [ImportDirective] node that corresponds to the [element].
+   */
+  Future<ImportDirective> _findNode() async {
+    LibraryElement library = element.library;
+    CompilationUnit unit = await astProvider.getParsedUnitForElement(library);
+    int index = library.imports.indexOf(element);
+    return unit.directives.where((d) => d is ImportDirective).toList()[index];
+  }
+
+  /**
    * If the given [reference] is before an interpolated [SimpleIdentifier] in
    * an [InterpolationExpression] without surrounding curly brackets, return it.
    * Otherwise return `null`.
diff --git a/pkg/analysis_server/lib/src/status/diagnostics.dart b/pkg/analysis_server/lib/src/status/diagnostics.dart
index 9efd1da..d91be55 100644
--- a/pkg/analysis_server/lib/src/status/diagnostics.dart
+++ b/pkg/analysis_server/lib/src/status/diagnostics.dart
@@ -111,6 +111,11 @@
   text-align: right;
 }
 
+table td {
+  max-width: 600px;
+  vertical-align: text-top;
+}
+
 td.pre {
   white-space: pre;
 }
@@ -177,7 +182,9 @@
     }
     AnalysisResult result = await driver.getResult(path);
     if (result == null) {
-      p('An AST could not be produced for the file <code>${escape(path)}</code>.',
+      p(
+          'An AST could not be produced for the file <code>${escape(
+          path)}</code>.',
           raw: true);
       return;
     }
@@ -306,7 +313,8 @@
 
     int fastCount =
         completions.where((c) => c.elapsedInMilliseconds <= 100).length;
-    p('${completions.length} results; ${printPercentage(fastCount / completions.length)} within 100ms.');
+    p('${completions.length} results; ${printPercentage(
+        fastCount / completions.length)} within 100ms.');
 
     // draw a chart
     buf.writeln(
@@ -341,7 +349,8 @@
         '<tr><th>Time</th><th>Results</th><th>Source</th><th>Snippet</th></tr>');
     for (CompletionPerformance completion in completions) {
       buf.writeln('<tr>'
-          '<td class="pre right">${printMilliseconds(completion.elapsedInMilliseconds)}</td>'
+          '<td class="pre right">${printMilliseconds(
+          completion.elapsedInMilliseconds)}</td>'
           '<td class="right">${completion.suggestionCount}</td>'
           '<td>${escape(completion.source.shortName)}</td>'
           '<td><code>${escape(completion.snippet)}</code></td>'
@@ -465,7 +474,8 @@
     implicitFiles.sort();
 
     String lenCounter(List list) {
-      return '<span class="counter" style="float: right;">${list.length}</span>';
+      return '<span class="counter" style="float: right;">${list
+          .length}</span>';
     }
 
     h3('Context files');
@@ -592,7 +602,9 @@
 
       <nav class="masthead-nav">
         <a href="/status" ${isNavPage ? ' class="active"' : ''}>Diagnostics</a>
-        <a href="/feedback" ${isCurrentPage('/feedback') ? ' class="active"' : ''}>Feedback</a>
+        <a href="/feedback" ${isCurrentPage('/feedback')
+        ? ' class="active"'
+        : ''}>Feedback</a>
         <a href="https://www.dartlang.org/tools/analyzer" target="_blank">Docs</a>
         <a href="https://htmlpreview.github.io/?https://github.com/dart-lang/sdk/blob/master/pkg/analysis_server/doc/api.html" target="_blank">Spec</a>
       </nav>
@@ -685,6 +697,7 @@
     pages.add(new CompletionPage(this));
     pages.add(new CommunicationsPage(this));
     pages.add(new ContextsPage(this));
+    pages.add(new EnvironmentVariablesPage(this));
     pages.add(new ExceptionsPage(this));
     pages.add(new InstrumentationPage(this));
     pages.add(new OverlaysPage(this));
@@ -746,7 +759,9 @@
     }
     AnalysisResult result = await driver.getResult(path);
     if (result == null) {
-      p('An element model could not be produced for the file <code>${escape(path)}</code>.',
+      p(
+          'An element model could not be produced for the file <code>${escape(
+          path)}</code>.',
           raw: true);
       return;
     }
@@ -777,6 +792,24 @@
   }
 }
 
+class EnvironmentVariablesPage extends DiagnosticPageWithNav {
+  EnvironmentVariablesPage(DiagnosticsSite site)
+      : super(site, 'environment', 'Environment Variables',
+            description:
+                'System environment variables as seen from the analysis server.');
+
+  @override
+  void generateContent(Map<String, String> params) {
+    buf.writeln('<table>');
+    buf.writeln('<tr><th>Variable</th><th>Value</th></tr>');
+    for (String key in Platform.environment.keys.toList()..sort()) {
+      String value = Platform.environment[key];
+      buf.writeln('<tr><td>${escape(key)}</td><td>${escape(value)}</td></tr>');
+    }
+    buf.writeln('</table>');
+  }
+}
+
 class ExceptionsPage extends DiagnosticPageWithNav {
   ExceptionsPage(DiagnosticsSite site)
       : super(site, 'exceptions', 'Exceptions',
@@ -833,9 +866,12 @@
 
     p('Other data to include:');
     ul([
-      "the IDE you are using and it's version${ideText.isEmpty ? '' : ' ($ideText)'}",
+      "the IDE you are using and it's version${ideText.isEmpty
+          ? ''
+          : ' ($ideText)'}",
       'the Dart SDK version (<code>${escape(_sdkVersion)}</code>)',
-      'your operating system (<code>${escape(Platform.operatingSystem)}</code>)',
+      'your operating system (<code>${escape(
+          Platform.operatingSystem)}</code>)',
     ], (line) => buf.writeln(line));
 
     p('Thanks!');
@@ -942,7 +978,8 @@
       blankslate('No overlays.');
     } else {
       String lenCounter(List list) {
-        return '<span class="counter" style="float: right;">${list.length}</span>';
+        return '<span class="counter" style="float: right;">${list
+            .length}</span>';
       }
 
       h3('Overlays ${lenCounter(paths)}', raw: true);
@@ -988,10 +1025,14 @@
   }
 }
 
+// TODO(devoncarew): We're not currently tracking the time spent in specific
+// lints by default (analysisOptions / driverOptions enableTiming)
+final bool _showLints = false;
+
 class ProfilePage extends DiagnosticPageWithNav {
   ProfilePage(DiagnosticsSite site)
       : super(site, 'profile', 'Profiling Info',
-            description: 'Profiling performance tag data and lint timings.');
+            description: 'Profiling performance tag data.');
 
   @override
   void generateContent(Map<String, String> params) {
@@ -1062,27 +1103,29 @@
     tags.forEach(writeRow);
     buf.write('</table>');
 
-    h3('Lint rule timings');
-    List<LintRule> rules = Registry.ruleRegistry.rules.toList();
-    int totalLintTime = rules.fold(0,
-        (sum, rule) => sum + lintRegistry.getTimer(rule).elapsedMilliseconds);
-    p('Total time spent in lints: ${printMilliseconds(totalLintTime)}');
+    if (_showLints) {
+      h3('Lint rule timings');
+      List<LintRule> rules = Registry.ruleRegistry.rules.toList();
+      int totalLintTime = rules.fold(0,
+          (sum, rule) => sum + lintRegistry.getTimer(rule).elapsedMilliseconds);
+      p('Total time spent in lints: ${printMilliseconds(totalLintTime)}');
 
-    rules.sort((first, second) {
-      int firstTime = lintRegistry.getTimer(first).elapsedMilliseconds;
-      int secondTime = lintRegistry.getTimer(second).elapsedMilliseconds;
-      if (firstTime == secondTime) {
-        return first.lintCode.name.compareTo(second.lintCode.name);
+      rules.sort((first, second) {
+        int firstTime = lintRegistry.getTimer(first).elapsedMilliseconds;
+        int secondTime = lintRegistry.getTimer(second).elapsedMilliseconds;
+        if (firstTime == secondTime) {
+          return first.lintCode.name.compareTo(second.lintCode.name);
+        }
+        return secondTime - firstTime;
+      });
+      buf.write('<table>');
+      _writeRow(['Lint code', 'Time (in ms)'], header: true);
+      for (var rule in rules) {
+        int time = lintRegistry.getTimer(rule).elapsedMilliseconds;
+        _writeRow([rule.lintCode.name, printMilliseconds(time)]);
       }
-      return secondTime - firstTime;
-    });
-    buf.write('<table>');
-    _writeRow(['Lint code', 'Time (in ms)'], header: true);
-    for (var rule in rules) {
-      int time = lintRegistry.getTimer(rule).elapsedMilliseconds;
-      _writeRow([rule.lintCode.name, printMilliseconds(time)]);
+      buf.write('</table>');
     }
-    buf.write('</table>');
   }
 }
 
diff --git a/pkg/analysis_server/lib/src/status/element_writer.dart b/pkg/analysis_server/lib/src/status/element_writer.dart
index 91649a5..8299ef9 100644
--- a/pkg/analysis_server/lib/src/status/element_writer.dart
+++ b/pkg/analysis_server/lib/src/status/element_writer.dart
@@ -147,9 +147,6 @@
     if (element is TypeParameterizedElement) {
       properties['typeParameters'] = element.typeParameters;
     }
-    if (element is UriReferencedElement) {
-      properties['uri'] = element.uri;
-    }
     if (element is VariableElement) {
       properties['constantValue'] = element.constantValue;
       properties['hasImplicitType'] = element.hasImplicitType;
diff --git a/pkg/analysis_server/test/analysis_abstract.dart b/pkg/analysis_server/test/analysis_abstract.dart
index c37be8f..796a9aa 100644
--- a/pkg/analysis_server/test/analysis_abstract.dart
+++ b/pkg/analysis_server/test/analysis_abstract.dart
@@ -329,6 +329,12 @@
   }
 
   @override
+  List<String> pathsFor(String pluginPath) {
+    fail('Unexpected invocation of pathsFor');
+    return null;
+  }
+
+  @override
   List<PluginInfo> pluginsForContextRoot(analyzer.ContextRoot contextRoot) {
     fail('Unexpected invocation of pluginsForContextRoot');
     return null;
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
index 2ee39fb..462d787 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
@@ -67,10 +67,16 @@
     expect(imports, hasLength(directives.length + 1));
 
     ImportElement importNamed(String expectedUri) {
-      return imports.firstWhere((elem) => elem.uri == expectedUri, orElse: () {
-        var importedNames = imports.map((elem) => elem.uri);
-        fail('Failed to find $expectedUri in $importedNames');
-      });
+      List<String> uriList = <String>[];
+      for (ImportElement importElement in imports) {
+        String uri = importElement.importedLibrary.source.uri.toString();
+        uriList.add(uri);
+        if (uri.endsWith(expectedUri)) {
+          return importElement;
+        }
+      }
+      fail('Failed to find $expectedUri in $uriList');
+      return null;
     }
 
     void assertImportedLib(String expectedUri) {
@@ -79,7 +85,7 @@
     }
 
     // Assert that the new imports each have an export namespace
-    assertImportedLib(null /* dart:core */);
-    assertImportedLib('/libA.dart');
+    assertImportedLib('dart:core');
+    assertImportedLib('libA.dart');
   }
 }
diff --git a/pkg/analysis_server/test/services/refactoring/move_file_test.dart b/pkg/analysis_server/test/services/refactoring/move_file_test.dart
deleted file mode 100644
index c830b4f..0000000
--- a/pkg/analysis_server/test/services/refactoring/move_file_test.dart
+++ /dev/null
@@ -1,250 +0,0 @@
-// Copyright (c) 2014, 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 'dart:async';
-
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:test/test.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'abstract_refactoring.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(MoveFileTest);
-  });
-}
-
-@reflectiveTest
-class MoveFileTest extends RefactoringTest {
-  MoveFileRefactoring refactoring;
-
-  @failingTest
-  test_file_definingUnit() async {
-    fail('The move file refactoring is not supported under the new driver');
-    String pathA = '/project/000/1111/a.dart';
-    String pathB = '/project/000/1111/b.dart';
-    String pathC = '/project/000/1111/22/c.dart';
-    String pathD = '/project/000/1111/333/d.dart';
-    testFile = '/project/000/1111/test.dart';
-    addSource('/absolute/uri.dart', '');
-    addSource(pathA, 'part of lib;');
-    addSource(pathB, "import 'test.dart';");
-    addSource(pathC, '');
-    addSource(pathD, '');
-    addTestSource('''
-library lib;
-import 'dart:math';
-import '22/c.dart';
-export '333/d.dart';
-part 'a.dart';
-part '/absolute/uri.dart';
-''');
-    // perform refactoring
-    _createRefactoring('/project/000/1111/22/new_name.dart');
-    await _assertSuccessfulRefactoring();
-    assertNoFileChange(pathA);
-    assertFileChangeResult(pathB, "import '22/new_name.dart';");
-    assertNoFileChange(pathC);
-    assertFileChangeResult(testFile, '''
-library lib;
-import 'dart:math';
-import 'c.dart';
-export '../333/d.dart';
-part '../a.dart';
-part '/absolute/uri.dart';
-''');
-  }
-
-  @failingTest
-  test_file_importedLibrary() async {
-    fail('The move file refactoring is not supported under the new driver');
-    String pathA = '/project/000/1111/a.dart';
-    testFile = '/project/000/1111/sub/folder/test.dart';
-    addSource(pathA, '''
-import 'sub/folder/test.dart';
-''');
-    addTestSource('');
-    // perform refactoring
-    _createRefactoring('/project/000/new/folder/name/new_name.dart');
-    await _assertSuccessfulRefactoring();
-    assertFileChangeResult(pathA, '''
-import '../new/folder/name/new_name.dart';
-''');
-    assertNoFileChange(testFile);
-  }
-
-  @failingTest
-  test_file_importedLibrary_down() async {
-    fail('The move file refactoring is not supported under the new driver');
-    String pathA = '/project/000/1111/a.dart';
-    testFile = '/project/000/1111/test.dart';
-    addSource(pathA, '''
-import 'test.dart';
-''');
-    addTestSource('');
-    // perform refactoring
-    _createRefactoring('/project/000/1111/22/new_name.dart');
-    await _assertSuccessfulRefactoring();
-    assertFileChangeResult(pathA, '''
-import '22/new_name.dart';
-''');
-    assertNoFileChange(testFile);
-  }
-
-  @failingTest
-  test_file_importedLibrary_package() async {
-    fail('The move file refactoring is not supported under the new driver');
-    // configure packages
-    testFile = '/packages/my_pkg/lib/aaa/test.dart';
-    provider.newFile(testFile, '');
-    // TODO(brianwilkerson) Figure out what this should be replaced with.
-//    Map<String, List<Folder>> packageMap = {
-//      'my_pkg': <Folder>[provider.getResource('/packages/my_pkg/lib')]
-//    };
-//    context.sourceFactory = new SourceFactory([
-//      new DartUriResolver(sdk),
-//      new PackageMapUriResolver(provider, packageMap),
-//      resourceResolver
-//    ]);
-    // do testing
-    String pathA = '/project/bin/a.dart';
-    addSource(pathA, '''
-import 'package:my_pkg/aaa/test.dart';
-''');
-    addTestSource('', Uri.parse('package:my_pkg/aaa/test.dart'));
-    // perform refactoring
-    _createRefactoring('/packages/my_pkg/lib/bbb/ccc/new_name.dart');
-    await _assertSuccessfulRefactoring();
-    assertFileChangeResult(pathA, '''
-import 'package:my_pkg/bbb/ccc/new_name.dart';
-''');
-    assertNoFileChange(testFile);
-  }
-
-  @failingTest
-  test_file_importedLibrary_up() async {
-    fail('The move file refactoring is not supported under the new driver');
-    String pathA = '/project/000/1111/a.dart';
-    testFile = '/project/000/1111/22/test.dart';
-    addSource(pathA, '''
-import '22/test.dart';
-''');
-    addTestSource('');
-    // perform refactoring
-    _createRefactoring('/project/000/1111/new_name.dart');
-    await _assertSuccessfulRefactoring();
-    assertFileChangeResult(pathA, '''
-import 'new_name.dart';
-''');
-    assertNoFileChange(testFile);
-  }
-
-  @failingTest
-  test_file_sourcedUnit() async {
-    fail('The move file refactoring is not supported under the new driver');
-    String pathA = '/project/000/1111/a.dart';
-    testFile = '/project/000/1111/22/test.dart';
-    addSource(pathA, '''
-library lib;
-part '22/test.dart';
-''');
-    addTestSource('''
-part of lib;
-''');
-    // perform refactoring
-    _createRefactoring('/project/000/1111/22/new_name.dart');
-    await _assertSuccessfulRefactoring();
-    assertFileChangeResult(pathA, '''
-library lib;
-part '22/new_name.dart';
-''');
-    assertNoFileChange(testFile);
-  }
-
-  @failingTest
-  test_file_sourcedUnit_multipleLibraries() async {
-    fail('The move file refactoring is not supported under the new driver');
-    String pathA = '/project/000/1111/a.dart';
-    String pathB = '/project/000/b.dart';
-    testFile = '/project/000/1111/22/test.dart';
-    addSource(pathA, '''
-library lib;
-part '22/test.dart';
-''');
-    addSource(pathB, '''
-library lib;
-part '1111/22/test.dart';
-''');
-    addTestSource('''
-part of lib;
-''');
-    // perform refactoring
-    _createRefactoring('/project/000/1111/22/new_name.dart');
-    await _assertSuccessfulRefactoring();
-    assertFileChangeResult(pathA, '''
-library lib;
-part '22/new_name.dart';
-''');
-    assertFileChangeResult(pathB, '''
-library lib;
-part '1111/22/new_name.dart';
-''');
-    assertNoFileChange(testFile);
-  }
-
-  @failingTest
-  test_project() async {
-    fail('The move file refactoring is not supported under the new driver');
-    String pubspecPath = '/testName/pubspec.yaml';
-    String appPath = '/testName/bin/myApp.dart';
-    provider.newFile(pubspecPath, '''
-name: testName
-version: 0.0.1
-description: My pubspec file.
-''');
-    addSource('/testName/lib/myLib.dart', '');
-    addSource(appPath, '''
-import 'package:testName/myLib.dart';
-export 'package:testName/myLib.dart';
-''');
-    // configure Uri resolves
-    // TODO(brianwilkerson) Figure out what this should be replaced with.
-//    context.sourceFactory = new SourceFactory([
-//      new DartUriResolver(sdk),
-//      new PackageMapUriResolver(provider, <String, List<Folder>>{
-//        'testName': <Folder>[provider.getResource('/testName/lib')]
-//      }),
-//      resourceResolver,
-//    ]);
-    // perform refactoring
-    refactoring = new MoveFileRefactoring(
-        provider, searchEngine, null, null, '/testName');
-    refactoring.newFile = '/newName';
-    await _assertSuccessfulRefactoring();
-    assertFileChangeResult(pubspecPath, '''
-name: newName
-version: 0.0.1
-description: My pubspec file.
-''');
-    assertFileChangeResult(appPath, '''
-import 'package:newName/myLib.dart';
-export 'package:newName/myLib.dart';
-''');
-  }
-
-  /**
-   * Checks that all conditions are OK.
-   */
-  Future _assertSuccessfulRefactoring() async {
-    await assertRefactoringConditionsOK();
-    refactoringChange = await refactoring.createChange();
-  }
-
-  void _createRefactoring(String newName) {
-    refactoring =
-        new MoveFileRefactoring(provider, searchEngine, null, testSource, null);
-    refactoring.newFile = newName;
-  }
-}
diff --git a/pkg/analysis_server/test/services/refactoring/test_all.dart b/pkg/analysis_server/test/services/refactoring/test_all.dart
index 0a887de..b845a98 100644
--- a/pkg/analysis_server/test/services/refactoring/test_all.dart
+++ b/pkg/analysis_server/test/services/refactoring/test_all.dart
@@ -10,7 +10,6 @@
 import 'extract_method_test.dart' as extract_method_test;
 import 'inline_local_test.dart' as inline_local_test;
 import 'inline_method_test.dart' as inline_method_test;
-import 'move_file_test.dart' as move_file_test;
 import 'naming_conventions_test.dart' as naming_conventions_test;
 import 'rename_class_member_test.dart' as rename_class_member_test;
 import 'rename_constructor_test.dart' as rename_constructor_test;
@@ -29,7 +28,6 @@
     extract_method_test.main();
     inline_local_test.main();
     inline_method_test.main();
-    move_file_test.main();
     naming_conventions_test.main();
     rename_class_member_test.main();
     rename_constructor_test.main();
diff --git a/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart b/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
index fbd3942..4586772 100644
--- a/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
+++ b/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
@@ -394,6 +394,80 @@
     expect(manager.notificationManager, notificationManager);
   }
 
+  void test_pathsFor_withPackagesFile() {
+    path.Context context = resourceProvider.pathContext;
+    //
+    // Build the minimal directory structure for a plugin package that includes
+    // a .packages file.
+    //
+    String pluginDirPath = resourceProvider.convertPath('/plugin');
+    String pluginFilePath = context.join(pluginDirPath, 'bin', 'plugin.dart');
+    resourceProvider.newFile(pluginFilePath, '');
+    String packagesFilePath = context.join(pluginDirPath, '.packages');
+    resourceProvider.newFile(packagesFilePath, '');
+    //
+    // Test path computation.
+    //
+    List<String> paths = manager.pathsFor(pluginDirPath);
+    expect(paths, hasLength(2));
+    expect(paths[0], pluginFilePath);
+    expect(paths[1], packagesFilePath);
+  }
+
+  void test_pathsFor_withPubspec_inBazelWorkspace() {
+    path.Context context = resourceProvider.pathContext;
+    //
+    // Build a Bazel workspace containing four packages, including the plugin.
+    //
+    String rootPath = resourceProvider.convertPath('/workspaceRoot');
+    resourceProvider.newFile(context.join(rootPath, 'WORKSPACE'), '');
+    resourceProvider.newFolder(context.join(rootPath, 'bazel-bin'));
+    resourceProvider.newFolder(context.join(rootPath, 'bazel-genfiles'));
+
+    String newPackage(String packageName, [List<String> dependencies]) {
+      String packageRoot =
+          context.join(rootPath, 'third_party', 'dart', packageName);
+      resourceProvider.newFile(
+          context.join(packageRoot, 'lib', packageName + '.dart'), '');
+      StringBuffer buffer = new StringBuffer();
+      if (dependencies != null) {
+        buffer.writeln('dependencies:');
+        for (String dependency in dependencies) {
+          buffer.writeln('  $dependency: any');
+        }
+      }
+      resourceProvider.newFile(
+          context.join(packageRoot, 'pubspec.yaml'), buffer.toString());
+      return packageRoot;
+    }
+
+    String pluginDirPath = newPackage('plugin', ['b', 'c']);
+    newPackage('b', ['d']);
+    newPackage('c', ['d']);
+    newPackage('d');
+    String pluginFilePath = context.join(pluginDirPath, 'bin', 'plugin.dart');
+    resourceProvider.newFile(pluginFilePath, '');
+    //
+    // Test path computation.
+    //
+    List<String> paths = manager.pathsFor(pluginDirPath);
+    expect(paths, hasLength(2));
+    expect(paths[0], pluginFilePath);
+    File packagesFile = resourceProvider.getFile(paths[1]);
+    expect(packagesFile.exists, isTrue);
+    String content = packagesFile.readAsStringSync();
+    List<String> lines = content.split('\n');
+    expect(
+        lines,
+        unorderedEquals([
+          'plugin:file:///workspaceRoot/third_party/dart/plugin/lib',
+          'b:file:///workspaceRoot/third_party/dart/b/lib',
+          'c:file:///workspaceRoot/third_party/dart/c/lib',
+          'd:file:///workspaceRoot/third_party/dart/d/lib',
+          ''
+        ]));
+  }
+
   void test_pluginsForContextRoot_none() {
     ContextRoot contextRoot = new ContextRoot('/pkg1', []);
     expect(manager.pluginsForContextRoot(contextRoot), isEmpty);
diff --git a/pkg/analyzer/lib/src/command_line/arguments.dart b/pkg/analyzer/lib/src/command_line/arguments.dart
index b59086b..9102d0f 100644
--- a/pkg/analyzer/lib/src/command_line/arguments.dart
+++ b/pkg/analyzer/lib/src/command_line/arguments.dart
@@ -17,6 +17,7 @@
 const String analysisOptionsFileOption = 'options';
 const String bazelAnalysisOptionsPath =
     'package:dart.analysis_options/default.yaml';
+const String declarationCastsFlag = 'declaration-casts';
 const String defineVariableOption = 'D';
 const String enableInitializingFormalAccessFlag = 'initializing-formal-access';
 const String enableStrictCallChecksFlag = 'enable-strict-call-checks';
@@ -24,8 +25,8 @@
 const String flutterAnalysisOptionsPath =
     'package:flutter/analysis_options_user.yaml';
 const String ignoreUnrecognizedFlagsFlag = 'ignore-unrecognized-flags';
+const String implicitCastsFlag = 'implicit-casts';
 const String lintsFlag = 'lints';
-const String noImplicitCastsFlag = 'no-implicit-casts';
 const String noImplicitDynamicFlag = 'no-implicit-dynamic';
 const String packageDefaultAnalysisOptions = 'package-default-analysis-options';
 const String packageRootOption = 'package-root';
@@ -54,9 +55,16 @@
     options.enableSuperMixins = args[enableSuperMixinFlag];
     verbose('$enableSuperMixinFlag = ${options.enableSuperMixins}');
   }
-  if (args.wasParsed(noImplicitCastsFlag)) {
-    options.implicitCasts = !args[noImplicitCastsFlag];
-    verbose('$noImplicitCastsFlag = ${options.implicitCasts}');
+  if (args.wasParsed(implicitCastsFlag)) {
+    options.implicitCasts = args[implicitCastsFlag];
+    verbose('$implicitCastsFlag = ${options.implicitCasts}');
+  }
+  if (args.wasParsed(declarationCastsFlag)) {
+    options.declarationCasts = args[declarationCastsFlag];
+    verbose('$declarationCastsFlag = ${options.declarationCasts}');
+  } else if (args.wasParsed(implicitCastsFlag)) {
+    options.declarationCasts = args[implicitCastsFlag];
+    verbose('$declarationCastsFlag = ${options.declarationCasts}');
   }
   if (args.wasParsed(noImplicitDynamicFlag)) {
     options.implicitDynamic = !args[noImplicitDynamicFlag];
@@ -174,8 +182,12 @@
   parser.addFlag(strongModeFlag,
       help: 'Enable strong static checks (https://goo.gl/DqcBsw).',
       defaultsTo: ddc);
-  parser.addFlag(noImplicitCastsFlag,
-      negatable: false,
+  parser.addFlag(declarationCastsFlag,
+      negatable: true,
+      help:
+          'Disable declaration casts in strong mode (https://goo.gl/cTLz40).');
+  parser.addFlag(implicitCastsFlag,
+      negatable: true,
       help: 'Disable implicit casts in strong mode (https://goo.gl/cTLz40).');
   parser.addFlag(noImplicitDynamicFlag,
       negatable: false,
diff --git a/pkg/analyzer/lib/src/context/context.dart b/pkg/analyzer/lib/src/context/context.dart
index 7d85e94..9285f76 100644
--- a/pkg/analyzer/lib/src/context/context.dart
+++ b/pkg/analyzer/lib/src/context/context.dart
@@ -285,6 +285,9 @@
             ? this._options.strongModeHints != options.strongModeHints
             : false) ||
         ((options is AnalysisOptionsImpl)
+            ? this._options.declarationCasts != options.declarationCasts
+            : false) ||
+        ((options is AnalysisOptionsImpl)
             ? this._options.implicitCasts != options.implicitCasts
             : false) ||
         ((options is AnalysisOptionsImpl)
@@ -323,6 +326,7 @@
     this._options.patchPaths = options.patchPaths;
     if (options is AnalysisOptionsImpl) {
       this._options.strongModeHints = options.strongModeHints;
+      this._options.declarationCasts = options.declarationCasts;
       this._options.implicitCasts = options.implicitCasts;
       this._options.nonnullableTypes = options.nonnullableTypes;
       this._options.implicitDynamic = options.implicitDynamic;
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 8735eea..8550184 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -86,6 +86,7 @@
           _context, _sourceFactory, _analysisOptions.strongMode, _store);
       _typeProvider = _resynthesizer.typeProvider;
       _context.typeProvider = _typeProvider;
+      _resynthesizer.finishCoreAsyncLibraries();
 
       _libraryElement = _resynthesizer.getLibraryElement(_library.uriStr);
 
@@ -271,6 +272,7 @@
           _typeProvider,
           new StrongTypeSystemImpl(_typeProvider,
               implicitCasts: options.implicitCasts,
+              declarationCasts: options.declarationCasts,
               nonnullableTypes: options.nonnullableTypes),
           errorListener,
           options);
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 97b3b2f..0e58ac1 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -31,6 +31,7 @@
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/task/dart.dart';
 import 'package:kernel/kernel.dart' as kernel;
+import 'package:kernel/type_algebra.dart' as kernel;
 
 /**
  * Assert that the given [object] is null, which in the places where this
@@ -417,6 +418,16 @@
   final kernel.Class _kernel;
 
   /**
+   * The actual supertype extracted from desugared [_kernel].
+   */
+  kernel.Supertype _kernelSupertype;
+
+  /**
+   * The mixed-in types extracted from desugared [_kernel].
+   */
+  List<kernel.Supertype> _kernelMixins;
+
+  /**
    * The superclass of the class, or `null` for [Object].
    */
   InterfaceType _supertype;
@@ -509,8 +520,10 @@
 
   @override
   List<PropertyAccessorElement> get accessors {
-    if (_unlinkedClass != null && _accessors == null) {
-      _resynthesizeFieldsAndPropertyAccessors();
+    if (_accessors == null) {
+      if (_kernel != null || _unlinkedClass != null) {
+        _resynthesizeFieldsAndPropertyAccessors();
+      }
     }
     return _accessors ?? const <PropertyAccessorElement>[];
   }
@@ -650,8 +663,10 @@
 
   @override
   List<FieldElement> get fields {
-    if (_unlinkedClass != null && _fields == null) {
-      _resynthesizeFieldsAndPropertyAccessors();
+    if (_fields == null) {
+      if (_kernel != null || _unlinkedClass != null) {
+        _resynthesizeFieldsAndPropertyAccessors();
+      }
     }
     return _fields ?? const <FieldElement>[];
   }
@@ -787,6 +802,9 @@
 
   @override
   bool get isMixinApplication {
+    if (_kernel != null) {
+      return _kernel.mixedInType != null;
+    }
     if (_unlinkedClass != null) {
       return _unlinkedClass.isMixinApplication;
     }
@@ -839,6 +857,14 @@
 
   @override
   List<MethodElement> get methods {
+    if (_kernel != null) {
+      _methods ??= _kernel.procedures
+          .where((k) =>
+              k.kind == kernel.ProcedureKind.Method ||
+              k.kind == kernel.ProcedureKind.Operator)
+          .map((k) => new MethodElementImpl.forKernel(this, k))
+          .toList(growable: false);
+    }
     if (_unlinkedClass != null) {
       _methods ??= _unlinkedClass.executables
           .where((e) => e.kind == UnlinkedExecutableKind.functionOrMethod)
@@ -869,12 +895,21 @@
 
   @override
   List<InterfaceType> get mixins {
-    if (_unlinkedClass != null && _mixins == null) {
-      ResynthesizerContext context = enclosingUnit.resynthesizerContext;
-      _mixins = _unlinkedClass.mixins
-          .map((EntityRef t) => context.resolveTypeRef(this, t))
-          .where(_isClassInterfaceType)
-          .toList(growable: false);
+    if (_mixins == null) {
+      if (_kernel != null) {
+        _initializeKernelMixins();
+        var context = enclosingUnit._kernelContext;
+        _mixins = _kernelMixins.map((k) {
+          return context.getInterfaceType(this, k);
+        }).toList(growable: false);
+      }
+      if (_unlinkedClass != null) {
+        ResynthesizerContext context = enclosingUnit.resynthesizerContext;
+        _mixins = _unlinkedClass.mixins
+            .map((EntityRef t) => context.resolveTypeRef(this, t))
+            .where(_isClassInterfaceType)
+            .toList(growable: false);
+      }
     }
     return _mixins ?? const <InterfaceType>[];
   }
@@ -908,9 +943,10 @@
   InterfaceType get supertype {
     if (_supertype == null) {
       if (_kernel != null) {
-        if (_kernel.supertype != null) {
+        _initializeKernelMixins();
+        if (_kernelSupertype != null) {
           _supertype = enclosingUnit._kernelContext
-              .getInterfaceType(this, _kernel.supertype);
+              .getInterfaceType(this, _kernelSupertype);
           _supertype ??= context.typeProvider.objectType;
         } else {
           return null;
@@ -1216,55 +1252,123 @@
   }
 
   /**
+   * Extract actual supertypes and mixed-in types from [_kernel].
+   */
+  void _initializeKernelMixins() {
+    if (_kernelSupertype == null) {
+      _kernelMixins = <kernel.Supertype>[];
+      kernel.Supertype supertype = _kernel.supertype;
+      if (supertype != null) {
+        if (_kernel.mixedInType != null) {
+          _kernelMixins.add(_kernel.mixedInType);
+        }
+        while (supertype.classNode.isSyntheticMixinImplementation) {
+          var superNode = supertype.classNode;
+          var substitute = kernel.Substitution.fromSupertype(supertype);
+          var thisMixin = substitute.substituteSupertype(superNode.mixedInType);
+          _kernelMixins.add(thisMixin);
+          supertype = substitute.substituteSupertype(superNode.supertype);
+        }
+        _kernelMixins = _kernelMixins.reversed.toList();
+      }
+      _kernelSupertype = supertype;
+    }
+  }
+
+  /**
    * Resynthesize explicit fields and property accessors and fill [_fields] and
    * [_accessors] with explicit and implicit elements.
    */
   void _resynthesizeFieldsAndPropertyAccessors() {
     assert(_fields == null);
     assert(_accessors == null);
-    // Build explicit fields and implicit property accessors.
     var explicitFields = <FieldElement>[];
     var implicitAccessors = <PropertyAccessorElement>[];
-    for (UnlinkedVariable v in _unlinkedClass.fields) {
-      FieldElementImpl field =
-          new FieldElementImpl.forSerializedFactory(v, this);
-      explicitFields.add(field);
-      implicitAccessors.add(
-          new PropertyAccessorElementImpl_ImplicitGetter(field)
-            ..enclosingElement = this);
-      if (!field.isConst && !field.isFinal) {
-        implicitAccessors.add(
-            new PropertyAccessorElementImpl_ImplicitSetter(field)
-              ..enclosingElement = this);
-      }
-    }
-    // Build explicit property accessors and implicit fields.
     var explicitAccessors = <PropertyAccessorElement>[];
     var implicitFields = <String, FieldElementImpl>{};
-    for (UnlinkedExecutable e in _unlinkedClass.executables) {
-      if (e.kind == UnlinkedExecutableKind.getter ||
-          e.kind == UnlinkedExecutableKind.setter) {
-        PropertyAccessorElementImpl accessor =
-            new PropertyAccessorElementImpl.forSerialized(e, this);
-        explicitAccessors.add(accessor);
-        // Create or update the implicit field.
-        String fieldName = accessor.displayName;
-        FieldElementImpl field = implicitFields[fieldName];
-        if (field == null) {
-          field = new FieldElementImpl(fieldName, -1);
-          implicitFields[fieldName] = field;
-          field.enclosingElement = this;
-          field.isSynthetic = true;
-          field.isFinal = e.kind == UnlinkedExecutableKind.getter;
-          field.isStatic = e.isStatic;
-        } else {
-          field.isFinal = false;
+    if (_kernel != null) {
+      // Build explicit fields and implicit property accessors.
+      for (var k in _kernel.fields) {
+        var field = new FieldElementImpl.forKernelFactory(this, k);
+        explicitFields.add(field);
+        implicitAccessors.add(
+            new PropertyAccessorElementImpl_ImplicitGetter(field)
+              ..enclosingElement = this);
+        if (!field.isConst && !field.isFinal) {
+          implicitAccessors.add(
+              new PropertyAccessorElementImpl_ImplicitSetter(field)
+                ..enclosingElement = this);
         }
-        accessor.variable = field;
-        if (e.kind == UnlinkedExecutableKind.getter) {
-          field.getter = accessor;
-        } else {
-          field.setter = accessor;
+      }
+      // Build explicit property accessors and implicit fields.
+      for (var k in _kernel.procedures) {
+        bool isGetter = k.kind == kernel.ProcedureKind.Getter;
+        bool isSetter = k.kind == kernel.ProcedureKind.Setter;
+        if (isGetter || isSetter) {
+          var accessor = new PropertyAccessorElementImpl.forKernel(this, k);
+          explicitAccessors.add(accessor);
+          // Create or update the implicit field.
+          String fieldName = accessor.displayName;
+          FieldElementImpl field = implicitFields[fieldName];
+          if (field == null) {
+            field = new FieldElementImpl(fieldName, -1);
+            implicitFields[fieldName] = field;
+            field.enclosingElement = this;
+            field.isSynthetic = true;
+            field.isFinal = isGetter;
+            field.isStatic = k.isStatic;
+          } else {
+            field.isFinal = false;
+          }
+          accessor.variable = field;
+          if (isGetter) {
+            field.getter = accessor;
+          } else {
+            field.setter = accessor;
+          }
+        }
+      }
+    } else {
+      // Build explicit fields and implicit property accessors.
+      for (UnlinkedVariable v in _unlinkedClass.fields) {
+        FieldElementImpl field =
+            new FieldElementImpl.forSerializedFactory(v, this);
+        explicitFields.add(field);
+        implicitAccessors.add(
+            new PropertyAccessorElementImpl_ImplicitGetter(field)
+              ..enclosingElement = this);
+        if (!field.isConst && !field.isFinal) {
+          implicitAccessors.add(
+              new PropertyAccessorElementImpl_ImplicitSetter(field)
+                ..enclosingElement = this);
+        }
+      }
+      // Build explicit property accessors and implicit fields.
+      for (UnlinkedExecutable e in _unlinkedClass.executables) {
+        if (e.kind == UnlinkedExecutableKind.getter ||
+            e.kind == UnlinkedExecutableKind.setter) {
+          PropertyAccessorElementImpl accessor =
+              new PropertyAccessorElementImpl.forSerialized(e, this);
+          explicitAccessors.add(accessor);
+          // Create or update the implicit field.
+          String fieldName = accessor.displayName;
+          FieldElementImpl field = implicitFields[fieldName];
+          if (field == null) {
+            field = new FieldElementImpl(fieldName, -1);
+            implicitFields[fieldName] = field;
+            field.enclosingElement = this;
+            field.isSynthetic = true;
+            field.isFinal = e.kind == UnlinkedExecutableKind.getter;
+            field.isStatic = e.isStatic;
+          } else {
+            field.isFinal = false;
+          }
+          accessor.variable = field;
+          if (e.kind == UnlinkedExecutableKind.getter) {
+            field.getter = accessor;
+          } else {
+            field.setter = accessor;
+          }
         }
       }
     }
@@ -1532,6 +1636,12 @@
 
   @override
   List<FunctionElement> get functions {
+    if (_kernelContext != null) {
+      _functions ??= _kernelContext.library.procedures
+          .where((k) => k.kind == kernel.ProcedureKind.Method)
+          .map((k) => new FunctionElementImpl.forKernel(this, k))
+          .toList(growable: false);
+    }
     if (_unlinkedUnit != null) {
       _functions ??= _unlinkedUnit.executables
           .where((e) => e.kind == UnlinkedExecutableKind.functionOrMethod)
@@ -1599,9 +1709,13 @@
   @override
   List<TopLevelVariableElement> get topLevelVariables {
     if (_kernelContext != null) {
-      return _variables ??= _kernelContext.library.fields
-          .map((k) => new TopLevelVariableElementImpl.forKernel(this, k))
-          .toList(growable: false);
+      return _variables ??= _kernelContext.library.fields.map((k) {
+        if (k.isConst && k.initializer != null) {
+          return new ConstTopLevelVariableElementImpl.forKernel(this, k);
+        } else {
+          return new TopLevelVariableElementImpl.forKernel(this, k);
+        }
+      }).toList(growable: false);
     }
     if (_unlinkedUnit != null) {
       if (_variables == null) {
@@ -1660,6 +1774,7 @@
   List<ClassElement> get types {
     if (_kernelContext != null) {
       _types ??= _kernelContext.library.classes
+          .where((k) => !k.isSyntheticMixinImplementation)
           .map((k) => new ClassElementImpl.forKernel(this, k))
           .toList(growable: false);
     }
@@ -1757,7 +1872,7 @@
         return typeImpl;
       }
     }
-    for (ClassElement type in _enums) {
+    for (ClassElement type in enums) {
       EnumElementImpl typeImpl = type;
       if (typeImpl.identifier == identifier) {
         return typeImpl;
@@ -1843,6 +1958,13 @@
   ConstFieldElementImpl(String name, int offset) : super(name, offset);
 
   /**
+   * Initialize using the given kernel.
+   */
+  ConstFieldElementImpl.forKernel(
+      ElementImpl enclosingElement, kernel.Field kernel)
+      : super.forKernel(enclosingElement, kernel);
+
+  /**
    * Initialize a newly created field element to have the given [name].
    */
   ConstFieldElementImpl.forNode(Identifier name) : super.forNode(name);
@@ -2367,6 +2489,13 @@
       : super(name, offset);
 
   /**
+   * Initialize using the given kernel.
+   */
+  ConstTopLevelVariableElementImpl.forKernel(
+      ElementImpl enclosingElement, kernel.Field kernel)
+      : super.forKernel(enclosingElement, kernel);
+
+  /**
    * Initialize a newly created top-level variable element to have the given
    * [name].
    */
@@ -2408,9 +2537,15 @@
   EvaluationResultImpl _evaluationResult;
 
   Expression get constantInitializer {
-    if (_constantInitializer == null && _unlinkedConst != null) {
-      _constantInitializer = enclosingUnit.resynthesizerContext
-          .buildExpression(this, _unlinkedConst);
+    if (_constantInitializer == null) {
+      if (_kernelInitializer != null) {
+        _constantInitializer =
+            enclosingUnit._kernelContext.getExpression(_kernelInitializer);
+      }
+      if (_unlinkedConst != null) {
+        _constantInitializer = enclosingUnit.resynthesizerContext
+            .buildExpression(this, _unlinkedConst);
+      }
     }
     return _constantInitializer;
   }
@@ -2427,6 +2562,12 @@
   }
 
   /**
+   * If this element is resynthesized from Kernel, return the Kernel
+   * initializer, otherwise return `null`.
+   */
+  kernel.Expression get _kernelInitializer;
+
+  /**
    * If this element is resynthesized from the summary, return the unlinked
    * initializer, otherwise return `null`.
    */
@@ -2459,6 +2600,13 @@
       : super(name, nameOffset);
 
   /**
+   * Initialize using the given kernel.
+   */
+  DefaultFieldFormalParameterElementImpl.forKernel(ElementImpl enclosingElement,
+      kernel.VariableDeclaration kernel, ParameterKind parameterKind)
+      : super.forKernel(enclosingElement, kernel, parameterKind);
+
+  /**
    * Initialize a newly created parameter element to have the given [name].
    */
   DefaultFieldFormalParameterElementImpl.forNode(Identifier name)
@@ -2485,6 +2633,13 @@
       : super(name, nameOffset);
 
   /**
+   * Initialize using the given kernel.
+   */
+  DefaultParameterElementImpl.forKernel(ElementImpl enclosingElement,
+      kernel.VariableDeclaration kernel, ParameterKind parameterKind)
+      : super.forKernel(enclosingElement, kernel, parameterKind);
+
+  /**
    * Initialize a newly created parameter element to have the given [name].
    */
   DefaultParameterElementImpl.forNode(Identifier name) : super.forNode(name);
@@ -3838,6 +3993,9 @@
 
   @override
   bool get isAbstract {
+    if (_kernel != null) {
+      return _kernel.isAbstract;
+    }
     if (serializedExecutable != null) {
       return serializedExecutable.isAbstract;
     }
@@ -3846,6 +4004,11 @@
 
   @override
   bool get isAsynchronous {
+    if (_kernel != null) {
+      kernel.AsyncMarker marker = _kernel.function.asyncMarker;
+      return marker == kernel.AsyncMarker.Async ||
+          marker == kernel.AsyncMarker.AsyncStar;
+    }
     if (serializedExecutable != null) {
       return serializedExecutable.isAsynchronous;
     }
@@ -3865,6 +4028,11 @@
 
   @override
   bool get isGenerator {
+    if (_kernel != null) {
+      kernel.AsyncMarker marker = _kernel.function.asyncMarker;
+      return marker == kernel.AsyncMarker.AsyncStar ||
+          marker == kernel.AsyncMarker.SyncStar;
+    }
     if (serializedExecutable != null) {
       return serializedExecutable.isGenerator;
     }
@@ -3911,9 +4079,15 @@
 
   @override
   List<ParameterElement> get parameters {
-    if (serializedExecutable != null) {
-      _parameters ??= ParameterElementImpl.resynthesizeList(
-          serializedExecutable.parameters, this);
+    if (_parameters == null) {
+      if (_kernel != null) {
+        _parameters =
+            ParameterElementImpl.forKernelFunction(this, _kernel.function);
+      }
+      if (serializedExecutable != null) {
+        _parameters = ParameterElementImpl.resynthesizeList(
+            serializedExecutable.parameters, this);
+      }
     }
     return _parameters ?? const <ParameterElement>[];
   }
@@ -3932,6 +4106,10 @@
 
   @override
   DartType get returnType {
+    if (_kernel != null) {
+      return _returnType ??= enclosingUnit._kernelContext
+          .getType(this, _kernel.function.returnType);
+    }
     if (serializedExecutable != null &&
         _declaredReturnType == null &&
         _returnType == null) {
@@ -4229,6 +4407,24 @@
   FieldElementImpl(String name, int offset) : super(name, offset);
 
   /**
+   * Initialize using the given kernel.
+   */
+  FieldElementImpl.forKernel(ElementImpl enclosingElement, kernel.Field kernel)
+      : super.forKernel(enclosingElement, kernel);
+
+  /**
+   * Initialize using the given kernel.
+   */
+  factory FieldElementImpl.forKernelFactory(
+      ClassElementImpl enclosingClass, kernel.Field kernel) {
+    if (kernel.isConst) {
+      return new ConstFieldElementImpl.forKernel(enclosingClass, kernel);
+    } else {
+      return new FieldElementImpl.forKernel(enclosingClass, kernel);
+    }
+  }
+
+  /**
    * Initialize a newly created field element to have the given [name].
    */
   FieldElementImpl.forNode(Identifier name) : super.forNode(name);
@@ -4283,6 +4479,9 @@
 
   @override
   bool get isStatic {
+    if (_kernel != null) {
+      return _kernel.isStatic;
+    }
     if (_unlinkedVariable != null) {
       return _unlinkedVariable.isStatic;
     }
@@ -4335,6 +4534,13 @@
       : super(name, nameOffset);
 
   /**
+   * Initialize using the given kernel.
+   */
+  FieldFormalParameterElementImpl.forKernel(ElementImpl enclosingElement,
+      kernel.VariableDeclaration kernel, ParameterKind parameterKind)
+      : super.forKernel(enclosingElement, kernel, parameterKind);
+
+  /**
    * Initialize a newly created parameter element to have the given [name].
    */
   FieldFormalParameterElementImpl.forNode(Identifier name)
@@ -4414,6 +4620,13 @@
   FunctionElementImpl(String name, int offset) : super(name, offset);
 
   /**
+   * Initialize using the given kernel.
+   */
+  FunctionElementImpl.forKernel(
+      ElementImpl enclosingElement, kernel.Procedure kernel)
+      : super.forKernel(enclosingElement, kernel);
+
+  /**
    * Initialize a newly created function element to have the given [name].
    */
   FunctionElementImpl.forNode(Identifier name) : super.forNode(name);
@@ -5369,6 +5582,11 @@
   final int _linkedDependency;
 
   /**
+   * The kernel of the element.
+   */
+  final kernel.LibraryDependency _kernel;
+
+  /**
    * The offset of the prefix of this import in the file that contains the this
    * import directive, or `-1` if this import is synthetic.
    */
@@ -5403,14 +5621,24 @@
   ImportElementImpl(int offset)
       : _unlinkedImport = null,
         _linkedDependency = null,
+        _kernel = null,
         super(null, offset);
 
   /**
+   * Initialize using the given kernel.
+   */
+  ImportElementImpl.forKernel(LibraryElementImpl enclosingLibrary, this._kernel)
+      : _unlinkedImport = null,
+        _linkedDependency = null,
+        super.forSerialized(enclosingLibrary);
+
+  /**
    * Initialize using the given serialized information.
    */
   ImportElementImpl.forSerialized(this._unlinkedImport, this._linkedDependency,
       LibraryElementImpl enclosingLibrary)
-      : super.forSerialized(enclosingLibrary);
+      : _kernel = null,
+        super.forSerialized(enclosingLibrary);
 
   @override
   List<NamespaceCombinator> get combinators {
@@ -5438,6 +5666,14 @@
 
   @override
   LibraryElement get importedLibrary {
+    if (_kernel != null) {
+      if (_importedLibrary == null) {
+        Uri importedUri = _kernel.targetLibrary.importUri;
+        String importedUriStr = importedUri.toString();
+        LibraryElementImpl library = enclosingElement as LibraryElementImpl;
+        _importedLibrary = library._kernelContext.getLibrary(importedUriStr);
+      }
+    }
     if (_linkedDependency != null) {
       if (_importedLibrary == null) {
         LibraryElementImpl library = enclosingElement as LibraryElementImpl;
@@ -5624,12 +5860,22 @@
   kernel.Library get library;
 
   /**
+   * Return the [Expression] for the given kernel.
+   */
+  Expression getExpression(kernel.Expression expression);
+
+  /**
    * Return the [InterfaceType] for the given Kernel [type], or `null` if the
    * [type] does not correspond to an [InterfaceType].
    */
   InterfaceType getInterfaceType(ElementImpl context, kernel.Supertype type);
 
   /**
+   * Return the [LibraryElement] for the given absolute [uriStr].
+   */
+  LibraryElement getLibrary(String uriStr);
+
+  /**
    * Return the [DartType] for the given Kernel [type], or `null` if the [type]
    * does not correspond to a [DartType].
    */
@@ -6010,21 +6256,30 @@
 
   @override
   List<ImportElement> get imports {
-    if (_unlinkedDefiningUnit != null && _imports == null) {
-      List<UnlinkedImport> unlinkedImports = _unlinkedDefiningUnit.imports;
-      int length = unlinkedImports.length;
-      if (length != 0) {
-        List<ImportElement> imports = new List<ImportElement>();
-        LinkedLibrary linkedLibrary = resynthesizerContext.linkedLibrary;
-        for (int i = 0; i < length; i++) {
-          int dependency = linkedLibrary.importDependencies[i];
-          ImportElementImpl importElement = new ImportElementImpl.forSerialized(
-              unlinkedImports[i], dependency, library);
-          imports.add(importElement);
+    if (_imports == null) {
+      if (_kernelContext != null) {
+        _imports = _kernelContext.library.dependencies
+            .where((k) => k.isImport)
+            .map((k) => new ImportElementImpl.forKernel(this, k))
+            .toList(growable: false);
+      }
+      if (_unlinkedDefiningUnit != null) {
+        List<UnlinkedImport> unlinkedImports = _unlinkedDefiningUnit.imports;
+        int length = unlinkedImports.length;
+        if (length != 0) {
+          List<ImportElement> imports = new List<ImportElement>();
+          LinkedLibrary linkedLibrary = resynthesizerContext.linkedLibrary;
+          for (int i = 0; i < length; i++) {
+            int dependency = linkedLibrary.importDependencies[i];
+            ImportElementImpl importElement =
+                new ImportElementImpl.forSerialized(
+                    unlinkedImports[i], dependency, library);
+            imports.add(importElement);
+          }
+          _imports = imports;
+        } else {
+          _imports = const <ImportElement>[];
         }
-        _imports = imports;
-      } else {
-        _imports = const <ImportElement>[];
       }
     }
     return _imports ?? ImportElement.EMPTY_LIST;
@@ -6549,12 +6804,24 @@
  */
 class MethodElementImpl extends ExecutableElementImpl implements MethodElement {
   /**
+   * The kernel of the element.
+   */
+  kernel.Procedure _kernelProcedure;
+
+  /**
    * Initialize a newly created method element to have the given [name] at the
    * given [offset].
    */
   MethodElementImpl(String name, int offset) : super(name, offset);
 
   /**
+   * Initialize using the given kernel.
+   */
+  MethodElementImpl.forKernel(
+      ClassElementImpl enclosingClass, this._kernelProcedure)
+      : super.forKernel(enclosingClass, _kernelProcedure);
+
+  /**
    * Initialize a newly created method element to have the given [name].
    */
   MethodElementImpl.forNode(Identifier name) : super.forNode(name);
@@ -6613,6 +6880,9 @@
 
   @override
   bool get isStatic {
+    if (_kernel != null) {
+      return _kernelProcedure.isStatic;
+    }
     if (serializedExecutable != null) {
       return serializedExecutable.isStatic;
     }
@@ -7322,6 +7592,11 @@
   }
 
   /**
+   * Subclasses need this getter, see [ConstVariableElement._kernelInitializer].
+   */
+  kernel.Expression get _kernelInitializer => _kernel?.initializer;
+
+  /**
    * Subclasses need this getter, see [ConstVariableElement._unlinkedConst].
    */
   UnlinkedExpr get _unlinkedConst => _unlinkedVariable?.initializer?.bodyExpr;
@@ -7339,6 +7614,11 @@
   final UnlinkedParam _unlinkedParam;
 
   /**
+   * The kernel of the element;
+   */
+  final kernel.VariableDeclaration _kernel;
+
+  /**
    * A list containing all of the parameters defined by this parameter element.
    * There will only be parameters if this parameter is a function typed
    * parameter.
@@ -7381,13 +7661,23 @@
    */
   ParameterElementImpl(String name, int nameOffset)
       : _unlinkedParam = null,
+        _kernel = null,
         super(name, nameOffset);
 
   /**
+   * Initialize using the given kernel.
+   */
+  ParameterElementImpl.forKernel(
+      ElementImpl enclosingElement, this._kernel, this._parameterKind)
+      : _unlinkedParam = null,
+        super.forSerialized(enclosingElement);
+
+  /**
    * Initialize a newly created parameter element to have the given [name].
    */
   ParameterElementImpl.forNode(Identifier name)
       : _unlinkedParam = null,
+        _kernel = null,
         super.forNode(name);
 
   /**
@@ -7395,7 +7685,8 @@
    */
   ParameterElementImpl.forSerialized(
       this._unlinkedParam, ElementImpl enclosingElement)
-      : super.forSerialized(enclosingElement);
+      : _kernel = null,
+        super.forSerialized(enclosingElement);
 
   /**
    * Initialize using the given serialized information.
@@ -7534,6 +7825,9 @@
 
   @override
   bool get isConst {
+    if (_kernel != null) {
+      return false;
+    }
     if (_unlinkedParam != null) {
       return false;
     }
@@ -7579,6 +7873,9 @@
 
   @override
   bool get isFinal {
+    if (_kernel != null) {
+      return _kernel.isFinal;
+    }
     if (_unlinkedParam != null) {
       return _unlinkedParam.isFinal;
     }
@@ -7614,6 +7911,9 @@
 
   @override
   String get name {
+    if (_kernel != null) {
+      return _kernel.name;
+    }
     if (_unlinkedParam != null) {
       return _unlinkedParam.name;
     }
@@ -7677,6 +7977,9 @@
 
   @override
   DartType get type {
+    if (_kernel != null) {
+      return _type ??= enclosingUnit._kernelContext.getType(this, _kernel.type);
+    }
     _resynthesizeTypeAndParameters();
     return super.type;
   }
@@ -7721,6 +8024,11 @@
   }
 
   /**
+   * Subclasses need this getter, see [ConstVariableElement._kernelInitializer].
+   */
+  kernel.Expression get _kernelInitializer => _kernel?.initializer;
+
+  /**
    * Subclasses need this getter, see [ConstVariableElement._unlinkedConst].
    */
   UnlinkedExpr get _unlinkedConst => _unlinkedParam?.initializer?.bodyExpr;
@@ -7818,6 +8126,54 @@
   }
 
   /**
+   * Create and return [ParameterElement]s for the given [function].
+   */
+  static List<ParameterElement> forKernelFunction(
+      ElementImpl enclosingElement, kernel.FunctionNode function) {
+    if (function.positionalParameters.isNotEmpty ||
+        function.namedParameters.isNotEmpty) {
+      var parameters = <ParameterElement>[];
+
+      // Add positional required and optional parameters.
+      for (int i = 0; i < function.positionalParameters.length; i++) {
+        kernel.VariableDeclaration parameter = function.positionalParameters[i];
+        if (i < function.requiredParameterCount) {
+          if (parameter.isFieldFormal) {
+            parameters.add(new FieldFormalParameterElementImpl.forKernel(
+                enclosingElement, parameter, ParameterKind.REQUIRED));
+          } else {
+            parameters.add(new ParameterElementImpl.forKernel(
+                enclosingElement, parameter, ParameterKind.REQUIRED));
+          }
+        } else {
+          if (parameter.isFieldFormal) {
+            parameters.add(new DefaultFieldFormalParameterElementImpl.forKernel(
+                enclosingElement, parameter, ParameterKind.POSITIONAL));
+          } else {
+            parameters.add(new DefaultParameterElementImpl.forKernel(
+                enclosingElement, parameter, ParameterKind.POSITIONAL));
+          }
+        }
+      }
+
+      // Add named parameters.
+      for (var k in function.namedParameters) {
+        if (k.isFieldFormal) {
+          parameters.add(new DefaultFieldFormalParameterElementImpl.forKernel(
+              enclosingElement, k, ParameterKind.NAMED));
+        } else {
+          parameters.add(new DefaultParameterElementImpl.forKernel(
+              enclosingElement, k, ParameterKind.NAMED));
+        }
+      }
+
+      return parameters;
+    } else {
+      return const <ParameterElement>[];
+    }
+  }
+
+  /**
    * Create and return [ParameterElement]s for the given [unlinkedParameters].
    */
   static List<ParameterElement> resynthesizeList(
@@ -8000,6 +8356,11 @@
 class PropertyAccessorElementImpl extends ExecutableElementImpl
     implements PropertyAccessorElement {
   /**
+   * The kernel of the element.
+   */
+  final kernel.Procedure _kernelProcedure;
+
+  /**
    * The variable associated with this accessor.
    */
   PropertyInducingElement variable;
@@ -8008,27 +8369,40 @@
    * Initialize a newly created property accessor element to have the given
    * [name] and [offset].
    */
-  PropertyAccessorElementImpl(String name, int offset) : super(name, offset);
+  PropertyAccessorElementImpl(String name, int offset)
+      : _kernelProcedure = null,
+        super(name, offset);
+
+  /**
+   * Initialize using the given kernel.
+   */
+  PropertyAccessorElementImpl.forKernel(
+      ElementImpl enclosingElement, this._kernelProcedure)
+      : super.forKernel(enclosingElement, _kernelProcedure);
 
   /**
    * Initialize a newly created property accessor element to have the given
    * [name].
    */
-  PropertyAccessorElementImpl.forNode(Identifier name) : super.forNode(name);
+  PropertyAccessorElementImpl.forNode(Identifier name)
+      : _kernelProcedure = null,
+        super.forNode(name);
 
   /**
    * Initialize using the given serialized information.
    */
   PropertyAccessorElementImpl.forSerialized(
       UnlinkedExecutable serializedExecutable, ElementImpl enclosingElement)
-      : super.forSerialized(serializedExecutable, enclosingElement);
+      : _kernelProcedure = null,
+        super.forSerialized(serializedExecutable, enclosingElement);
 
   /**
    * Initialize a newly created synthetic property accessor element to be
    * associated with the given [variable].
    */
   PropertyAccessorElementImpl.forVariable(PropertyInducingElementImpl variable)
-      : super(variable.name, variable.nameOffset) {
+      : _kernelProcedure = null,
+        super(variable.name, variable.nameOffset) {
     this.variable = variable;
     isStatic = variable.isStatic;
     isSynthetic = true;
@@ -8098,6 +8472,9 @@
 
   @override
   bool get isGetter {
+    if (_kernel != null) {
+      return _kernelProcedure.kind == kernel.ProcedureKind.Getter;
+    }
     if (serializedExecutable != null) {
       return serializedExecutable.kind == UnlinkedExecutableKind.getter;
     }
@@ -8106,6 +8483,9 @@
 
   @override
   bool get isSetter {
+    if (_kernel != null) {
+      return _kernelProcedure.kind == kernel.ProcedureKind.Setter;
+    }
     if (serializedExecutable != null) {
       return serializedExecutable.kind == UnlinkedExecutableKind.setter;
     }
@@ -8114,6 +8494,9 @@
 
   @override
   bool get isStatic {
+    if (_kernel != null) {
+      return _kernelProcedure.isStatic;
+    }
     if (serializedExecutable != null) {
       return serializedExecutable.isStatic ||
           variable is TopLevelVariableElement;
@@ -8708,6 +9091,9 @@
   }
 
   TypeParameterType get type {
+    if (_kernel != null) {
+      _type ??= new TypeParameterTypeImpl(this);
+    }
     if (_unlinkedTypeParam != null) {
       _type ??= new TypeParameterTypeImpl(this);
     }
diff --git a/pkg/analyzer/lib/src/fasta/analyzer_diet_listener.dart b/pkg/analyzer/lib/src/fasta/analyzer_diet_listener.dart
index f7ecea4..10e8399 100644
--- a/pkg/analyzer/lib/src/fasta/analyzer_diet_listener.dart
+++ b/pkg/analyzer/lib/src/fasta/analyzer_diet_listener.dart
@@ -31,7 +31,7 @@
 
 import 'package:front_end/src/fasta/builder/builder.dart';
 
-import 'package:front_end/src/fasta/parser/parser.dart' show MemberKind, Parser;
+import 'package:front_end/src/fasta/parser.dart' show MemberKind, Parser;
 
 import 'package:front_end/src/scanner/token.dart' show Token;
 
@@ -69,14 +69,13 @@
       CoreTypes coreTypes, TypeInferenceEngine typeInferenceEngine)
       : super(library, hierarchy, coreTypes, typeInferenceEngine);
 
-  @override
-  void buildFunctionBody(
-      Token token, ProcedureBuilder builder, MemberKind kind, Token metadata) {
-    Scope typeParameterScope = builder.computeTypeParameterScope(memberScope);
-    Scope formalParameterScope =
-        builder.computeFormalParameterScope(typeParameterScope);
-    assert(typeParameterScope != null);
-    assert(formalParameterScope != null);
+  /// Calls the parser (via [parserCallback]) using a body builder initialized
+  /// to do type inference for the given [builder].
+  ///
+  /// When parsing methods, [formalParameterScope] should be set to the formal
+  /// parameter scope; otherwise it should be `null`.
+  void _withBodyBuilder(ModifierBuilder builder, Scope formalParameterScope,
+      void parserCallback()) {
     // Create a body builder to do type inference, and a listener to record the
     // types that are inferred.
     _kernelTypes = <kernel.DartType>[];
@@ -85,21 +84,49 @@
         new InstrumentedResolutionStorer(_kernelTypes, _typeOffsets);
     _bodyBuilder = super.createListener(builder, memberScope,
         builder.isInstanceMember, formalParameterScope, resolutionStorer);
-    // Parse the function body normally; this will build the analyzer AST, run
+    // Run the parser callback; this will build the analyzer AST, run
     // the body builder to do type inference, and then copy the inferred types
     // over to the analyzer AST.
-    parseFunctionBody(
-        createListener(builder, typeParameterScope, builder.isInstanceMember,
-            formalParameterScope),
-        token,
-        metadata,
-        kind);
+    parserCallback();
+    resolutionStorer.finished();
     // The inferred types and the body builder are no longer needed.
     _bodyBuilder = null;
     _kernelTypes = null;
     _typeOffsets = null;
   }
 
+  @override
+  void buildFields(int count, Token token, bool isTopLevel) {
+    List<String> names = popList(count);
+    Builder builder = lookupBuilder(token, null, names.first);
+    Token metadata = pop();
+    _withBodyBuilder(builder, null, () {
+      parseFields(
+          createListener(builder, memberScope, builder.isInstanceMember),
+          token,
+          metadata,
+          isTopLevel);
+    });
+  }
+
+  @override
+  void buildFunctionBody(
+      Token token, ProcedureBuilder builder, MemberKind kind, Token metadata) {
+    Scope typeParameterScope = builder.computeTypeParameterScope(memberScope);
+    Scope formalParameterScope =
+        builder.computeFormalParameterScope(typeParameterScope);
+    assert(typeParameterScope != null);
+    assert(formalParameterScope != null);
+    _withBodyBuilder(builder, formalParameterScope, () {
+      parseFunctionBody(
+          createListener(builder, typeParameterScope, builder.isInstanceMember,
+              formalParameterScope),
+          token,
+          metadata,
+          kind);
+    });
+  }
+
   StackListener createListener(
       ModifierBuilder builder, Scope memberScope, bool isInstanceMember,
       [Scope formalParameterScope, TypeInferenceListener listener]) {
@@ -154,6 +181,36 @@
     listener.finishFunction(metadataConstants, formals, asyncModifier, body);
   }
 
+  @override
+  void listenerFinishFields(
+      StackListener listener, Token token, Token metadata, bool isTopLevel) {
+    // TODO(paulberry): this duplicates a lot of code from
+    // DietListener.parseFields.
+
+    // At this point the analyzer AST has been built, but it doesn't contain
+    // resolution data or inferred types.  Run the body builder and gather
+    // this information.
+    Parser parser = new Parser(_bodyBuilder);
+    if (isTopLevel) {
+      // There's a slight asymmetry between [parseTopLevelMember] and
+      // [parseMember] because the former doesn't call `parseMetadataStar`.
+      token = parser.parseMetadataStar(metadata ?? token);
+      token = parser.parseTopLevelMember(token);
+    } else {
+      token = parser.parseMember(metadata ?? token);
+    }
+    _bodyBuilder.finishFields();
+    _bodyBuilder.checkEmpty(token.charOffset);
+
+    // Now apply the resolution data and inferred types to the analyzer AST.
+    var translatedTypes = _translateTypes(_kernelTypes);
+    var resolutionApplier =
+        new ValidatingResolutionApplier(translatedTypes, _typeOffsets);
+    ast.AstNode fields = listener.finishFields();
+    fields.accept(resolutionApplier);
+    resolutionApplier.checkDone();
+  }
+
   /// Translates the given kernel types into analyzer types.
   static List<ast.DartType> _translateTypes(List<kernel.DartType> kernelTypes) {
     // For now we just translate everything to `dynamic`.
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 1c08bf9..7c3bf9e 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -7,10 +7,15 @@
 import 'package:analyzer/analyzer.dart';
 import 'package:analyzer/dart/ast/ast_factory.dart' show AstFactory;
 import 'package:analyzer/dart/ast/standard_ast_factory.dart' as standard;
-import 'package:analyzer/dart/ast/token.dart' as analyzer show Token;
 import 'package:analyzer/dart/ast/token.dart' show Token, TokenType;
-import 'package:front_end/src/fasta/parser/parser.dart'
-    show Assert, FormalParameterType, MemberKind, Parser;
+import 'package:front_end/src/fasta/parser.dart'
+    show
+        Assert,
+        FormalParameterKind,
+        IdentifierContext,
+        MemberKind,
+        Parser,
+        closeBraceTokenFor;
 import 'package:front_end/src/fasta/scanner/string_scanner.dart';
 import 'package:front_end/src/fasta/scanner/token.dart' show CommentToken;
 import 'package:front_end/src/scanner/token.dart' as analyzer;
@@ -20,8 +25,6 @@
     show Code, Message, codeExpectedExpression, codeExpectedFunctionBody;
 import 'package:front_end/src/fasta/kernel/kernel_builder.dart'
     show Builder, KernelLibraryBuilder, Scope;
-import 'package:front_end/src/fasta/parser/identifier_context.dart'
-    show IdentifierContext;
 import 'package:front_end/src/fasta/quote.dart';
 import 'package:front_end/src/fasta/source/scope_listener.dart'
     show JumpTargetKind, NullValue, ScopeListener;
@@ -118,10 +121,11 @@
   }
 
   @override
-  void handleParenthesizedExpression(analyzer.BeginToken token) {
+  void handleParenthesizedExpression(Token token) {
     debugEvent("ParenthesizedExpression");
     Expression expression = pop();
-    push(ast.parenthesizedExpression(token, expression, token.endGroup));
+    push(ast.parenthesizedExpression(
+        token, expression, closeBraceTokenFor(token)));
   }
 
   void handleStringPart(Token token) {
@@ -184,7 +188,7 @@
 
   void handleIdentifier(Token token, IdentifierContext context) {
     debugEvent("handleIdentifier");
-    analyzer.Token analyzerToken = token;
+    Token analyzerToken = token;
 
     if (context.inSymbol) {
       push(analyzerToken);
@@ -265,8 +269,8 @@
       exitLocalScope();
     }
     Block block = ast.block(beginToken, statements, endToken);
-    analyzer.Token star = pop();
-    analyzer.Token asyncKeyword = pop();
+    Token star = pop();
+    Token asyncKeyword = pop();
     push(ast.blockFunctionBody(asyncKeyword, star, block));
   }
 
@@ -357,8 +361,8 @@
   void handleExpressionFunctionBody(Token arrowToken, Token endToken) {
     debugEvent("ExpressionFunctionBody");
     Expression expression = pop();
-    analyzer.Token star = pop();
-    analyzer.Token asyncKeyword = pop();
+    Token star = pop();
+    Token asyncKeyword = pop();
     assert(star == null);
     push(ast.expressionFunctionBody(
         asyncKeyword, arrowToken, expression, endToken));
@@ -424,8 +428,8 @@
               initializerObject.argumentList));
         }
       } else if (initializerObject is AssignmentExpression) {
-        analyzer.Token thisKeyword;
-        analyzer.Token period;
+        Token thisKeyword;
+        Token period;
         SimpleIdentifier fieldName;
         Expression left = initializerObject.leftHandSide;
         if (left is PropertyAccess) {
@@ -548,7 +552,7 @@
     }
 
     Expression condition;
-    analyzer.Token rightSeparator;
+    Token rightSeparator;
     if (conditionStatement is ExpressionStatement) {
       condition = conditionStatement.expression;
       rightSeparator = conditionStatement.semicolon;
@@ -624,7 +628,7 @@
 
   void endLiteralSymbol(Token hashToken, int tokenCount) {
     debugEvent("LiteralSymbol");
-    List<analyzer.Token> components = popList(tokenCount);
+    List<Token> components = popList(tokenCount);
     push(ast.symbolLiteral(hashToken, components));
   }
 
@@ -793,7 +797,7 @@
   }
 
   void endFormalParameter(Token thisKeyword, Token nameToken,
-      FormalParameterType kind, MemberKind memberKind) {
+      FormalParameterKind kind, MemberKind memberKind) {
     debugEvent("FormalParameter");
     _ParameterDefaultValue defaultValue = pop();
 
@@ -1098,7 +1102,7 @@
     FormalParameterList parameters = pop();
     TypeParameterList typeParameters = pop();
     SimpleIdentifier name = pop();
-    analyzer.Token propertyKeyword = getOrSet;
+    Token propertyKeyword = getOrSet;
     TypeAnnotation returnType = pop();
     _Modifiers modifiers = pop();
     Token externalKeyword = modifiers?.externalKeyword;
@@ -1351,7 +1355,7 @@
     var superclass = mixinApplication.supertype;
     var withClause = ast.withClause(
         mixinApplication.withKeyword, mixinApplication.mixinTypes);
-    analyzer.Token equals = equalsToken;
+    Token equals = equalsToken;
     TypeParameterList typeParameters = pop();
     SimpleIdentifier name = pop();
     _Modifiers modifiers = pop();
@@ -1482,7 +1486,7 @@
     // Decompose the preliminary ConstructorName into the type name and
     // the actual constructor name.
     SimpleIdentifier returnType;
-    analyzer.Token period;
+    Token period;
     SimpleIdentifier name;
     Identifier typeName = constructorName.type.name;
     if (typeName is SimpleIdentifier) {
@@ -1523,8 +1527,8 @@
   }
 
   @override
-  void endFunctionDeclaration(Token endToken) {
-    debugEvent("FunctionDeclaration");
+  void endLocalFunctionDeclaration(Token token) {
+    debugEvent("LocalFunctionDeclaration");
     FunctionBody body = pop();
     pop(); // constructor initializers
     pop(); // separator before constructor initializers
@@ -1594,8 +1598,8 @@
     List<Annotation> metadata = pop();
     Comment comment = pop();
 
-    void constructor(SimpleIdentifier returnType, analyzer.Token period,
-        SimpleIdentifier name) {
+    void constructor(
+        SimpleIdentifier returnType, Token period, SimpleIdentifier name) {
       push(ast.constructorDeclaration(
           comment,
           metadata,
@@ -1730,6 +1734,12 @@
   }
 
   @override
+  AstNode finishFields() {
+    debugEvent("finishFields");
+    return pop();
+  }
+
+  @override
   void handleOperatorName(Token operatorKeyword, Token token) {
     debugEvent("OperatorName");
     push(new _OperatorName(
@@ -1757,17 +1767,17 @@
         invocation?.argumentList));
   }
 
-  ParameterKind _toAnalyzerParameterKind(FormalParameterType type) {
-    if (type == FormalParameterType.POSITIONAL) {
+  ParameterKind _toAnalyzerParameterKind(FormalParameterKind type) {
+    if (type == FormalParameterKind.optionalPositional) {
       return ParameterKind.POSITIONAL;
-    } else if (type == FormalParameterType.NAMED) {
+    } else if (type == FormalParameterKind.optionalNamed) {
       return ParameterKind.NAMED;
     } else {
       return ParameterKind.REQUIRED;
     }
   }
 
-  Comment _toAnalyzerComment(analyzer.Token comments) {
+  Comment _toAnalyzerComment(Token comments) {
     if (comments == null) return null;
 
     // This is temporary placeholder code to get tests to pass.
@@ -1775,7 +1785,7 @@
     // unified, refactor the code in analyzer's parser that handles
     // documentation comments so that it is reusable, and reuse it here.
     // See Parser.parseCommentAndMetadata
-    var tokens = <analyzer.Token>[comments];
+    var tokens = <Token>[comments];
     var references = <CommentReference>[];
     return ast.documentationComment(tokens, references);
   }
diff --git a/pkg/analyzer/lib/src/fasta/resolution_applier.dart b/pkg/analyzer/lib/src/fasta/resolution_applier.dart
index 9abe09d..6ee190c 100644
--- a/pkg/analyzer/lib/src/fasta/resolution_applier.dart
+++ b/pkg/analyzer/lib/src/fasta/resolution_applier.dart
@@ -29,27 +29,56 @@
   }
 
   @override
+  void visitInstanceCreationExpression(InstanceCreationExpression node) {
+    node.argumentList?.accept(this);
+    // TODO(paulberry): store resolution of node.constructorName.
+    node.staticType = _getTypeFor(node.constructorName);
+  }
+
+  @override
   void visitMethodInvocation(MethodInvocation node) {
     node.target?.accept(this);
+    node.methodName.staticType = _getTypeFor(node.methodName);
     // TODO(paulberry): store resolution of node.methodName.
     // TODO(paulberry): store resolution of node.typeArguments.
     node.argumentList.accept(this);
-    node.staticType = _getTypeFor(node);
+    node.staticType = _getTypeFor(node.argumentList);
+  }
+
+  @override
+  void visitParenthesizedExpression(ParenthesizedExpression node) {
+    node.visitChildren(this);
+    node.staticType = node.expression.staticType;
+  }
+
+  @override
+  void visitVariableDeclaration(VariableDeclaration node) {
+    if (node.parent is VariableDeclarationList &&
+        node.parent.parent is TopLevelVariableDeclaration) {
+      // Don't visit the name; resolution for it will come from the outline.
+    } else {
+      node.name.accept(this);
+    }
+    node.initializer?.accept(this);
   }
 
   @override
   void visitVariableDeclarationList(VariableDeclarationList node) {
-    if (node.variables.length != 1) {
-      // TODO(paulberry): handle this case
-      throw new UnimplementedError('Multiple variables in one declaration');
-    }
-    if (node.metadata.isNotEmpty) {
-      // TODO(paulberry): handle this case
-      throw new UnimplementedError('Metadata on a variable declaration list');
-    }
-    node.variables.accept(this);
-    if (node.type != null) {
-      _applyToTypeAnnotation(node.variables[0].name.staticType, node.type);
+    if (node.parent is TopLevelVariableDeclaration) {
+      node.variables.accept(this);
+    } else {
+      if (node.variables.length != 1) {
+        // TODO(paulberry): handle this case
+        throw new UnimplementedError('Multiple variables in one declaration');
+      }
+      if (node.metadata.isNotEmpty) {
+        // TODO(paulberry): handle this case
+        throw new UnimplementedError('Metadata on a variable declaration list');
+      }
+      node.variables.accept(this);
+      if (node.type != null) {
+        _applyToTypeAnnotation(node.variables[0].name.staticType, node.type);
+      }
     }
   }
 
@@ -87,8 +116,8 @@
     if (_debug) print('Getting type for $node');
     if (node.offset != _typeOffsets[_typeIndex]) {
       throw new StateError(
-          'Expected a type for offset ${node.offset}; got one for '
-          '${_typeOffsets[_typeIndex]}');
+          'Expected a type for analyzer offset ${node.offset}; got one for '
+          'kernel offset ${_typeOffsets[_typeIndex]}');
     }
     return super._getTypeFor(node);
   }
diff --git a/pkg/analyzer/lib/src/fasta/resolution_storer.dart b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
index 69d021c..c39447e 100644
--- a/pkg/analyzer/lib/src/fasta/resolution_storer.dart
+++ b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
@@ -8,16 +8,22 @@
 /// Type inference listener that records inferred types and file offsets for
 /// later use by [ValidatingResolutionApplier].
 class InstrumentedResolutionStorer extends ResolutionStorer {
+  /// Indicates whether debug messages should be printed.
+  static const bool _debug = false;
+
   final List<int> _typeOffsets;
 
   InstrumentedResolutionStorer(List<DartType> types, this._typeOffsets)
       : super(types);
 
   @override
-  void _recordType(DartType type, int offset) {
+  int _recordType(DartType type, int offset) {
+    if (_debug) {
+      print('Recording type $type for offset $offset');
+    }
     assert(_types.length == _typeOffsets.length);
     _typeOffsets.add(offset);
-    super._recordType(type, offset);
+    return super._recordType(type, offset);
   }
 }
 
@@ -26,8 +32,16 @@
 class ResolutionStorer extends TypeInferenceListener {
   final List<DartType> _types;
 
+  /// Indices into [_types] which need to be filled in later.
+  final _deferredTypeSlots = <int>[];
+
   ResolutionStorer(this._types);
 
+  /// Verifies that all deferred work has been completed.
+  void finished() {
+    assert(_deferredTypeSlots.isEmpty);
+  }
+
   @override
   bool genericExpressionEnter(
       String expressionType, Expression expression, DartType typeContext) {
@@ -43,12 +57,75 @@
   }
 
   @override
+  void methodInvocationBeforeArgs(Expression expression, bool isImplicitCall) {
+    if (!isImplicitCall) {
+      // We are visiting a method invocation like: a.f(args).  We have visited a
+      // but we haven't visited the args yet.
+      //
+      // The analyzer AST will expect a type for f at this point.  (It can't
+      // wait until later, because for all it knows, a.f might be a property
+      // access, in which case the appropriate time for the type is now).  But
+      // the type isn't known yet (because it may depend on type inference based
+      // on arguments).
+      //
+      // So we add a `null` to our list of types; we'll update it with the
+      // actual type later.
+      _deferredTypeSlots.add(_recordType(null, expression.fileOffset));
+    }
+    super.methodInvocationBeforeArgs(expression, isImplicitCall);
+  }
+
+  @override
+  void methodInvocationExit(Expression expression, Arguments arguments,
+      bool isImplicitCall, DartType inferredType) {
+    if (!isImplicitCall) {
+      // TODO(paulberry): get the actual callee function type from the inference
+      // engine
+      var calleeType = const DynamicType();
+      _types[_deferredTypeSlots.removeLast()] = calleeType;
+    }
+    _recordType(inferredType, arguments.fileOffset);
+    super.genericExpressionExit("methodInvocation", expression, inferredType);
+  }
+
+  @override
+  bool staticInvocationEnter(
+      StaticInvocation expression, DartType typeContext) {
+    // We are visiting a static invocation like: f(args), and we haven't visited
+    // args yet.
+    //
+    // The analyzer AST will expect a type for f at this point.  (It can't wait
+    // until later, because for all it knows, f is a method on `this`, and
+    // methods need a type for f at this point--see comments in
+    // [methodInvocationBeforeArgs]).  But the type isn't known yet (because it
+    // may depend on type inference based on arguments).
+    //
+    // So we add a `null` to our list of types; we'll update it with the actual
+    // type later.
+    _deferredTypeSlots.add(_recordType(null, expression.fileOffset));
+    return super.staticInvocationEnter(expression, typeContext);
+  }
+
+  @override
+  void staticInvocationExit(
+      StaticInvocation expression, DartType inferredType) {
+    // TODO(paulberry): get the actual callee function type from the inference
+    // engine
+    var calleeType = const DynamicType();
+    _types[_deferredTypeSlots.removeLast()] = calleeType;
+    _recordType(inferredType, expression.arguments.fileOffset);
+    super.genericExpressionExit("staticInvocation", expression, inferredType);
+  }
+
+  @override
   void variableDeclarationEnter(VariableDeclaration statement) {
     _recordType(statement.type, statement.fileOffset);
     super.variableDeclarationEnter(statement);
   }
 
-  void _recordType(DartType type, int offset) {
+  int _recordType(DartType type, int offset) {
+    int slot = _types.length;
     _types.add(type);
+    return slot;
   }
 }
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index 87aeba3..2fa521d 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -759,6 +759,7 @@
     if (errorCode == null) {
       return null;
     }
+
     if (identical(
             errorCode, StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION) ||
         identical(errorCode,
@@ -816,10 +817,12 @@
             }
           }
         }
+
         targetTypeName = targetType?.displayName;
         ErrorCode proxyErrorCode = (generatedWithTypePropagation
             ? HintCode.UNDEFINED_METHOD
             : StaticTypeWarningCode.UNDEFINED_METHOD);
+
         _recordUndefinedNode(targetType.element, proxyErrorCode, methodName,
             [methodName.name, targetTypeName]);
       }
@@ -1415,11 +1418,15 @@
   }
 
   /**
-   * Return `true` if the given [element] is not a proxy. See
-   * [ClassElement.isOrInheritsProxy].
+   * Return `true` if the given [element] is or inherits from a class marked
+   * with `@proxy`.
+   * 
+   * See [ClassElement.isOrInheritsProxy].
    */
-  bool _doesntHaveProxy(Element element) =>
-      !(element is ClassElement && element.isOrInheritsProxy);
+  bool _hasProxy(Element element) =>
+      !_resolver.strongMode &&
+      element is ClassElement &&
+      element.isOrInheritsProxy;
 
   /**
    * Look for any declarations of the given [identifier] that are imported using
@@ -1638,7 +1645,8 @@
       // treat it as an executable type.
       // example code: NonErrorResolverTest.
       // test_invocationOfNonFunction_proxyOnFunctionClass()
-      if (classElement.isProxy &&
+      if (!_resolver.strongMode &&
+          classElement.isProxy &&
           type.isSubtypeOf(_resolver.typeProvider.functionType)) {
         return true;
       }
@@ -1873,7 +1881,7 @@
    */
   void _recordUndefinedNode(Element declaringElement, ErrorCode errorCode,
       AstNode node, List<Object> arguments) {
-    if (_doesntHaveProxy(declaringElement)) {
+    if (!_hasProxy(declaringElement)) {
       _resolver.errorReporter.reportErrorForNode(errorCode, node, arguments);
     }
   }
@@ -1888,7 +1896,7 @@
    */
   void _recordUndefinedOffset(Element declaringElement, ErrorCode errorCode,
       int offset, int length, List<Object> arguments) {
-    if (_doesntHaveProxy(declaringElement)) {
+    if (!_hasProxy(declaringElement)) {
       _resolver.errorReporter
           .reportErrorForOffset(errorCode, offset, length, arguments);
     }
@@ -1904,7 +1912,7 @@
    */
   void _recordUndefinedToken(Element declaringElement, ErrorCode errorCode,
       Token token, List<Object> arguments) {
-    if (_doesntHaveProxy(declaringElement)) {
+    if (!_hasProxy(declaringElement)) {
       _resolver.errorReporter.reportErrorForToken(errorCode, token, arguments);
     }
   }
diff --git a/pkg/analyzer/lib/src/generated/engine.dart b/pkg/analyzer/lib/src/generated/engine.dart
index d149ffc..0922817 100644
--- a/pkg/analyzer/lib/src/generated/engine.dart
+++ b/pkg/analyzer/lib/src/generated/engine.dart
@@ -1361,6 +1361,14 @@
    */
   Uint32List _signature;
 
+  /**
+   * A flag indicating whether declaration casts are allowed in [strongMode]
+   * (they are always allowed in Dart 1.0 mode).
+   *
+   * This option is experimental and subject to change.
+   */
+  bool declarationCasts = true;
+
   @override
   @deprecated
   int cacheSize = 64;
@@ -1491,6 +1499,7 @@
     preserveComments = options.preserveComments;
     strongMode = options.strongMode;
     if (options is AnalysisOptionsImpl) {
+      declarationCasts = options.declarationCasts;
       strongModeHints = options.strongModeHints;
       implicitCasts = options.implicitCasts;
       nonnullableTypes = options.nonnullableTypes;
@@ -1607,6 +1616,7 @@
       ApiSignature buffer = new ApiSignature();
 
       // Append boolean flags.
+      buffer.addBool(declarationCasts);
       buffer.addBool(enableAssertInitializer);
       buffer.addBool(enableLazyAssignmentOperators);
       buffer.addBool(enableStrictCallChecks);
@@ -1638,6 +1648,7 @@
 
   @override
   void resetToDefaults() {
+    declarationCasts = true;
     dart2jsHint = false;
     disableCacheFlushing = false;
     enableAssertInitializer = false;
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index f8a9177..50513f7 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -1205,7 +1205,8 @@
     SimpleIdentifier nameNode = node.name;
     Expression initializerNode = node.initializer;
     // do checks
-    _checkForInvalidAssignment(nameNode, initializerNode);
+    _checkForInvalidAssignment(nameNode, initializerNode,
+        isDeclarationCast: true);
     _checkForImplicitDynamicIdentifier(node, nameNode);
     // visit name
     nameNode.accept(this);
@@ -2504,20 +2505,24 @@
   }
 
   bool _checkForAssignableExpression(
-      Expression expression, DartType expectedStaticType, ErrorCode errorCode) {
+      Expression expression, DartType expectedStaticType, ErrorCode errorCode,
+      {bool isDeclarationCast = false}) {
     DartType actualStaticType = getStaticType(expression);
     return actualStaticType != null &&
         _checkForAssignableExpressionAtType(
-            expression, actualStaticType, expectedStaticType, errorCode);
+            expression, actualStaticType, expectedStaticType, errorCode,
+            isDeclarationCast: isDeclarationCast);
   }
 
   bool _checkForAssignableExpressionAtType(
       Expression expression,
       DartType actualStaticType,
       DartType expectedStaticType,
-      ErrorCode errorCode) {
+      ErrorCode errorCode,
+      {bool isDeclarationCast = false}) {
     if (!_expressionIsAssignableAtType(
-        expression, actualStaticType, expectedStaticType)) {
+        expression, actualStaticType, expectedStaticType,
+        isDeclarationCast: isDeclarationCast)) {
       _errorReporter.reportTypeErrorForNode(
           errorCode, expression, [actualStaticType, expectedStaticType]);
       return false;
@@ -3566,9 +3571,15 @@
     if (_isInSystemLibrary) {
       return;
     }
+
+    LibraryElement exportedLibrary = exportElement.exportedLibrary;
+    if (exportedLibrary == null) {
+      return;
+    }
+
     // should be private
     DartSdk sdk = _currentLibrary.context.sourceFactory.dartSdk;
-    String uri = exportElement.uri;
+    String uri = exportedLibrary.source.uri.toString();
     SdkLibrary sdkLibrary = sdk.getSdkLibrary(uri);
     if (sdkLibrary == null) {
       return;
@@ -4179,9 +4190,15 @@
     if (_isInSystemLibrary) {
       return;
     }
+
+    LibraryElement importedLibrary = importElement.importedLibrary;
+    if (importedLibrary == null) {
+      return;
+    }
+
     // should be private
     DartSdk sdk = _currentLibrary.context.sourceFactory.dartSdk;
-    String uri = importElement.uri;
+    String uri = importedLibrary.source.uri.toString();
     SdkLibrary sdkLibrary = sdk.getSdkLibrary(uri);
     if (sdkLibrary == null || !sdkLibrary.isInternal) {
       return;
@@ -4260,7 +4277,8 @@
           StaticTypeWarningCode.FOR_IN_OF_INVALID_TYPE,
           node.iterable,
           [iterableType, loopTypeName]);
-    } else if (!_typeSystem.isAssignableTo(bestIterableType, variableType)) {
+    } else if (!_typeSystem.isAssignableTo(bestIterableType, variableType,
+        isDeclarationCast: true)) {
       _errorReporter.reportTypeErrorForNode(
           StaticTypeWarningCode.FOR_IN_OF_INVALID_ELEMENT_TYPE,
           node.iterable,
@@ -4414,7 +4432,8 @@
    *
    * See [StaticTypeWarningCode.INVALID_ASSIGNMENT].
    */
-  void _checkForInvalidAssignment(Expression lhs, Expression rhs) {
+  void _checkForInvalidAssignment(Expression lhs, Expression rhs,
+      {bool isDeclarationCast = false}) {
     if (lhs == null || rhs == null) {
       return;
     }
@@ -4423,7 +4442,8 @@
         ? getStaticType(lhs)
         : leftVariableElement.type;
     _checkForAssignableExpression(
-        rhs, leftType, StaticTypeWarningCode.INVALID_ASSIGNMENT);
+        rhs, leftType, StaticTypeWarningCode.INVALID_ASSIGNMENT,
+        isDeclarationCast: isDeclarationCast);
   }
 
   /**
@@ -6306,13 +6326,15 @@
   }
 
   bool _expressionIsAssignableAtType(Expression expression,
-      DartType actualStaticType, DartType expectedStaticType) {
+      DartType actualStaticType, DartType expectedStaticType,
+      {isDeclarationCast: false}) {
     bool concrete = _options.strongMode && checker.hasStrictArrow(expression);
     if (concrete && actualStaticType is FunctionType) {
       actualStaticType =
           _typeSystem.functionTypeToConcreteType(actualStaticType);
     }
-    return _typeSystem.isAssignableTo(actualStaticType, expectedStaticType);
+    return _typeSystem.isAssignableTo(actualStaticType, expectedStaticType,
+        isDeclarationCast: isDeclarationCast);
   }
 
   MethodElement _findOverriddenMemberThatMustCallSuper(MethodDeclaration node) {
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 3500d4a..c3cb4e2 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -847,14 +847,16 @@
         ? ErrorVerifier.getStaticType(lhs)
         : leftVariableElement.type;
     DartType staticRightType = ErrorVerifier.getStaticType(rhs);
-    if (!_typeSystem.isAssignableTo(staticRightType, leftType)) {
+    if (!_typeSystem.isAssignableTo(staticRightType, leftType,
+        isDeclarationCast: true)) {
       // The warning was generated on this rhs
       return false;
     }
     // Test for, and then generate the hint
     DartType bestRightType = rhs.bestType;
     if (leftType != null && bestRightType != null) {
-      if (!_typeSystem.isAssignableTo(bestRightType, leftType)) {
+      if (!_typeSystem.isAssignableTo(bestRightType, leftType,
+          isDeclarationCast: true)) {
         _errorReporter.reportTypeErrorForNode(
             HintCode.INVALID_ASSIGNMENT, rhs, [bestRightType, leftType]);
         return true;
diff --git a/pkg/analyzer/lib/src/generated/type_system.dart b/pkg/analyzer/lib/src/generated/type_system.dart
index 8507bf3..1ed098d 100644
--- a/pkg/analyzer/lib/src/generated/type_system.dart
+++ b/pkg/analyzer/lib/src/generated/type_system.dart
@@ -48,6 +48,13 @@
   static bool _comparingTypeParameterBounds = false;
 
   /**
+   * True if declaration casts should be allowed, otherwise false.
+   *
+   * This affects the behavior of [isAssignableTo].
+   */
+  final bool declarationCasts;
+
+  /**
    * True if implicit casts should be allowed, otherwise false.
    *
    * This affects the behavior of [isAssignableTo].
@@ -62,7 +69,8 @@
   final TypeProvider typeProvider;
 
   StrongTypeSystemImpl(this.typeProvider,
-      {this.implicitCasts: true,
+      {this.declarationCasts: true,
+      this.implicitCasts: true,
       this.nonnullableTypes: AnalysisOptionsImpl.NONNULLABLE_TYPES});
 
   @override
@@ -409,7 +417,8 @@
   }
 
   @override
-  bool isAssignableTo(DartType fromType, DartType toType) {
+  bool isAssignableTo(DartType fromType, DartType toType,
+      {bool isDeclarationCast = false}) {
     // TODO(leafp): Document the rules in play here
 
     // An actual subtype
@@ -417,7 +426,11 @@
       return true;
     }
 
-    if (!implicitCasts) {
+    if (isDeclarationCast) {
+      if (!declarationCasts) {
+        return false;
+      }
+    } else if (!implicitCasts) {
       return false;
     }
 
@@ -1222,7 +1235,8 @@
    * Return `true` if the [leftType] is assignable to the [rightType] (that is,
    * if leftType <==> rightType).
    */
-  bool isAssignableTo(DartType leftType, DartType rightType);
+  bool isAssignableTo(DartType leftType, DartType rightType,
+      {bool isDeclarationCast = false});
 
   /**
    * Return `true` if the [leftType] is more specific than the [rightType]
@@ -1476,6 +1490,7 @@
     var options = context.analysisOptions as AnalysisOptionsImpl;
     return options.strongMode
         ? new StrongTypeSystemImpl(context.typeProvider,
+            declarationCasts: options.declarationCasts,
             implicitCasts: options.implicitCasts,
             nonnullableTypes: options.nonnullableTypes)
         : new TypeSystemImpl(context.typeProvider);
@@ -1511,7 +1526,8 @@
   }
 
   @override
-  bool isAssignableTo(DartType leftType, DartType rightType) {
+  bool isAssignableTo(DartType leftType, DartType rightType,
+      {bool isDeclarationCast = false}) {
     return leftType.isAssignableTo(rightType);
   }
 
diff --git a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
index 7f7cf42..9e8c7d6 100644
--- a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
@@ -79,6 +79,7 @@
       : super(context, dataStore) {
     createResynthesizer();
     context.typeProvider = resynthesizer.typeProvider;
+    resynthesizer.finishCoreAsyncLibraries();
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/summary/resynthesize.dart b/pkg/analyzer/lib/src/summary/resynthesize.dart
index f6855db..15fe567 100644
--- a/pkg/analyzer/lib/src/summary/resynthesize.dart
+++ b/pkg/analyzer/lib/src/summary/resynthesize.dart
@@ -40,6 +40,16 @@
   final Map<String, Source> _sources = <String, Source>{};
 
   /**
+   * The `dart:core` library for the context.
+   */
+  LibraryElementImpl _coreLibrary;
+
+  /**
+   * The `dart:async` library for the context.
+   */
+  LibraryElementImpl _asyncLibrary;
+
+  /**
    * The [TypeProvider] used to obtain SDK types during resynthesis.
    */
   TypeProvider _typeProvider;
@@ -89,6 +99,16 @@
    */
   TypeProvider get typeProvider => _typeProvider;
 
+  /**
+   * The client installed this resynthesizer into the context, and set its
+   * type provider, so it is not safe to access type provider to create
+   * additional types.
+   */
+  void finishCoreAsyncLibraries() {
+    _coreLibrary.createLoadLibraryFunction(_typeProvider);
+    _asyncLibrary.createLoadLibraryFunction(_typeProvider);
+  }
+
   @override
   Element getElement(ElementLocation location) {
     List<String> components = location.components;
@@ -261,13 +281,11 @@
   bool hasLibrarySummary(String uri);
 
   void _buildTypeProvider() {
-    var coreLibrary = getLibraryElement('dart:core') as LibraryElementImpl;
-    var asyncLibrary = getLibraryElement('dart:async') as LibraryElementImpl;
+    _coreLibrary = getLibraryElement('dart:core') as LibraryElementImpl;
+    _asyncLibrary = getLibraryElement('dart:async') as LibraryElementImpl;
     SummaryTypeProvider summaryTypeProvider = new SummaryTypeProvider();
-    summaryTypeProvider.initializeCore(coreLibrary);
-    summaryTypeProvider.initializeAsync(asyncLibrary);
-    coreLibrary.createLoadLibraryFunction(summaryTypeProvider);
-    asyncLibrary.createLoadLibraryFunction(summaryTypeProvider);
+    summaryTypeProvider.initializeCore(_coreLibrary);
+    summaryTypeProvider.initializeAsync(_asyncLibrary);
     _typeProvider = summaryTypeProvider;
   }
 
diff --git a/pkg/analyzer/lib/src/task/dart.dart b/pkg/analyzer/lib/src/task/dart.dart
index 7f4ba24..aab5d07 100644
--- a/pkg/analyzer/lib/src/task/dart.dart
+++ b/pkg/analyzer/lib/src/task/dart.dart
@@ -5493,6 +5493,7 @@
           typeProvider,
           new StrongTypeSystemImpl(typeProvider,
               implicitCasts: options.implicitCasts,
+              declarationCasts: options.declarationCasts,
               nonnullableTypes: options.nonnullableTypes),
           errorListener,
           options);
diff --git a/pkg/analyzer/lib/src/task/options.dart b/pkg/analyzer/lib/src/task/options.dart
index c761f76..ccae7d6 100644
--- a/pkg/analyzer/lib/src/task/options.dart
+++ b/pkg/analyzer/lib/src/task/options.dart
@@ -58,6 +58,7 @@
   static const String strong_mode = 'strong-mode';
 
   // Strong mode options, see AnalysisOptionsImpl for documentation.
+  static const String declarationCasts = 'declaration-casts';
   static const String implicitCasts = 'implicit-casts';
   static const String implicitDynamic = 'implicit-dynamic';
 
@@ -573,6 +574,9 @@
       AnalysisOptionsImpl options, Object feature, Object value) {
     bool boolValue = toBool(value);
     if (boolValue != null) {
+      if (feature == AnalyzerOptions.declarationCasts) {
+        options.declarationCasts = boolValue;
+      }
       if (feature == AnalyzerOptions.implicitCasts) {
         options.implicitCasts = boolValue;
       }
diff --git a/pkg/analyzer/lib/src/task/strong/checker.dart b/pkg/analyzer/lib/src/task/strong/checker.dart
index cb8b6f1..d43f1e4 100644
--- a/pkg/analyzer/lib/src/task/strong/checker.dart
+++ b/pkg/analyzer/lib/src/task/strong/checker.dart
@@ -197,10 +197,19 @@
   }
 
   void checkAssignment(Expression expr, DartType type) {
+    checkForCast(expr, type);
+  }
+
+  void checkDeclarationCast(Expression expr, DartType type) {
+    checkForCast(expr, type, isDeclarationCast: true);
+  }
+
+  void checkForCast(Expression expr, DartType type,
+      {bool isDeclarationCast = false}) {
     if (expr is ParenthesizedExpression) {
-      checkAssignment(expr.expression, type);
+      checkForCast(expr.expression, type);
     } else {
-      _checkImplicitCast(expr, type);
+      _checkImplicitCast(expr, type, isDeclarationCast: isDeclarationCast);
     }
   }
 
@@ -432,7 +441,7 @@
         // Insert a cast from the sequence's element type to the loop variable's
         // if needed.
         _checkImplicitCast(loopVariable, _getDefiniteType(loopVariable),
-            from: elementType);
+            from: elementType, isDeclarationCast: true);
       }
     }
 
@@ -684,7 +693,7 @@
       var initializer = variable.initializer;
       if (initializer != null) {
         if (type != null) {
-          checkAssignment(initializer, type.type);
+          checkDeclarationCast(initializer, type.type);
         }
       }
     }
@@ -760,10 +769,12 @@
   /// If [expr] does not require an implicit cast because it is not related to
   /// [to] or is already a subtype of it, does nothing.
   void _checkImplicitCast(Expression expr, DartType to,
-      {DartType from, bool opAssign: false}) {
+      {DartType from, bool opAssign: false, bool isDeclarationCast: false}) {
     from ??= _getDefiniteType(expr);
 
-    if (_needsImplicitCast(expr, to, from: from) == true) {
+    if (_needsImplicitCast(expr, to,
+            from: from, isDeclarationCast: isDeclarationCast) ==
+        true) {
       _recordImplicitCast(expr, to, from: from, opAssign: opAssign);
     }
   }
@@ -1062,7 +1073,8 @@
   /// types are statically incompatible.
   ///
   /// If [from] is omitted, uses the static type of [expr]
-  bool _needsImplicitCast(Expression expr, DartType to, {DartType from}) {
+  bool _needsImplicitCast(Expression expr, DartType to,
+      {DartType from, bool isDeclarationCast: false}) {
     from ??= _getDefiniteType(expr);
 
     if (!_checkNonNullAssignment(expr, to, from)) return false;
@@ -1074,7 +1086,8 @@
     if (rules.isSubtypeOf(from, to)) return false;
 
     // Down cast or legal sideways cast, coercion needed.
-    if (rules.isAssignableTo(from, to)) return true;
+    if (rules.isAssignableTo(from, to, isDeclarationCast: isDeclarationCast))
+      return true;
 
     // Special case for FutureOr to handle returned values from async functions.
     // In this case, we're more permissive than assignability.
@@ -1652,69 +1665,115 @@
     return genericSupertypes;
   }
 
-  /// Checks that implementations correctly override all reachable interfaces.
+  /// Checks that members on this class correctly override all reachable
+  /// interfaces.
+  void _checkAllInterfaceOverrides(Declaration node, ClassElement element) {
+    var interfaces = _collectInterfacesToCheck(element.type);
+    var visitedClasses = new Set<InterfaceType>();
+
+    // Visit all members on `type` (including inherited) and report errors if
+    // all `interfaces` are not correctly overridden.
+    //
+    // Generally we only need to check the most derived concrete member, and
+    // we record members that have been seen already in `seen`. However we do
+    // report errors for every mixin member (unless it is overridden) by
+    // the class itself.
+    //
+    // TODO(jmesserly): what should mixins be doing? This behavior does not
+    // seem correct, but it is preserved for backwards compatibility.
+    void checkType(InterfaceType type, Set<String> seen, AstNode location) {
+      if (type == null || type.isObject || !visitedClasses.add(type)) return;
+
+      // Check `member` against all `interfaces`.
+      void checkOverride(ExecutableElement member, [AstNode loc]) {
+        if (!seen.add(member.name)) return;
+        for (var interface in interfaces) {
+          if (_checkMemberOverride(member, interface, loc ?? location) ==
+              false) {
+            // Only report one error per member for interfaces.
+            // TODO(jmesserly): this is for backwards compatibility. Remove it?
+            break;
+          }
+        }
+      }
+
+      // Check direct overrides on the class.
+      var isRootClass = identical(location, node);
+      if (isRootClass) {
+        _checkClassMembers(node, checkOverride);
+      } else {
+        _checkTypeMembers(type, checkOverride);
+      }
+
+      // Check mixin members against interfaces.
+      //
+      // We want to check each mixin application class separately, so we report
+      // errors for any invalid overrides, even if multiple mixins have a member
+      // of the same name.
+      for (int i = 0; i < type.mixins.length; i++) {
+        checkType(type.mixins[i], new Set.from(seen),
+            isRootClass ? _withClause(node).mixinTypes[i] : location);
+      }
+
+      // Check members on the superclass.
+      checkType(type.superclass, seen,
+          isRootClass ? _extendsErrorLocation(node) : location);
+    }
+
+    checkType(element.type, new Set(), node);
+  }
+
+  /// Gets the set of all interfaces on [type] that should be checked to see
+  /// if type's members are overriding them correctly.
+  ///
   /// In particular, we need to check these overrides for the definitions in
-  /// the class itself and each its superclasses. If a superclass is not
-  /// abstract, then we can skip its transitive interfaces. For example, in:
+  /// the class itself and each its superclasses (and mixins).
+  /// If a superclass (or mixin) is concrete, then we can skip its transitive
+  /// interfaces, but if it is abstract we must check them. For example, in:
   ///
   ///     B extends C implements G
   ///     A extends B with E, F implements H, I
   ///
-  /// we check:
+  /// we need to check the following interfaces:
   ///
   ///     C against G, H, and I
   ///     B against G, H, and I
   ///     E against H and I // no check against G because B is a concrete class
   ///     F against H and I
   ///     A against H and I
-  void _checkAllInterfaceOverrides(Declaration node, ClassElement element) {
-    var seen = new Set<String>();
-    // Helper function to collect all reachable interfaces.
-    find(InterfaceType interfaceType, Set result) {
-      if (interfaceType == null || interfaceType.isObject) return;
-      if (result.contains(interfaceType)) return;
-      result.add(interfaceType);
-      find(interfaceType.superclass, result);
-      interfaceType.mixins.forEach((i) => find(i, result));
-      interfaceType.interfaces.forEach((i) => find(i, result));
+  Set<InterfaceType> _collectInterfacesToCheck(InterfaceType type) {
+    var interfaces = new Set<InterfaceType>();
+    void collectInterfaces(InterfaceType t) {
+      if (t == null || t.isObject) return;
+      if (!interfaces.add(t)) return;
+      collectInterfaces(t.superclass);
+      t.mixins.forEach(collectInterfaces);
+      t.interfaces.forEach(collectInterfaces);
     }
 
     // Check all interfaces reachable from the `implements` clause in the
     // current class against definitions here and in superclasses.
-    var localInterfaces = new Set<InterfaceType>();
-    var type = element.type;
-    type.interfaces.forEach((i) => find(i, localInterfaces));
-    _checkInterfacesOverrides(type, localInterfaces, seen,
-        includeParents: true, classNode: node);
+    type.interfaces.forEach(collectInterfaces);
 
-    // Check also how we override locally the interfaces from parent classes if
-    // the parent class is abstract. Otherwise, these will be checked as
-    // overrides on the concrete superclass.
-    // We detect superclass circularities using the "tortoise and hare"
-    // algorithm.
-    var superInterfaces = new Set<InterfaceType>();
-    var parent = type.superclass;
-    var hare = type.superclass?.superclass;
-    // TODO(sigmund): we don't seem to be reporting the analyzer error that a
-    // non-abstract class is not implementing an interface. See
-    // https://github.com/dart-lang/dart-dev-compiler/issues/25
-    while (parent != null && parent.element.isAbstract) {
-      if (identical(parent, hare)) break;
-      parent.interfaces.forEach((i) => find(i, superInterfaces));
-      parent = parent.superclass;
-      hare = hare?.superclass?.superclass;
+    // Also collect interfaces from any abstract mixins or superclasses.
+    //
+    // For a concrete mixin/superclass, we'll check that we override the
+    // concrete members in _checkSuperOverrides and
+    // _checkMixinApplicationOverrides. But for abstract classes, we need to
+    // consider any abstract members it got from its interfaces.
+    for (var s in _getSuperclasses(type, (t) => t.element.isAbstract)) {
+      s.interfaces.forEach(collectInterfaces);
     }
-    _checkInterfacesOverrides(type, superInterfaces, seen,
-        includeParents: false, classNode: node);
+    return interfaces;
   }
 
-  /// Check that individual methods and fields in [node] correctly override
-  /// the declarations in [baseType].
+  /// Visits each member on the class [node] and calls [checkMember] with the
+  /// corresponding instance element and AST node (for error reporting).
   ///
-  /// The [errorLocation] node indicates where errors are reported, see
-  /// [_checkSingleOverride] for more details.
-  _checkIndividualOverridesFromClass(Declaration node, InterfaceType baseType,
-      Set<String> seen, bool isSubclass) {
+  /// See also [_checkTypeMembers], which is used when the class AST node is not
+  /// available.
+  void _checkClassMembers(Declaration node,
+      void checkMember(ExecutableElement member, ClassMember location)) {
     for (var member in _classMembers(node)) {
       if (member is FieldDeclaration) {
         if (member.isStatic) {
@@ -1722,127 +1781,34 @@
         }
         for (var variable in member.fields.variables) {
           var element = variable.element as PropertyInducingElement;
-          var name = element.name;
-          if (seen.contains(name)) {
-            continue;
-          }
-          var getter = element.getter;
-          var setter = element.setter;
-          bool found = _checkSingleOverride(
-              getter, baseType, variable.name, member, isSubclass);
-          if (!variable.isFinal &&
-              !variable.isConst &&
-              _checkSingleOverride(
-                  setter, baseType, variable.name, member, isSubclass)) {
-            found = true;
-          }
-          if (found) {
-            seen.add(name);
+          checkMember(element.getter, member);
+          if (!variable.isFinal && !variable.isConst) {
+            checkMember(element.setter, member);
           }
         }
       } else if (member is MethodDeclaration) {
         if (member.isStatic) {
           continue;
         }
-        var method = resolutionMap.elementDeclaredByMethodDeclaration(member);
-        if (seen.contains(method.name)) {
-          continue;
-        }
-        if (_checkSingleOverride(
-            method, baseType, member.name, member, isSubclass)) {
-          seen.add(method.name);
-        }
+        checkMember(member.element, member);
       } else {
         assert(member is ConstructorDeclaration);
       }
     }
   }
 
-  /// Check that individual methods and fields in [subType] correctly override
-  /// the declarations in [baseType].
+  /// Visits the [type] and calls [checkMember] for each instance member.
   ///
-  /// The [errorLocation] node indicates where errors are reported, see
-  /// [_checkSingleOverride] for more details.
-  ///
-  /// The set [seen] is used to avoid reporting overrides more than once. It
-  /// is used when invoking this function multiple times when checking several
-  /// types in a class hierarchy. Errors are reported only the first time an
-  /// invalid override involving a specific member is encountered.
-  void _checkIndividualOverridesFromType(
-      InterfaceType subType,
-      InterfaceType baseType,
-      AstNode errorLocation,
-      Set<String> seen,
-      bool isSubclass) {
+  /// See also [_checkClassMembers], which should be used when the class AST
+  /// node is available to allow for better error locations
+  void _checkTypeMembers(
+      InterfaceType type, void checkMember(ExecutableElement member)) {
     void checkHelper(ExecutableElement e) {
-      if (e.isStatic) return;
-      if (seen.contains(e.name)) return;
-      if (_checkSingleOverride(e, baseType, null, errorLocation, isSubclass)) {
-        seen.add(e.name);
-      }
+      if (!e.isStatic) checkMember(e);
     }
 
-    subType.methods.forEach(checkHelper);
-    subType.accessors.forEach(checkHelper);
-  }
-
-  /// Checks that [cls] and its super classes (including mixins) correctly
-  /// overrides each interface in [interfaces]. If [includeParents] is false,
-  /// then mixins are still checked, but the base type and it's transitive
-  /// supertypes are not.
-  ///
-  /// [cls] can be either a [ClassDeclaration] or a [InterfaceType]. For
-  /// [ClassDeclaration]s errors are reported on the member that contains the
-  /// invalid override, for [InterfaceType]s we use [errorLocation] instead.
-  void _checkInterfacesOverrides(
-      InterfaceType type, Iterable<InterfaceType> interfaces, Set<String> seen,
-      {Set<InterfaceType> visited,
-      bool includeParents: true,
-      AstNode errorLocation,
-      Declaration classNode}) {
-    if (visited == null) {
-      visited = new Set<InterfaceType>();
-    } else if (visited.contains(type)) {
-      // Malformed type.
-      return;
-    } else {
-      visited.add(type);
-    }
-
-    // Check direct overrides on [type]
-    for (var interfaceType in interfaces) {
-      if (classNode != null) {
-        _checkIndividualOverridesFromClass(
-            classNode, interfaceType, seen, false);
-      } else {
-        _checkIndividualOverridesFromType(
-            type, interfaceType, errorLocation, seen, false);
-      }
-    }
-
-    // Check overrides from its mixins
-    for (int i = 0; i < type.mixins.length; i++) {
-      var loc = errorLocation ?? _withClause(classNode).mixinTypes[i];
-      for (var interfaceType in interfaces) {
-        // We copy [seen] so we can report separately if more than one mixin or
-        // the base class have an invalid override.
-        _checkIndividualOverridesFromType(
-            type.mixins[i], interfaceType, loc, new Set.from(seen), false);
-      }
-    }
-
-    // Check overrides from its superclasses
-    if (includeParents) {
-      var parent = type.superclass;
-      if (parent.isObject) {
-        return;
-      }
-      var loc = errorLocation ?? _extendsErrorLocation(classNode);
-      // No need to copy [seen] here because we made copies above when reporting
-      // errors on mixins.
-      _checkInterfacesOverrides(parent, interfaces, seen,
-          visited: visited, includeParents: true, errorLocation: loc);
-    }
+    type.methods.forEach(checkHelper);
+    type.accessors.forEach(checkHelper);
   }
 
   /// Check overrides from mixin applications themselves. For example, in:
@@ -1854,29 +1820,29 @@
   ///      B & E against B (equivalently how E overrides B)
   ///      B & E & F against B & E (equivalently how F overrides both B and E)
   void _checkMixinApplicationOverrides(Declaration node, ClassElement element) {
-    var type = element.type;
-    var parent = type.superclass;
-    var mixins = type.mixins;
+    var superclass = element.type.superclass;
+    var mixins = element.type.mixins;
 
     // Check overrides from applying mixins
     for (int i = 0; i < mixins.length; i++) {
-      var seen = new Set<String>();
       var current = mixins[i];
-      var errorLocation = _withClause(node).mixinTypes[i];
-      for (int j = i - 1; j >= 0; j--) {
-        _checkIndividualOverridesFromType(
-            current, mixins[j], errorLocation, seen, true);
-      }
-      _checkIndividualOverridesFromType(
-          current, parent, errorLocation, seen, true);
+      var location = _withClause(node).mixinTypes[i];
+      var superclasses = mixins.sublist(0, i).reversed.toList()
+        ..add(superclass);
+
+      _checkTypeMembers(current, (m) {
+        for (var s in superclasses) {
+          if (_checkConcreteMemberOverride(m, s, location)) break;
+        }
+      });
     }
   }
 
-  /// Checks that [element] correctly overrides its corresponding member in
-  /// [type]. Returns `true` if an override was found, that is, if [element] has
-  /// a corresponding member in [type] that it overrides.
+  /// Gets the member corresponding to [member] on [type], and returns `null`
+  /// if no member was found, or a boolean value to indicate whether the
+  /// override is valid.
   ///
-  /// The [errorLocation] is a node where the error is reported. For example, a
+  /// The [location] is a node where the error is reported. For example, a
   /// bad override of a method in a class with respect to its superclass is
   /// reported directly at the method declaration. However, invalid overrides
   /// from base classes to interfaces, mixins to the base they are applied to,
@@ -1896,38 +1862,21 @@
   ///                              ^
   ///
   /// When checking for overrides from a type and it's super types, [node] is
-  /// the AST node that defines [element]. This is used to determine whether the
+  /// the AST node that defines [member]. This is used to determine whether the
   /// type of the element could be inferred from the types in the super classes.
-  bool _checkSingleOverride(ExecutableElement element, InterfaceType type,
-      AstNode node, AstNode errorLocation, bool isSubclass) {
-    assert(!element.isStatic);
+  bool _checkMemberOverride(
+      ExecutableElement member, InterfaceType type, AstNode location) {
+    assert(!member.isStatic);
 
-    FunctionType subType = _elementType(element);
-    FunctionType baseType = _getMemberType(type, element);
-    if (baseType == null) return false;
-
-    if (isSubclass && element is PropertyAccessorElement) {
-      // Disallow any overriding if the base class defines this member
-      // as a field.  We effectively treat fields as final / non-virtual,
-      // unless they are explicitly marked as @virtual
-      var field = _getMemberField(type, element);
-      if (field != null && !field.isVirtual) {
-        _checker._recordMessage(
-            errorLocation, StrongModeCode.INVALID_FIELD_OVERRIDE, [
-          element.enclosingElement.name,
-          element.name,
-          subType,
-          type,
-          baseType
-        ]);
-      }
-    }
+    FunctionType subType = _elementType(member);
+    FunctionType baseType = _getMemberType(type, member);
+    if (baseType == null) return null;
 
     if (!rules.isOverrideSubtypeOf(subType, baseType)) {
       ErrorCode errorCode;
-      var parent = errorLocation?.parent;
-      if (errorLocation is ExtendsClause ||
-          parent is ClassTypeAlias && parent.superclass == errorLocation) {
+      var parent = location?.parent;
+      if (location is ExtendsClause ||
+          parent is ClassTypeAlias && parent.superclass == location) {
         errorCode = StrongModeCode.INVALID_METHOD_OVERRIDE_FROM_BASE;
       } else if (parent is WithClause) {
         errorCode = StrongModeCode.INVALID_METHOD_OVERRIDE_FROM_MIXIN;
@@ -1935,20 +1884,43 @@
         errorCode = StrongModeCode.INVALID_METHOD_OVERRIDE;
       }
 
-      _checker._recordMessage(errorLocation, errorCode, [
-        element.enclosingElement.name,
-        element.name,
-        subType,
-        type,
-        baseType
-      ]);
+      _checker._recordMessage(location, errorCode,
+          [member.enclosingElement.name, member.name, subType, type, baseType]);
+      return false;
     }
+    return true;
+  }
 
-    // If we have any covariant parameters and we're comparing against a
-    // superclass, we check all superclasses instead of stopping the search.
-    bool hasCovariant = element.parameters.any((p) => p.isCovariant);
-    bool keepSearching = hasCovariant && isSubclass;
-    return !keepSearching;
+  /// Checks that a member override from a superclass (i.e. a concrete member)
+  /// is correct, reporting an error if needed, and returns `true` if we should
+  /// keep searching up the superclass chain.
+  bool _checkConcreteMemberOverride(
+      ExecutableElement member, InterfaceType type, AstNode location) {
+    _checkFieldOverride(member, type, location);
+    // Stop if a member was found, and we have no covariant parameters.
+    // If we have covariant parameters, we need to keep searching.
+    return _checkMemberOverride(member, type, location) != null &&
+        member.parameters.every((p) => !p.isCovariant);
+  }
+
+  void _checkFieldOverride(
+      Element member, InterfaceType type, AstNode location) {
+    if (member is PropertyAccessorElement) {
+      // Disallow overriding a non-virtual field.
+      var field = _getMemberField(type, member);
+      if (field != null && !field.isVirtual) {
+        FunctionType subType = _elementType(member);
+        FunctionType baseType = _getMemberType(type, member);
+        _checker._recordMessage(
+            location, StrongModeCode.INVALID_FIELD_OVERRIDE, [
+          member.enclosingElement.name,
+          member.name,
+          subType,
+          type,
+          baseType
+        ]);
+      }
+    }
   }
 
   /// Check overrides between a class and its superclasses and mixins. For
@@ -1974,16 +1946,38 @@
   ///         m(B a) {} // invalid override
   ///     }
   void _checkSuperOverrides(Declaration node, ClassElement element) {
-    var seen = new Set<String>();
-    var current = element.type;
-    var visited = new Set<InterfaceType>();
-    do {
-      visited.add(current);
-      current.mixins.reversed.forEach(
-          (m) => _checkIndividualOverridesFromClass(node, m, seen, true));
-      _checkIndividualOverridesFromClass(node, current.superclass, seen, true);
-      current = current.superclass;
-    } while (!current.isObject && !visited.contains(current));
+    var superclasses = _getSuperclasses(element.type);
+    _checkClassMembers(node, (member, loc) {
+      for (var s in superclasses) {
+        if (_checkConcreteMemberOverride(member, s, loc)) break;
+      }
+    });
+  }
+
+  /// Collects all superclasses of [type], including any mixin application
+  /// classes.
+  ///
+  /// The search can be pruned by passing a [visitSuperclasses] function and
+  /// having it return `false` for types that should not be further explored.
+  Iterable<InterfaceType> _getSuperclasses(InterfaceType type,
+      [bool visitSuperclasses(InterfaceType t)]) {
+    var superclasses = new Set<InterfaceType>();
+    visit(InterfaceType t) {
+      if ((visitSuperclasses == null || visitSuperclasses(t)) &&
+          superclasses.add(t)) {
+        t.mixins.reversed.forEach(visit);
+        var s = t.superclass;
+        if (s != null && !s.isObject) visit(s);
+      }
+    }
+
+    type.mixins.reversed.forEach(visit);
+    var s = type.superclass;
+    if (s != null && !s.isObject) visit(s);
+
+    // Make sure we record Object last, and not when we visit our mixins.
+    if (!type.isObject) visit(rules.typeProvider.objectType);
+    return superclasses;
   }
 
   /// If node is a [ClassDeclaration] returns its members, otherwise if node is
diff --git a/pkg/analyzer/test/generated/parser_fasta_listener.dart b/pkg/analyzer/test/generated/parser_fasta_listener.dart
index efdf6ad..412de6e 100644
--- a/pkg/analyzer/test/generated/parser_fasta_listener.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_listener.dart
@@ -2,13 +2,10 @@
 // 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/dart/ast/token.dart' as analyzer;
-import 'package:analyzer/src/generated/parser.dart' as analyzer;
 import 'package:front_end/src/fasta/fasta_codes.dart';
 import 'package:front_end/src/fasta/parser/identifier_context.dart'
     show IdentifierContext;
-import 'package:front_end/src/fasta/parser/listener.dart' as fasta;
-import 'package:front_end/src/fasta/parser/parser.dart' as fasta;
+import 'package:front_end/src/fasta/parser.dart' as fasta;
 import 'package:front_end/src/fasta/scanner/token.dart' as fasta;
 import 'package:front_end/src/fasta/util/link.dart';
 import 'package:front_end/src/scanner/token.dart';
@@ -41,495 +38,493 @@
   ForwardingTestListener(this.listener);
 
   @override
-  void beginArguments(analyzer.Token token) {
+  void beginArguments(Token token) {
     listener.beginArguments(token);
     _begin('Arguments');
   }
 
   @override
-  void beginAssert(analyzer.Token assertKeyword, fasta.Assert kind) {
+  void beginAssert(Token assertKeyword, fasta.Assert kind) {
     listener.beginAssert(assertKeyword, kind);
     _begin('Assert');
   }
 
   @override
-  void beginAwaitExpression(analyzer.Token token) {
+  void beginAwaitExpression(Token token) {
     listener.beginAwaitExpression(token);
     _begin('AwaitExpression');
   }
 
   @override
-  void beginBlock(analyzer.Token token) {
+  void beginBlock(Token token) {
     listener.beginBlock(token);
     _begin('Block');
   }
 
   @override
-  void beginBlockFunctionBody(analyzer.Token token) {
+  void beginBlockFunctionBody(Token token) {
     listener.beginBlockFunctionBody(token);
     _begin('BlockFunctionBody');
   }
 
   @override
-  void beginCascade(analyzer.Token token) {
+  void beginCascade(Token token) {
     listener.beginCascade(token);
     _begin('Cascade');
   }
 
   @override
-  void beginCaseExpression(analyzer.Token caseKeyword) {
+  void beginCaseExpression(Token caseKeyword) {
     listener.beginCaseExpression(caseKeyword);
     _begin('CaseExpression');
   }
 
   @override
-  void beginCatchClause(analyzer.Token token) {
+  void beginCatchClause(Token token) {
     listener.beginCatchClause(token);
     _begin('CatchClause');
   }
 
   @override
-  void beginClassBody(analyzer.Token token) {
+  void beginClassBody(Token token) {
     listener.beginClassBody(token);
     _begin('ClassBody');
   }
 
   @override
-  void beginClassDeclaration(analyzer.Token beginToken, analyzer.Token name) {
+  void beginClassDeclaration(Token beginToken, Token name) {
     listener.beginClassDeclaration(beginToken, name);
     _begin('ClassDeclaration');
   }
 
   @override
-  void beginClassOrNamedMixinApplication(analyzer.Token token) {
+  void beginClassOrNamedMixinApplication(Token token) {
     listener.beginClassOrNamedMixinApplication(token);
     _begin('ClassOrNamedMixinApplication');
   }
 
   @override
-  void beginCombinators(analyzer.Token token) {
+  void beginCombinators(Token token) {
     listener.beginCombinators(token);
     _begin('Combinators');
   }
 
   @override
-  void beginCompilationUnit(analyzer.Token token) {
+  void beginCompilationUnit(Token token) {
     listener.beginCompilationUnit(token);
     _begin('CompilationUnit');
   }
 
   @override
-  void beginConditionalUri(analyzer.Token ifKeyword) {
+  void beginConditionalUri(Token ifKeyword) {
     listener.beginConditionalUri(ifKeyword);
     _begin('ConditionalUri');
   }
 
   @override
-  void beginConditionalUris(analyzer.Token token) {
+  void beginConditionalUris(Token token) {
     listener.beginConditionalUris(token);
     _begin('ConditionalUris');
   }
 
   @override
-  void beginConstExpression(analyzer.Token constKeyword) {
+  void beginConstExpression(Token constKeyword) {
     listener.beginConstExpression(constKeyword);
     _begin('ConstExpression');
   }
 
   @override
-  void beginConstLiteral(analyzer.Token token) {
+  void beginConstLiteral(Token token) {
     listener.beginConstLiteral(token);
     _begin('ConstLiteral');
   }
 
   @override
-  void beginConstructorReference(analyzer.Token start) {
+  void beginConstructorReference(Token start) {
     listener.beginConstructorReference(start);
     _begin('ConstructorReference');
   }
 
   @override
-  void beginDoWhileStatement(analyzer.Token token) {
+  void beginDoWhileStatement(Token token) {
     listener.beginDoWhileStatement(token);
     _begin('DoWhileStatement');
   }
 
   @override
-  void beginDoWhileStatementBody(analyzer.Token token) {
+  void beginDoWhileStatementBody(Token token) {
     listener.beginDoWhileStatementBody(token);
     _begin('DoWhileStatementBody');
   }
 
   @override
-  void beginDottedName(analyzer.Token token) {
+  void beginDottedName(Token token) {
     listener.beginDottedName(token);
     _begin('DottedName');
   }
 
   @override
-  void beginElseStatement(analyzer.Token token) {
+  void beginElseStatement(Token token) {
     listener.beginElseStatement(token);
     _begin('ElseStatement');
   }
 
   @override
-  void beginEnum(analyzer.Token enumKeyword) {
+  void beginEnum(Token enumKeyword) {
     listener.beginEnum(enumKeyword);
     _begin('Enum');
   }
 
   @override
-  void beginExport(analyzer.Token token) {
+  void beginExport(Token token) {
     listener.beginExport(token);
     _begin('Export');
   }
 
   @override
-  void beginExpressionStatement(analyzer.Token token) {
+  void beginExpressionStatement(Token token) {
     listener.beginExpressionStatement(token);
     _begin('ExpressionStatement');
   }
 
   @override
-  void beginFactoryMethod(analyzer.Token token) {
+  void beginFactoryMethod(Token token) {
     listener.beginFactoryMethod(token);
     _begin('FactoryMethod');
   }
 
   @override
-  void beginFieldInitializer(analyzer.Token token) {
+  void beginFieldInitializer(Token token) {
     listener.beginFieldInitializer(token);
     _begin('FieldInitializer');
   }
 
   @override
-  void beginForInBody(analyzer.Token token) {
+  void beginForInBody(Token token) {
     listener.beginForInBody(token);
     _begin('ForInBody');
   }
 
   @override
-  void beginForInExpression(analyzer.Token token) {
+  void beginForInExpression(Token token) {
     listener.beginForInExpression(token);
     _begin('ForInExpression');
   }
 
   @override
-  void beginForStatement(analyzer.Token token) {
+  void beginForStatement(Token token) {
     listener.beginForStatement(token);
     _begin('ForStatement');
   }
 
   @override
-  void beginForStatementBody(analyzer.Token token) {
+  void beginForStatementBody(Token token) {
     listener.beginForStatementBody(token);
     _begin('ForStatementBody');
   }
 
   @override
-  void beginFormalParameter(analyzer.Token token, fasta.MemberKind kind) {
+  void beginFormalParameter(Token token, fasta.MemberKind kind) {
     listener.beginFormalParameter(token, kind);
     _begin('FormalParameter');
   }
 
   @override
-  void beginFormalParameters(analyzer.Token token, fasta.MemberKind kind) {
+  void beginFormalParameters(Token token, fasta.MemberKind kind) {
     listener.beginFormalParameters(token, kind);
     _begin('FormalParameters');
   }
 
   @override
-  void beginFunctionDeclaration(analyzer.Token token) {
-    listener.beginFunctionDeclaration(token);
-    _begin('FunctionDeclaration');
+  void beginLocalFunctionDeclaration(Token token) {
+    listener.beginLocalFunctionDeclaration(token);
+    _begin('LocalFunctionDeclaration');
   }
 
   @override
-  void beginFunctionExpression(analyzer.Token token) {
+  void beginFunctionExpression(Token token) {
     listener.beginFunctionExpression(token);
     _begin('FunctionExpression');
   }
 
   @override
-  void beginFunctionName(analyzer.Token token) {
+  void beginFunctionName(Token token) {
     listener.beginFunctionName(token);
     _begin('FunctionName');
   }
 
   @override
-  void beginFunctionType(analyzer.Token beginToken) {
+  void beginFunctionType(Token beginToken) {
     listener.beginFunctionType(beginToken);
     _begin('FunctionType');
   }
 
   @override
-  void beginFunctionTypeAlias(analyzer.Token token) {
+  void beginFunctionTypeAlias(Token token) {
     listener.beginFunctionTypeAlias(token);
     _begin('FunctionTypeAlias');
   }
 
   @override
-  void beginFunctionTypedFormalParameter(analyzer.Token token) {
+  void beginFunctionTypedFormalParameter(Token token) {
     listener.beginFunctionTypedFormalParameter(token);
     _begin('FunctionTypedFormalParameter');
   }
 
   @override
-  void beginHide(analyzer.Token hideKeyword) {
+  void beginHide(Token hideKeyword) {
     listener.beginHide(hideKeyword);
     _begin('Hide');
   }
 
   @override
-  void beginIdentifierList(analyzer.Token token) {
+  void beginIdentifierList(Token token) {
     listener.beginIdentifierList(token);
     _begin('IdentifierList');
   }
 
   @override
-  void beginIfStatement(analyzer.Token token) {
+  void beginIfStatement(Token token) {
     listener.beginIfStatement(token);
     _begin('IfStatement');
   }
 
   @override
-  void beginImport(analyzer.Token importKeyword) {
+  void beginImport(Token importKeyword) {
     listener.beginImport(importKeyword);
     _begin('Import');
   }
 
   @override
-  void beginInitializedIdentifier(analyzer.Token token) {
+  void beginInitializedIdentifier(Token token) {
     listener.beginInitializedIdentifier(token);
     _begin('InitializedIdentifier');
   }
 
   @override
-  void beginInitializer(analyzer.Token token) {
+  void beginInitializer(Token token) {
     listener.beginInitializer(token);
     _begin('Initializer');
   }
 
   @override
-  void beginInitializers(analyzer.Token token) {
+  void beginInitializers(Token token) {
     listener.beginInitializers(token);
     _begin('Initializers');
   }
 
   @override
-  void beginLabeledStatement(analyzer.Token token, int labelCount) {
+  void beginLabeledStatement(Token token, int labelCount) {
     listener.beginLabeledStatement(token, labelCount);
     _begin('LabeledStatement');
   }
 
   @override
-  void beginLibraryName(analyzer.Token token) {
+  void beginLibraryName(Token token) {
     listener.beginLibraryName(token);
     _begin('LibraryName');
   }
 
   @override
-  void beginLiteralMapEntry(analyzer.Token token) {
+  void beginLiteralMapEntry(Token token) {
     listener.beginLiteralMapEntry(token);
     _begin('LiteralMapEntry');
   }
 
   @override
-  void beginLiteralString(analyzer.Token token) {
+  void beginLiteralString(Token token) {
     listener.beginLiteralString(token);
     _begin('LiteralString');
   }
 
   @override
-  void beginLiteralSymbol(analyzer.Token token) {
+  void beginLiteralSymbol(Token token) {
     listener.beginLiteralSymbol(token);
     _begin('LiteralSymbol');
   }
 
   @override
-  void beginMember(analyzer.Token token) {
+  void beginMember(Token token) {
     listener.beginMember(token);
     _begin('Member');
   }
 
   @override
-  void beginMetadata(analyzer.Token token) {
+  void beginMetadata(Token token) {
     listener.beginMetadata(token);
     _begin('Metadata');
   }
 
   @override
-  void beginMetadataStar(analyzer.Token token) {
+  void beginMetadataStar(Token token) {
     listener.beginMetadataStar(token);
     _begin('MetadataStar');
   }
 
   @override
-  void beginMethod(analyzer.Token token, analyzer.Token name) {
+  void beginMethod(Token token, Token name) {
     listener.beginMethod(token, name);
     _begin('Method');
   }
 
   @override
-  void beginMixinApplication(analyzer.Token token) {
+  void beginMixinApplication(Token token) {
     listener.beginMixinApplication(token);
     _begin('MixinApplication');
   }
 
   @override
-  void beginNamedFunctionExpression(analyzer.Token token) {
+  void beginNamedFunctionExpression(Token token) {
     listener.beginNamedFunctionExpression(token);
     _begin('NamedFunctionExpression');
   }
 
   @override
-  void beginNamedMixinApplication(
-      analyzer.Token beginToken, analyzer.Token name) {
+  void beginNamedMixinApplication(Token beginToken, Token name) {
     listener.beginNamedMixinApplication(beginToken, name);
     _begin('NamedMixinApplication');
   }
 
   @override
-  void beginNewExpression(analyzer.Token token) {
+  void beginNewExpression(Token token) {
     listener.beginNewExpression(token);
     _begin('NewExpression');
   }
 
   @override
-  void beginOptionalFormalParameters(analyzer.Token token) {
+  void beginOptionalFormalParameters(Token token) {
     listener.beginOptionalFormalParameters(token);
     _begin('OptionalFormalParameters');
   }
 
   @override
-  void beginPart(analyzer.Token token) {
+  void beginPart(Token token) {
     listener.beginPart(token);
     _begin('Part');
   }
 
   @override
-  void beginPartOf(analyzer.Token token) {
+  void beginPartOf(Token token) {
     listener.beginPartOf(token);
     _begin('PartOf');
   }
 
   @override
-  void beginRedirectingFactoryBody(analyzer.Token token) {
+  void beginRedirectingFactoryBody(Token token) {
     listener.beginRedirectingFactoryBody(token);
     _begin('RedirectingFactoryBody');
   }
 
   @override
-  void beginRethrowStatement(analyzer.Token token) {
+  void beginRethrowStatement(Token token) {
     listener.beginRethrowStatement(token);
     _begin('RethrowStatement');
   }
 
   @override
-  void beginReturnStatement(analyzer.Token token) {
+  void beginReturnStatement(Token token) {
     listener.beginReturnStatement(token);
     _begin('ReturnStatement');
   }
 
   @override
-  void beginShow(analyzer.Token showKeyword) {
+  void beginShow(Token showKeyword) {
     listener.beginShow(showKeyword);
     _begin('Show');
   }
 
   @override
-  void beginSwitchBlock(analyzer.Token token) {
+  void beginSwitchBlock(Token token) {
     listener.beginSwitchBlock(token);
     _begin('SwitchBlock');
   }
 
   @override
-  void beginSwitchCase(
-      int labelCount, int expressionCount, analyzer.Token firstToken) {
+  void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {
     listener.beginSwitchCase(labelCount, expressionCount, firstToken);
     _begin('SwitchCase');
   }
 
   @override
-  void beginSwitchStatement(analyzer.Token token) {
+  void beginSwitchStatement(Token token) {
     listener.beginSwitchStatement(token);
     _begin('SwitchStatement');
   }
 
   @override
-  void beginThenStatement(analyzer.Token token) {
+  void beginThenStatement(Token token) {
     listener.beginThenStatement(token);
     _begin('ThenStatement');
   }
 
   @override
-  void beginTopLevelMember(analyzer.Token token) {
+  void beginTopLevelMember(Token token) {
     listener.beginTopLevelMember(token);
     _begin('TopLevelMember');
   }
 
   @override
-  void beginTopLevelMethod(analyzer.Token token, analyzer.Token name) {
+  void beginTopLevelMethod(Token token, Token name) {
     listener.beginTopLevelMethod(token, name);
     _begin('TopLevelMethod');
   }
 
   @override
-  void beginTryStatement(analyzer.Token token) {
+  void beginTryStatement(Token token) {
     listener.beginTryStatement(token);
     _begin('TryStatement');
   }
 
   @override
-  void beginTypeArguments(analyzer.Token token) {
+  void beginTypeArguments(Token token) {
     listener.beginTypeArguments(token);
     _begin('TypeArguments');
   }
 
   @override
-  void beginTypeList(analyzer.Token token) {
+  void beginTypeList(Token token) {
     listener.beginTypeList(token);
     _begin('TypeList');
   }
 
   @override
-  void beginTypeVariable(analyzer.Token token) {
+  void beginTypeVariable(Token token) {
     listener.beginTypeVariable(token);
     _begin('TypeVariable');
   }
 
   @override
-  void beginTypeVariables(analyzer.Token token) {
+  void beginTypeVariables(Token token) {
     listener.beginTypeVariables(token);
     _begin('TypeVariables');
   }
 
   @override
-  void beginVariableInitializer(analyzer.Token token) {
+  void beginVariableInitializer(Token token) {
     listener.beginVariableInitializer(token);
     _begin('VariableInitializer');
   }
 
   @override
-  void beginVariablesDeclaration(analyzer.Token token) {
+  void beginVariablesDeclaration(Token token) {
     listener.beginVariablesDeclaration(token);
     _begin('VariablesDeclaration');
   }
 
   @override
-  void beginWhileStatement(analyzer.Token token) {
+  void beginWhileStatement(Token token) {
     listener.beginWhileStatement(token);
     _begin('WhileStatement');
   }
 
   @override
-  void beginWhileStatementBody(analyzer.Token token) {
+  void beginWhileStatementBody(Token token) {
     listener.beginWhileStatementBody(token);
     _begin('WhileStatementBody');
   }
 
   @override
-  void beginYieldStatement(analyzer.Token token) {
+  void beginYieldStatement(Token token) {
     listener.beginYieldStatement(token);
     _begin('YieldStatement');
   }
@@ -541,40 +536,33 @@
   }
 
   @override
-  void endArguments(
-      int count, analyzer.Token beginToken, analyzer.Token endToken) {
+  void endArguments(int count, Token beginToken, Token endToken) {
     _end('Arguments');
     listener.endArguments(count, beginToken, endToken);
   }
 
   @override
-  void endAssert(
-      analyzer.Token assertKeyword,
-      fasta.Assert kind,
-      analyzer.Token leftParenthesis,
-      analyzer.Token commaToken,
-      analyzer.Token rightParenthesis,
-      analyzer.Token semicolonToken) {
+  void endAssert(Token assertKeyword, fasta.Assert kind, Token leftParenthesis,
+      Token commaToken, Token rightParenthesis, Token semicolonToken) {
     _end('Assert');
     listener.endAssert(assertKeyword, kind, leftParenthesis, commaToken,
         rightParenthesis, semicolonToken);
   }
 
   @override
-  void endAwaitExpression(analyzer.Token beginToken, analyzer.Token endToken) {
+  void endAwaitExpression(Token beginToken, Token endToken) {
     _end('AwaitExpression');
     listener.endAwaitExpression(beginToken, endToken);
   }
 
   @override
-  void endBlock(int count, analyzer.Token beginToken, analyzer.Token endToken) {
+  void endBlock(int count, Token beginToken, Token endToken) {
     _end('Block');
     listener.endBlock(count, beginToken, endToken);
   }
 
   @override
-  void endBlockFunctionBody(
-      int count, analyzer.Token beginToken, analyzer.Token endToken) {
+  void endBlockFunctionBody(int count, Token beginToken, Token endToken) {
     _end('BlockFunctionBody');
     listener.endBlockFunctionBody(count, beginToken, endToken);
   }
@@ -586,20 +574,19 @@
   }
 
   @override
-  void endCaseExpression(analyzer.Token colon) {
+  void endCaseExpression(Token colon) {
     _end('CaseExpression');
     listener.endCaseExpression(colon);
   }
 
   @override
-  void endCatchClause(analyzer.Token token) {
+  void endCatchClause(Token token) {
     _end('CatchClause');
     listener.endCatchClause(token);
   }
 
   @override
-  void endClassBody(
-      int memberCount, analyzer.Token beginToken, analyzer.Token endToken) {
+  void endClassBody(int memberCount, Token beginToken, Token endToken) {
     _end('ClassBody');
     listener.endClassBody(memberCount, beginToken, endToken);
   }
@@ -607,11 +594,11 @@
   @override
   void endClassDeclaration(
       int interfacesCount,
-      analyzer.Token beginToken,
-      analyzer.Token classKeyword,
-      analyzer.Token extendsKeyword,
-      analyzer.Token implementsKeyword,
-      analyzer.Token endToken) {
+      Token beginToken,
+      Token classKeyword,
+      Token extendsKeyword,
+      Token implementsKeyword,
+      Token endToken) {
     _end('ClassDeclaration');
     _end('ClassOrNamedMixinApplication');
     listener.endClassDeclaration(interfacesCount, beginToken, classKeyword,
@@ -625,14 +612,13 @@
   }
 
   @override
-  void endCompilationUnit(int count, analyzer.Token token) {
+  void endCompilationUnit(int count, Token token) {
     _end('CompilationUnit');
     listener.endCompilationUnit(count, token);
   }
 
   @override
-  void endConditionalUri(
-      analyzer.Token ifKeyword, analyzer.Token equalitySign) {
+  void endConditionalUri(Token ifKeyword, Token equalitySign) {
     _end('ConditionalUri');
     listener.endConditionalUri(ifKeyword, equalitySign);
   }
@@ -644,168 +630,162 @@
   }
 
   @override
-  void endConstExpression(analyzer.Token token) {
+  void endConstExpression(Token token) {
     _end('ConstExpression');
     listener.endConstExpression(token);
   }
 
   @override
-  void endConstLiteral(analyzer.Token token) {
+  void endConstLiteral(Token token) {
     _end('ConstLiteral');
     listener.endConstLiteral(token);
   }
 
   @override
-  void endConstructorReference(analyzer.Token start,
-      analyzer.Token periodBeforeName, analyzer.Token endToken) {
+  void endConstructorReference(
+      Token start, Token periodBeforeName, Token endToken) {
     _end('ConstructorReference');
     listener.endConstructorReference(start, periodBeforeName, endToken);
   }
 
   @override
-  void endDoWhileStatement(analyzer.Token doKeyword,
-      analyzer.Token whileKeyword, analyzer.Token endToken) {
+  void endDoWhileStatement(
+      Token doKeyword, Token whileKeyword, Token endToken) {
     _end('DoWhileStatement');
     listener.endDoWhileStatement(doKeyword, whileKeyword, endToken);
   }
 
   @override
-  void endDoWhileStatementBody(analyzer.Token token) {
+  void endDoWhileStatementBody(Token token) {
     _end('DoWhileStatementBody');
     listener.endDoWhileStatementBody(token);
   }
 
   @override
-  void endDottedName(int count, analyzer.Token firstIdentifier) {
+  void endDottedName(int count, Token firstIdentifier) {
     _end('DottedName');
     listener.endDottedName(count, firstIdentifier);
   }
 
   @override
-  void endElseStatement(analyzer.Token token) {
+  void endElseStatement(Token token) {
     _end('ElseStatement');
     listener.endElseStatement(token);
   }
 
   @override
-  void endEnum(analyzer.Token enumKeyword, analyzer.Token endBrace, int count) {
+  void endEnum(Token enumKeyword, Token endBrace, int count) {
     _end('Enum');
     listener.endEnum(enumKeyword, endBrace, count);
   }
 
   @override
-  void endExport(analyzer.Token exportKeyword, analyzer.Token semicolon) {
+  void endExport(Token exportKeyword, Token semicolon) {
     _end('Export');
     listener.endExport(exportKeyword, semicolon);
   }
 
   @override
-  void endExpressionStatement(analyzer.Token token) {
+  void endExpressionStatement(Token token) {
     _end('ExpressionStatement');
     listener.endExpressionStatement(token);
   }
 
   @override
-  void endFactoryMethod(analyzer.Token beginToken,
-      analyzer.Token factoryKeyword, analyzer.Token endToken) {
+  void endFactoryMethod(
+      Token beginToken, Token factoryKeyword, Token endToken) {
     _end('FactoryMethod');
     listener.endFactoryMethod(beginToken, factoryKeyword, endToken);
   }
 
   @override
-  void endFieldInitializer(analyzer.Token assignment, analyzer.Token token) {
+  void endFieldInitializer(Token assignment, Token token) {
     _end('FieldInitializer');
     listener.endFieldInitializer(assignment, token);
   }
 
   @override
-  void endFields(
-      int count, analyzer.Token beginToken, analyzer.Token endToken) {
+  void endFields(int count, Token beginToken, Token endToken) {
     // beginMember --> endFields, endMember
     _in('Member');
     listener.endFields(count, beginToken, endToken);
   }
 
   @override
-  void endForIn(
-      analyzer.Token awaitToken,
-      analyzer.Token forToken,
-      analyzer.Token leftParenthesis,
-      analyzer.Token inKeyword,
-      analyzer.Token rightParenthesis,
-      analyzer.Token endToken) {
+  void endForIn(Token awaitToken, Token forToken, Token leftParenthesis,
+      Token inKeyword, Token rightParenthesis, Token endToken) {
     _end('ForStatement');
     listener.endForIn(awaitToken, forToken, leftParenthesis, inKeyword,
         rightParenthesis, endToken);
   }
 
   @override
-  void endForInBody(analyzer.Token token) {
+  void endForInBody(Token token) {
     _end('ForInBody');
     listener.endForInBody(token);
   }
 
   @override
-  void endForInExpression(analyzer.Token token) {
+  void endForInExpression(Token token) {
     _end('ForInExpression');
     listener.endForInExpression(token);
   }
 
   @override
-  void endForStatement(analyzer.Token forKeyword, analyzer.Token leftSeparator,
-      int updateExpressionCount, analyzer.Token endToken) {
+  void endForStatement(Token forKeyword, Token leftSeparator,
+      int updateExpressionCount, Token endToken) {
     _end('ForStatement');
     listener.endForStatement(
         forKeyword, leftSeparator, updateExpressionCount, endToken);
   }
 
   @override
-  void endForStatementBody(analyzer.Token token) {
+  void endForStatementBody(Token token) {
     _end('ForStatementBody');
     listener.endForStatementBody(token);
   }
 
   @override
-  void endFormalParameter(analyzer.Token thisKeyword, analyzer.Token nameToken,
-      fasta.FormalParameterType kind, fasta.MemberKind memberKind) {
+  void endFormalParameter(Token thisKeyword, Token nameToken,
+      fasta.FormalParameterKind kind, fasta.MemberKind memberKind) {
     _end('FormalParameter');
     listener.endFormalParameter(thisKeyword, nameToken, kind, memberKind);
   }
 
   @override
-  void endFormalParameters(int count, analyzer.Token beginToken,
-      analyzer.Token endToken, fasta.MemberKind kind) {
+  void endFormalParameters(
+      int count, Token beginToken, Token endToken, fasta.MemberKind kind) {
     _end('FormalParameters');
     listener.endFormalParameters(count, beginToken, endToken, kind);
   }
 
   @override
-  void endFunctionDeclaration(analyzer.Token endToken) {
-    _end('FunctionDeclaration');
-    listener.endFunctionDeclaration(endToken);
+  void endLocalFunctionDeclaration(Token endToken) {
+    _end('LocalFunctionDeclaration');
+    listener.endLocalFunctionDeclaration(endToken);
   }
 
   @override
-  void endFunctionExpression(analyzer.Token beginToken, analyzer.Token token) {
+  void endFunctionExpression(Token beginToken, Token token) {
     _end('FunctionExpression');
     listener.endFunctionExpression(beginToken, token);
   }
 
   @override
-  void endFunctionName(analyzer.Token beginToken, analyzer.Token token) {
+  void endFunctionName(Token beginToken, Token token) {
     _end('FunctionName');
     listener.endFunctionName(beginToken, token);
   }
 
   @override
-  void endFunctionType(analyzer.Token functionToken, analyzer.Token endToken) {
+  void endFunctionType(Token functionToken, Token endToken) {
     _end('FunctionType');
     listener.endFunctionType(functionToken, endToken);
   }
 
   @override
-  void endFunctionTypeAlias(analyzer.Token typedefKeyword,
-      analyzer.Token equals, analyzer.Token endToken) {
+  void endFunctionTypeAlias(
+      Token typedefKeyword, Token equals, Token endToken) {
     _end('FunctionTypeAlias');
     listener.endFunctionTypeAlias(typedefKeyword, equals, endToken);
   }
@@ -817,7 +797,7 @@
   }
 
   @override
-  void endHide(analyzer.Token hideKeyword) {
+  void endHide(Token hideKeyword) {
     _end('Hide');
     listener.endHide(hideKeyword);
   }
@@ -829,33 +809,32 @@
   }
 
   @override
-  void endIfStatement(analyzer.Token ifToken, analyzer.Token elseToken) {
+  void endIfStatement(Token ifToken, Token elseToken) {
     _end('IfStatement');
     listener.endIfStatement(ifToken, elseToken);
   }
 
   @override
-  void endImport(analyzer.Token importKeyword, analyzer.Token DeferredKeyword,
-      analyzer.Token asKeyword, analyzer.Token semicolon) {
+  void endImport(Token importKeyword, Token DeferredKeyword, Token asKeyword,
+      Token semicolon) {
     _end('Import');
     listener.endImport(importKeyword, DeferredKeyword, asKeyword, semicolon);
   }
 
   @override
-  void endInitializedIdentifier(analyzer.Token nameToken) {
+  void endInitializedIdentifier(Token nameToken) {
     _end('InitializedIdentifier');
     listener.endInitializedIdentifier(nameToken);
   }
 
   @override
-  void endInitializer(analyzer.Token token) {
+  void endInitializer(Token token) {
     _end('Initializer');
     listener.endInitializer(token);
   }
 
   @override
-  void endInitializers(
-      int count, analyzer.Token beginToken, analyzer.Token endToken) {
+  void endInitializers(int count, Token beginToken, Token endToken) {
     _end('Initializers');
     listener.endInitializers(count, beginToken, endToken);
   }
@@ -867,25 +846,25 @@
   }
 
   @override
-  void endLibraryName(analyzer.Token libraryKeyword, analyzer.Token semicolon) {
+  void endLibraryName(Token libraryKeyword, Token semicolon) {
     _end('LibraryName');
     listener.endLibraryName(libraryKeyword, semicolon);
   }
 
   @override
-  void endLiteralMapEntry(analyzer.Token colon, analyzer.Token endToken) {
+  void endLiteralMapEntry(Token colon, Token endToken) {
     _end('LiteralMapEntry');
     listener.endLiteralMapEntry(colon, endToken);
   }
 
   @override
-  void endLiteralString(int interpolationCount, analyzer.Token endToken) {
+  void endLiteralString(int interpolationCount, Token endToken) {
     _end('LiteralString');
     listener.endLiteralString(interpolationCount, endToken);
   }
 
   @override
-  void endLiteralSymbol(analyzer.Token hashToken, int identifierCount) {
+  void endLiteralSymbol(Token hashToken, int identifierCount) {
     _end('LiteralSymbol');
     listener.endLiteralSymbol(hashToken, identifierCount);
   }
@@ -897,8 +876,7 @@
   }
 
   @override
-  void endMetadata(analyzer.Token beginToken, analyzer.Token periodBeforeName,
-      analyzer.Token endToken) {
+  void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) {
     _end('Metadata');
     listener.endMetadata(beginToken, periodBeforeName, endToken);
   }
@@ -910,31 +888,26 @@
   }
 
   @override
-  void endMethod(analyzer.Token getOrSet, analyzer.Token beginToken,
-      analyzer.Token endToken) {
+  void endMethod(Token getOrSet, Token beginToken, Token endToken) {
     _end('Method');
     listener.endMethod(getOrSet, beginToken, endToken);
   }
 
   @override
-  void endMixinApplication(analyzer.Token withKeyword) {
+  void endMixinApplication(Token withKeyword) {
     _end('MixinApplication');
     listener.endMixinApplication(withKeyword);
   }
 
   @override
-  void endNamedFunctionExpression(analyzer.Token endToken) {
+  void endNamedFunctionExpression(Token endToken) {
     _end('NamedFunctionExpression');
     listener.endNamedFunctionExpression(endToken);
   }
 
   @override
-  void endNamedMixinApplication(
-      analyzer.Token begin,
-      analyzer.Token classKeyword,
-      analyzer.Token equals,
-      analyzer.Token implementsKeyword,
-      analyzer.Token endToken) {
+  void endNamedMixinApplication(Token begin, Token classKeyword, Token equals,
+      Token implementsKeyword, Token endToken) {
     _end('NamedMixinApplication');
     _end('ClassOrNamedMixinApplication');
     listener.endNamedMixinApplication(
@@ -942,123 +915,109 @@
   }
 
   @override
-  void endNewExpression(analyzer.Token token) {
+  void endNewExpression(Token token) {
     _end('NewExpression');
     listener.endNewExpression(token);
   }
 
   @override
   void endOptionalFormalParameters(
-      int count, analyzer.Token beginToken, analyzer.Token endToken) {
+      int count, Token beginToken, Token endToken) {
     _end('OptionalFormalParameters');
     listener.endOptionalFormalParameters(count, beginToken, endToken);
   }
 
   @override
-  void endPart(analyzer.Token partKeyword, analyzer.Token semicolon) {
+  void endPart(Token partKeyword, Token semicolon) {
     _end('Part');
     listener.endPart(partKeyword, semicolon);
   }
 
   @override
-  void endPartOf(
-      analyzer.Token partKeyword, analyzer.Token semicolon, bool hasName) {
+  void endPartOf(Token partKeyword, Token semicolon, bool hasName) {
     _end('PartOf');
     listener.endPartOf(partKeyword, semicolon, hasName);
   }
 
   @override
-  void endRedirectingFactoryBody(
-      analyzer.Token beginToken, analyzer.Token endToken) {
+  void endRedirectingFactoryBody(Token beginToken, Token endToken) {
     _end('RedirectingFactoryBody');
     listener.endRedirectingFactoryBody(beginToken, endToken);
   }
 
   @override
-  void endRethrowStatement(
-      analyzer.Token rethrowToken, analyzer.Token endToken) {
+  void endRethrowStatement(Token rethrowToken, Token endToken) {
     _end('RethrowStatement');
     listener.endRethrowStatement(rethrowToken, endToken);
   }
 
   @override
   void endReturnStatement(
-      bool hasExpression, analyzer.Token beginToken, analyzer.Token endToken) {
+      bool hasExpression, Token beginToken, Token endToken) {
     _end('ReturnStatement');
     listener.endReturnStatement(hasExpression, beginToken, endToken);
   }
 
   @override
-  void endShow(analyzer.Token showKeyword) {
+  void endShow(Token showKeyword) {
     _end('Show');
     listener.endShow(showKeyword);
   }
 
   @override
-  void endSwitchBlock(
-      int caseCount, analyzer.Token beginToken, analyzer.Token endToken) {
+  void endSwitchBlock(int caseCount, Token beginToken, Token endToken) {
     _end('SwitchBlock');
     listener.endSwitchBlock(caseCount, beginToken, endToken);
   }
 
   @override
-  void endSwitchCase(
-      int labelCount,
-      int expressionCount,
-      analyzer.Token defaultKeyword,
-      int statementCount,
-      analyzer.Token firstToken,
-      analyzer.Token endToken) {
+  void endSwitchCase(int labelCount, int expressionCount, Token defaultKeyword,
+      int statementCount, Token firstToken, Token endToken) {
     _end('SwitchCase');
     listener.endSwitchCase(labelCount, expressionCount, defaultKeyword,
         statementCount, firstToken, endToken);
   }
 
   @override
-  void endSwitchStatement(
-      analyzer.Token switchKeyword, analyzer.Token endToken) {
+  void endSwitchStatement(Token switchKeyword, Token endToken) {
     _end('SwitchStatement');
     listener.endSwitchStatement(switchKeyword, endToken);
   }
 
   @override
-  void endThenStatement(analyzer.Token token) {
+  void endThenStatement(Token token) {
     _end('ThenStatement');
     listener.endThenStatement(token);
   }
 
   @override
-  void endTopLevelDeclaration(analyzer.Token token) {
+  void endTopLevelDeclaration(Token token) {
     // There is no corresponding beginTopLevelDeclaration
     //_expectBegin('TopLevelDeclaration');
     listener.endTopLevelDeclaration(token);
   }
 
   @override
-  void endTopLevelFields(
-      int count, analyzer.Token beginToken, analyzer.Token endToken) {
+  void endTopLevelFields(int count, Token beginToken, Token endToken) {
     _end('TopLevelMember');
     listener.endTopLevelFields(count, beginToken, endToken);
   }
 
   @override
-  void endTopLevelMethod(analyzer.Token beginToken, analyzer.Token getOrSet,
-      analyzer.Token endToken) {
+  void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) {
     _end('TopLevelMethod');
     _end('TopLevelMember');
     listener.endTopLevelMethod(beginToken, getOrSet, endToken);
   }
 
   @override
-  void endTryStatement(int catchCount, analyzer.Token tryKeyword,
-      analyzer.Token finallyKeyword) {
+  void endTryStatement(int catchCount, Token tryKeyword, Token finallyKeyword) {
     _end('TryStatement');
     listener.endTryStatement(catchCount, tryKeyword, finallyKeyword);
   }
 
   @override
-  void endTypeArguments(
-      int count, analyzer.Token beginToken, analyzer.Token endToken) {
+  void endTypeArguments(int count, Token beginToken, Token endToken) {
     _end('TypeArguments');
     listener.endTypeArguments(count, beginToken, endToken);
   }
@@ -1070,240 +1029,234 @@
   }
 
   @override
-  void endTypeVariable(analyzer.Token token, analyzer.Token extendsOrSuper) {
+  void endTypeVariable(Token token, Token extendsOrSuper) {
     _end('TypeVariable');
     listener.endTypeVariable(token, extendsOrSuper);
   }
 
   @override
-  void endTypeVariables(
-      int count, analyzer.Token beginToken, analyzer.Token endToken) {
+  void endTypeVariables(int count, Token beginToken, Token endToken) {
     _end('TypeVariables');
     listener.endTypeVariables(count, beginToken, endToken);
   }
 
   @override
-  void endVariableInitializer(analyzer.Token assignmentOperator) {
+  void endVariableInitializer(Token assignmentOperator) {
     _end('VariableInitializer');
     listener.endVariableInitializer(assignmentOperator);
   }
 
   @override
-  void endVariablesDeclaration(int count, analyzer.Token endToken) {
+  void endVariablesDeclaration(int count, Token endToken) {
     _end('VariablesDeclaration');
     listener.endVariablesDeclaration(count, endToken);
   }
 
   @override
-  void endWhileStatement(analyzer.Token whileKeyword, analyzer.Token endToken) {
+  void endWhileStatement(Token whileKeyword, Token endToken) {
     _end('WhileStatement');
     listener.endWhileStatement(whileKeyword, endToken);
   }
 
   @override
-  void endWhileStatementBody(analyzer.Token token) {
+  void endWhileStatementBody(Token token) {
     _end('WhileStatementBody');
     listener.endWhileStatementBody(token);
   }
 
   @override
-  void endYieldStatement(analyzer.Token yieldToken, analyzer.Token starToken,
-      analyzer.Token endToken) {
+  void endYieldStatement(Token yieldToken, Token starToken, Token endToken) {
     _end('YieldStatement');
     listener.endYieldStatement(yieldToken, starToken, endToken);
   }
 
   @override
-  void handleAsOperator(analyzer.Token operator, analyzer.Token endToken) {
+  void handleAsOperator(Token operator, Token endToken) {
     listener.handleAsOperator(operator, endToken);
     // TODO(danrubel): implement handleAsOperator
   }
 
   @override
-  void handleAssignmentExpression(analyzer.Token token) {
+  void handleAssignmentExpression(Token token) {
     listener.handleAssignmentExpression(token);
     // TODO(danrubel): implement handleAssignmentExpression
   }
 
   @override
-  void handleAsyncModifier(
-      analyzer.Token asyncToken, analyzer.Token starToken) {
+  void handleAsyncModifier(Token asyncToken, Token starToken) {
     listener.handleAsyncModifier(asyncToken, starToken);
     // TODO(danrubel): implement handleAsyncModifier
   }
 
   @override
-  void handleBinaryExpression(analyzer.Token token) {
+  void handleBinaryExpression(Token token) {
     listener.handleBinaryExpression(token);
     // TODO(danrubel): implement handleBinaryExpression
   }
 
   @override
   void handleBreakStatement(
-      bool hasTarget, analyzer.Token breakKeyword, analyzer.Token endToken) {
+      bool hasTarget, Token breakKeyword, Token endToken) {
     listener.handleBreakStatement(hasTarget, breakKeyword, endToken);
     // TODO(danrubel): implement handleBreakStatement
   }
 
   @override
-  void handleCaseMatch(analyzer.Token caseKeyword, analyzer.Token colon) {
+  void handleCaseMatch(Token caseKeyword, Token colon) {
     listener.handleCaseMatch(caseKeyword, colon);
     // TODO(danrubel): implement handleCaseMatch
   }
 
   @override
-  void handleCatchBlock(analyzer.Token onKeyword, analyzer.Token catchKeyword) {
+  void handleCatchBlock(Token onKeyword, Token catchKeyword) {
     listener.handleCatchBlock(onKeyword, catchKeyword);
     // TODO(danrubel): implement handleCatchBlock
   }
 
   @override
-  void handleConditionalExpression(
-      analyzer.Token question, analyzer.Token colon) {
+  void handleConditionalExpression(Token question, Token colon) {
     listener.handleConditionalExpression(question, colon);
     // TODO(danrubel): implement handleConditionalExpression
   }
 
   @override
   void handleContinueStatement(
-      bool hasTarget, analyzer.Token continueKeyword, analyzer.Token endToken) {
+      bool hasTarget, Token continueKeyword, Token endToken) {
     listener.handleContinueStatement(hasTarget, continueKeyword, endToken);
     // TODO(danrubel): implement handleContinueStatement
   }
 
   @override
-  void handleEmptyStatement(analyzer.Token token) {
+  void handleEmptyStatement(Token token) {
     listener.handleEmptyStatement(token);
     // TODO(danrubel): implement handleEmptyStatement
   }
 
   @override
-  void handleEmptyFunctionBody(analyzer.Token semicolon) {
+  void handleEmptyFunctionBody(Token semicolon) {
     listener.handleEmptyFunctionBody(semicolon);
     // TODO(danrubel): implement handleEmptyFunctionBody
   }
 
   @override
-  void handleExpressionFunctionBody(
-      analyzer.Token arrowToken, analyzer.Token endToken) {
+  void handleExpressionFunctionBody(Token arrowToken, Token endToken) {
     listener.handleExpressionFunctionBody(arrowToken, endToken);
     // TODO(danrubel): implement handleExpressionFunctionBody
   }
 
   @override
-  void handleExtraneousExpression(analyzer.Token token, Message message) {
+  void handleExtraneousExpression(Token token, Message message) {
     listener.handleExtraneousExpression(token, message);
     // TODO(danrubel): implement handleExtraneousExpression
   }
 
   @override
-  void handleFinallyBlock(analyzer.Token finallyKeyword) {
+  void handleFinallyBlock(Token finallyKeyword) {
     listener.handleFinallyBlock(finallyKeyword);
     // TODO(danrubel): implement handleFinallyBlock
   }
 
   @override
-  void handleFormalParameterWithoutValue(analyzer.Token token) {
+  void handleFormalParameterWithoutValue(Token token) {
     listener.handleFormalParameterWithoutValue(token);
     // TODO(danrubel): implement handleFormalParameterWithoutValue
   }
 
   @override
-  void handleFunctionBodySkipped(analyzer.Token token, bool isExpressionBody) {
+  void handleFunctionBodySkipped(Token token, bool isExpressionBody) {
     listener.handleFunctionBodySkipped(token, isExpressionBody);
     // TODO(danrubel): implement handleFunctionBodySkipped
   }
 
   @override
-  void handleIdentifier(analyzer.Token token, IdentifierContext context) {
+  void handleIdentifier(Token token, IdentifierContext context) {
     listener.handleIdentifier(token, context);
     // TODO(danrubel): implement handleIdentifier
   }
 
   @override
   void handleIndexedExpression(
-      analyzer.Token openSquareBracket, analyzer.Token closeSquareBracket) {
+      Token openSquareBracket, Token closeSquareBracket) {
     listener.handleIndexedExpression(openSquareBracket, closeSquareBracket);
     // TODO(danrubel): implement handleIndexedExpression
   }
 
   @override
-  void handleInvalidExpression(analyzer.Token token) {
+  void handleInvalidExpression(Token token) {
     listener.handleInvalidExpression(token);
     // TODO(danrubel): implement handleInvalidExpression
   }
 
   @override
-  void handleInvalidFunctionBody(analyzer.Token token) {
+  void handleInvalidFunctionBody(Token token) {
     listener.handleInvalidFunctionBody(token);
     // TODO(danrubel): implement handleInvalidFunctionBody
   }
 
   @override
-  void handleInvalidTypeReference(analyzer.Token token) {
+  void handleInvalidTypeReference(Token token) {
     listener.handleInvalidTypeReference(token);
     // TODO(danrubel): implement handleInvalidTypeReference
   }
 
   @override
-  void handleIsOperator(
-      analyzer.Token operator, analyzer.Token not, analyzer.Token endToken) {
+  void handleIsOperator(Token operator, Token not, Token endToken) {
     listener.handleIsOperator(operator, not, endToken);
     // TODO(danrubel): implement handleIsOperator
   }
 
   @override
-  void handleLabel(analyzer.Token token) {
+  void handleLabel(Token token) {
     listener.handleLabel(token);
     // TODO(danrubel): implement handleLabel
   }
 
   @override
-  void handleLiteralBool(analyzer.Token token) {
+  void handleLiteralBool(Token token) {
     listener.handleLiteralBool(token);
     // TODO(danrubel): implement handleLiteralBool
   }
 
   @override
-  void handleLiteralDouble(analyzer.Token token) {
+  void handleLiteralDouble(Token token) {
     listener.handleLiteralDouble(token);
     // TODO(danrubel): implement handleLiteralDouble
   }
 
   @override
-  void handleLiteralInt(analyzer.Token token) {
+  void handleLiteralInt(Token token) {
     listener.handleLiteralInt(token);
     // TODO(danrubel): implement handleLiteralInt
   }
 
   @override
-  void handleLiteralList(int count, analyzer.Token beginToken,
-      analyzer.Token constKeyword, analyzer.Token endToken) {
+  void handleLiteralList(
+      int count, Token beginToken, Token constKeyword, Token endToken) {
     listener.handleLiteralList(count, beginToken, constKeyword, endToken);
     // TODO(danrubel): implement handleLiteralList
   }
 
   @override
-  void handleLiteralMap(int count, analyzer.Token beginToken,
-      analyzer.Token constKeyword, analyzer.Token endToken) {
+  void handleLiteralMap(
+      int count, Token beginToken, Token constKeyword, Token endToken) {
     listener.handleLiteralMap(count, beginToken, constKeyword, endToken);
     // TODO(danrubel): implement handleLiteralMap
   }
 
   @override
-  void handleLiteralNull(analyzer.Token token) {
+  void handleLiteralNull(Token token) {
     listener.handleLiteralNull(token);
     // TODO(danrubel): implement handleLiteralNull
   }
 
   @override
-  Link<analyzer.Token> handleMemberName(Link<analyzer.Token> identifiers) {
+  Link<Token> handleMemberName(Link<Token> identifiers) {
     return listener.handleMemberName(identifiers);
     // TODO(danrubel): implement handleMemberName
   }
 
   @override
-  void handleModifier(analyzer.Token token) {
+  void handleModifier(Token token) {
     listener.handleModifier(token);
     // TODO(danrubel): implement handleModifier
   }
@@ -1315,44 +1268,43 @@
   }
 
   @override
-  void handleNamedArgument(analyzer.Token colon) {
+  void handleNamedArgument(Token colon) {
     listener.handleNamedArgument(colon);
     // TODO(danrubel): implement handleNamedArgument
   }
 
   @override
-  void handleNoArguments(analyzer.Token token) {
+  void handleNoArguments(Token token) {
     listener.handleNoArguments(token);
     // TODO(danrubel): implement handleNoArguments
   }
 
   @override
-  void handleNoConstructorReferenceContinuationAfterTypeArguments(
-      analyzer.Token token) {
+  void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
     listener.handleNoConstructorReferenceContinuationAfterTypeArguments(token);
     // TODO(danrubel): implement handleNoConstructorReferenceContinuationAfterTypeArguments
   }
 
   @override
-  void handleNoExpression(analyzer.Token token) {
+  void handleNoExpression(Token token) {
     listener.handleNoExpression(token);
     // TODO(danrubel): implement handleNoExpression
   }
 
   @override
-  void handleNoFieldInitializer(analyzer.Token token) {
+  void handleNoFieldInitializer(Token token) {
     listener.handleNoFieldInitializer(token);
     // TODO(danrubel): implement handleNoFieldInitializer
   }
 
   @override
-  void handleNoFormalParameters(analyzer.Token token, fasta.MemberKind kind) {
+  void handleNoFormalParameters(Token token, fasta.MemberKind kind) {
     listener.handleNoFormalParameters(token, kind);
     // TODO(danrubel): implement handleNoFormalParameters
   }
 
   @override
-  void handleNoFunctionBody(analyzer.Token token) {
+  void handleNoFunctionBody(Token token) {
     listener.handleNoFunctionBody(token);
     // TODO(danrubel): implement handleNoFunctionBody
   }
@@ -1364,80 +1316,79 @@
   }
 
   @override
-  void handleNoName(analyzer.Token token) {
+  void handleNoName(Token token) {
     listener.handleNoName(token);
     // TODO(danrubel): implement handleNoName
   }
 
   @override
-  void handleNoType(analyzer.Token token) {
+  void handleNoType(Token token) {
     listener.handleNoType(token);
     // TODO(danrubel): implement handleNoType
   }
 
   @override
-  void handleNoTypeArguments(analyzer.Token token) {
+  void handleNoTypeArguments(Token token) {
     listener.handleNoTypeArguments(token);
     // TODO(danrubel): implement handleNoTypeArguments
   }
 
   @override
-  void handleNoTypeVariables(analyzer.Token token) {
+  void handleNoTypeVariables(Token token) {
     listener.handleNoTypeVariables(token);
     // TODO(danrubel): implement handleNoTypeVariables
   }
 
   @override
-  void handleNoVariableInitializer(analyzer.Token token) {
+  void handleNoVariableInitializer(Token token) {
     listener.handleNoVariableInitializer(token);
     // TODO(danrubel): implement handleNoVariableInitializer
   }
 
   @override
-  void handleOperator(analyzer.Token token) {
+  void handleOperator(Token token) {
     listener.handleOperator(token);
     // TODO(danrubel): implement handleOperator
   }
 
   @override
-  void handleOperatorName(
-      analyzer.Token operatorKeyword, analyzer.Token token) {
+  void handleOperatorName(Token operatorKeyword, Token token) {
     listener.handleOperatorName(operatorKeyword, token);
     // TODO(danrubel): implement handleOperatorName
   }
 
   @override
-  void handleParenthesizedExpression(BeginToken token) {
+  void handleParenthesizedExpression(Token token) {
     listener.handleParenthesizedExpression(token);
     // TODO(danrubel): implement handleParenthesizedExpression
   }
 
   @override
-  void handleQualified(analyzer.Token period) {
+  void handleQualified(Token period) {
     listener.handleQualified(period);
     // TODO(danrubel): implement handleQualified
   }
 
   @override
-  void handleRecoverExpression(analyzer.Token token, Message message) {
+  void handleRecoverExpression(Token token, Message message) {
     listener.handleRecoverExpression(token, message);
     // TODO(danrubel): implement handleRecoverExpression
   }
 
   @override
-  void handleRecoverableError(analyzer.Token token, Message message) {
+  void handleRecoverableError(Token token, Message message) {
     listener.handleRecoverableError(token, message);
     // TODO(danrubel): implement handleRecoverableError
   }
 
   @override
-  void handleScript(analyzer.Token token) {
+  void handleScript(Token token) {
     listener.handleScript(token);
     // TODO(danrubel): implement handleScript
   }
 
   @override
-  void handleSend(analyzer.Token beginToken, analyzer.Token endToken) {
+  void handleSend(Token beginToken, Token endToken) {
     listener.handleSend(beginToken, endToken);
     // TODO(danrubel): implement handleSend
   }
@@ -1449,88 +1400,85 @@
   }
 
   @override
-  void handleStringPart(analyzer.Token token) {
+  void handleStringPart(Token token) {
     listener.handleStringPart(token);
     // TODO(danrubel): implement handleStringPart
   }
 
   @override
-  void handleSuperExpression(analyzer.Token token, IdentifierContext context) {
+  void handleSuperExpression(Token token, IdentifierContext context) {
     listener.handleSuperExpression(token, context);
     // TODO(danrubel): implement handleSuperExpression
   }
 
   @override
-  void handleSymbolVoid(analyzer.Token token) {
+  void handleSymbolVoid(Token token) {
     listener.handleSymbolVoid(token);
     // TODO(danrubel): implement handleSymbolVoid
   }
 
   @override
-  void handleThisExpression(analyzer.Token token, IdentifierContext context) {
+  void handleThisExpression(Token token, IdentifierContext context) {
     listener.handleThisExpression(token, context);
     // TODO(danrubel): implement handleThisExpression
   }
 
   @override
-  void handleThrowExpression(
-      analyzer.Token throwToken, analyzer.Token endToken) {
+  void handleThrowExpression(Token throwToken, Token endToken) {
     listener.handleThrowExpression(throwToken, endToken);
     // TODO(danrubel): implement handleThrowExpression
   }
 
   @override
-  void handleType(analyzer.Token beginToken, analyzer.Token endToken) {
+  void handleType(Token beginToken, Token endToken) {
     listener.handleType(beginToken, endToken);
     // TODO(danrubel): implement handleType
   }
 
   @override
-  void handleUnaryPostfixAssignmentExpression(analyzer.Token token) {
+  void handleUnaryPostfixAssignmentExpression(Token token) {
     listener.handleUnaryPostfixAssignmentExpression(token);
     // TODO(danrubel): implement handleUnaryPostfixAssignmentExpression
   }
 
   @override
-  void handleUnaryPrefixAssignmentExpression(analyzer.Token token) {
+  void handleUnaryPrefixAssignmentExpression(Token token) {
     listener.handleUnaryPrefixAssignmentExpression(token);
     // TODO(danrubel): implement handleUnaryPrefixAssignmentExpression
   }
 
   @override
-  void handleUnaryPrefixExpression(analyzer.Token token) {
+  void handleUnaryPrefixExpression(Token token) {
     listener.handleUnaryPrefixExpression(token);
     // TODO(danrubel): implement handleUnaryPrefixExpression
   }
 
   @override
-  analyzer.Token handleUnrecoverableError(
-      analyzer.Token token, Message message) {
+  Token handleUnrecoverableError(Token token, Message message) {
     return listener.handleUnrecoverableError(token, message);
     // TODO(danrubel): implement handleUnrecoverableError
   }
 
   @override
-  void handleValuedFormalParameter(
-      analyzer.Token equals, analyzer.Token token) {
+  void handleValuedFormalParameter(Token equals, Token token) {
     listener.handleValuedFormalParameter(equals, token);
     // TODO(danrubel): implement handleValuedFormalParameter
   }
 
   @override
-  void handleVoidKeyword(analyzer.Token token) {
+  void handleVoidKeyword(Token token) {
     listener.handleVoidKeyword(token);
     // TODO(danrubel): implement handleVoidKeyword
   }
 
   @override
-  analyzer.Token injectGenericCommentTypeAssign(analyzer.Token token) {
+  Token injectGenericCommentTypeAssign(Token token) {
     return listener.injectGenericCommentTypeAssign(token);
     // TODO(danrubel): implement injectGenericCommentTypeAssign
   }
 
   @override
-  analyzer.Token injectGenericCommentTypeList(analyzer.Token token) {
+  Token injectGenericCommentTypeList(Token token) {
     return listener.injectGenericCommentTypeList(token);
     // TODO(danrubel): implement injectGenericCommentTypeList
   }
@@ -1542,7 +1490,7 @@
   }
 
   @override
-  analyzer.Token newSyntheticToken(analyzer.Token next) {
+  Token newSyntheticToken(Token next) {
     return listener.newSyntheticToken(next);
     // TODO(danrubel): implement newSyntheticToken
   }
@@ -1552,8 +1500,8 @@
   List<fasta.ParserError> get recoverableErrors => listener.recoverableErrors;
 
   @override
-  analyzer.Token replaceTokenWithGenericCommentTypeAssign(
-      analyzer.Token tokenToStartReplacing, analyzer.Token tokenWithComment) {
+  Token replaceTokenWithGenericCommentTypeAssign(
+      Token tokenToStartReplacing, Token tokenWithComment) {
     return listener.replaceTokenWithGenericCommentTypeAssign(
         tokenToStartReplacing, tokenWithComment);
     // TODO(danrubel): implement replaceTokenWithGenericCommentTypeAssign
diff --git a/pkg/analyzer/test/generated/parser_fasta_test.dart b/pkg/analyzer/test/generated/parser_fasta_test.dart
index b3eed49a..71021f8 100644
--- a/pkg/analyzer/test/generated/parser_fasta_test.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_test.dart
@@ -13,9 +13,8 @@
 import 'package:front_end/src/fasta/fasta_codes.dart' show Message;
 import 'package:front_end/src/fasta/kernel/kernel_builder.dart';
 import 'package:front_end/src/fasta/kernel/kernel_library_builder.dart';
-import 'package:front_end/src/fasta/parser/identifier_context.dart'
-    show IdentifierContext;
-import 'package:front_end/src/fasta/parser/parser.dart' as fasta;
+import 'package:front_end/src/fasta/parser.dart' show IdentifierContext;
+import 'package:front_end/src/fasta/parser.dart' as fasta;
 import 'package:front_end/src/fasta/scanner/string_scanner.dart';
 import 'package:front_end/src/fasta/scanner/token.dart' as fasta;
 import 'package:test/test.dart';
@@ -292,7 +291,7 @@
   analyzer.Parser get parser => _parserProxy;
 
   @override
-  bool get usingFasta => true;
+  bool get usingFastaParser => true;
 
   @override
   void assertErrorsWithCodes(List<ErrorCode> expectedErrorCodes) {
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 2fbd2d1..8650f64 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -65,7 +65,12 @@
   /**
    * Flag indicating whether the fasta parser is being used.
    */
-  bool get usingFasta;
+  bool get usingFastaParser;
+
+  /**
+   * Flag indicating whether the fasta scanner is being used.
+   */
+  bool get usingFastaScanner;
 
   /**
    * Assert that the number and codes of errors occurred during parsing is the
@@ -8134,7 +8139,7 @@
   Parser parser;
 
   @override
-  bool get usingFasta => Parser.useFasta;
+  bool get usingFastaParser => Parser.useFasta;
 
   @override
   void assertErrorsWithCodes(List<ErrorCode> expectedErrorCodes) {
@@ -8589,6 +8594,8 @@
  * Intended to be mixed in to parser test case classes.
  */
 class ParserTestHelpers {
+  bool get usingFastaScanner => fe.Scanner.useFasta;
+
   void expectCommentText(Comment comment, String expectedText) {
     expect(comment.beginToken, same(comment.endToken));
     expect(comment.beginToken.lexeme, expectedText);
@@ -13666,7 +13673,7 @@
 
   void test_parseCompilationUnit_abstractAsPrefix_parameterized() {
     var errorCodes = <ErrorCode>[];
-    if (usingFasta) {
+    if (usingFastaParser) {
       // built-in "abstract" cannot be used as a type
       errorCodes.add(ParserErrorCode.EXPECTED_TYPE_NAME);
     }
diff --git a/pkg/analyzer/test/src/command_line/arguments_test.dart b/pkg/analyzer/test/src/command_line/arguments_test.dart
index e60bff2..e2e9131a 100644
--- a/pkg/analyzer/test/src/command_line/arguments_test.dart
+++ b/pkg/analyzer/test/src/command_line/arguments_test.dart
@@ -35,6 +35,7 @@
       '-Dfoo=1',
       '-Dbar=2',
       '--enable-strict-call-checks',
+      '--no-declaration-casts',
       '--no-implicit-casts',
       '--no-implicit-dynamic',
       '--options=$defaultAnalysisOptionsFilePath',
@@ -59,6 +60,7 @@
     expect(defaultOptions, isNotNull);
     expect(defaultOptions.enableStrictCallChecks, true);
     expect(defaultOptions.strongMode, true);
+    expect(defaultOptions.declarationCasts, false);
     expect(defaultOptions.implicitCasts, false);
     expect(defaultOptions.implicitDynamic, false);
   }
@@ -80,6 +82,7 @@
     expect(defaultOptions, isNotNull);
     expect(defaultOptions.enableStrictCallChecks, false);
     expect(defaultOptions.strongMode, false);
+    expect(defaultOptions.declarationCasts, true);
     expect(defaultOptions.implicitCasts, true);
     expect(defaultOptions.implicitDynamic, true);
   }
@@ -134,10 +137,27 @@
     expect(manager.canUseSummaries, true);
   }
 
+  void test_declarationCast_noImplicitCast() {
+    MemoryResourceProvider provider = new MemoryResourceProvider();
+    ArgParser parser = new ArgParser();
+    defineAnalysisArguments(parser);
+    List<String> args = [
+      '--declaration-casts',
+      '--no-implicit-casts',
+    ];
+    ArgResults result = parse(provider, parser, args);
+    ContextBuilderOptions options = createContextBuilderOptions(result);
+    expect(options, isNotNull);
+    AnalysisOptionsImpl defaultOptions = options.defaultOptions;
+    expect(defaultOptions, isNotNull);
+    expect(defaultOptions.declarationCasts, true);
+    expect(defaultOptions.implicitCasts, false);
+  }
+
   void test_defineAnalysisArguments() {
     ArgParser parser = new ArgParser();
     defineAnalysisArguments(parser);
-    expect(parser.options, hasLength(14));
+    expect(parser.options, hasLength(15));
   }
 
   void test_extractDefinedVariables() {
@@ -166,6 +186,55 @@
     expect(result, orderedEquals(['--a', '--c=0', '-e=2', '-f', 'bar']));
   }
 
+  void test_noAssignmentCast() {
+    MemoryResourceProvider provider = new MemoryResourceProvider();
+    ArgParser parser = new ArgParser();
+    defineAnalysisArguments(parser);
+    List<String> args = [
+      '--no-declaration-casts',
+    ];
+    ArgResults result = parse(provider, parser, args);
+    ContextBuilderOptions options = createContextBuilderOptions(result);
+    expect(options, isNotNull);
+    AnalysisOptionsImpl defaultOptions = options.defaultOptions;
+    expect(defaultOptions, isNotNull);
+    expect(defaultOptions.declarationCasts, false);
+    expect(defaultOptions.implicitCasts, true);
+  }
+
+  void test_noAssignmentCast_implicitCast() {
+    MemoryResourceProvider provider = new MemoryResourceProvider();
+    ArgParser parser = new ArgParser();
+    defineAnalysisArguments(parser);
+    List<String> args = [
+      '--no-declaration-casts',
+      '--implicit-casts',
+    ];
+    ArgResults result = parse(provider, parser, args);
+    ContextBuilderOptions options = createContextBuilderOptions(result);
+    expect(options, isNotNull);
+    AnalysisOptionsImpl defaultOptions = options.defaultOptions;
+    expect(defaultOptions, isNotNull);
+    expect(defaultOptions.declarationCasts, false);
+    expect(defaultOptions.implicitCasts, true);
+  }
+
+  void test_noImplicitCast() {
+    MemoryResourceProvider provider = new MemoryResourceProvider();
+    ArgParser parser = new ArgParser();
+    defineAnalysisArguments(parser);
+    List<String> args = [
+      '--no-implicit-casts',
+    ];
+    ArgResults result = parse(provider, parser, args);
+    ContextBuilderOptions options = createContextBuilderOptions(result);
+    expect(options, isNotNull);
+    AnalysisOptionsImpl defaultOptions = options.defaultOptions;
+    expect(defaultOptions, isNotNull);
+    expect(defaultOptions.declarationCasts, false);
+    expect(defaultOptions.implicitCasts, false);
+  }
+
   void test_parse_noReplacement_noIgnored() {
     MemoryResourceProvider provider = new MemoryResourceProvider();
     ArgParser parser = new ArgParser();
diff --git a/pkg/analyzer/test/src/context/builder_test.dart b/pkg/analyzer/test/src/context/builder_test.dart
index 0e786b7..0c75315 100644
--- a/pkg/analyzer/test/src/context/builder_test.dart
+++ b/pkg/analyzer/test/src/context/builder_test.dart
@@ -1014,6 +1014,7 @@
     expect(actual.preserveComments, expected.preserveComments);
     expect(actual.strongMode, expected.strongMode);
     expect(actual.strongModeHints, expected.strongModeHints);
+    expect(actual.declarationCasts, expected.declarationCasts);
     expect(actual.implicitCasts, expected.implicitCasts);
     expect(actual.implicitDynamic, expected.implicitDynamic);
     expect(actual.trackCacheDependencies, expected.trackCacheDependencies);
diff --git a/pkg/analyzer/test/src/context/mock_sdk.dart b/pkg/analyzer/test/src/context/mock_sdk.dart
index e5e0051..0023832 100644
--- a/pkg/analyzer/test/src/context/mock_sdk.dart
+++ b/pkg/analyzer/test/src/context/mock_sdk.dart
@@ -303,6 +303,15 @@
 
 class _Override { const _Override(); }
 const Object override = const _Override();
+
+class _CompileTimeError {
+  final String _errorMsg;
+  _CompileTimeError(this._errorMsg);
+}
+
+class _ConstantExpressionError {
+  const _ConstantExpressionError();
+}
 ''');
 
 const _MockSdkLibrary _LIB_FOREIGN_HELPER = const _MockSdkLibrary(
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 7a7dcbe..b6bbae2 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -262,14 +262,22 @@
   void writeExportElement(ExportElement e) {
     writeMetadata(e, '', '\n');
     buffer.write('export ');
-    writeUri(e, e.exportedLibrary?.source);
+    writeUri(e.exportedLibrary?.source);
 
     e.combinators.forEach(writeNamespaceCombinator);
 
     buffer.writeln(';');
   }
 
-  void writeExpression(AstNode e) {
+  void writeExpression(AstNode e, [Expression enclosing]) {
+    bool needsParenthesis = e is Expression &&
+        enclosing != null &&
+        e.precedence < enclosing.precedence;
+
+    if (needsParenthesis) {
+      buffer.write('(');
+    }
+
     if (e is Annotation) {
       buffer.write('@');
       writeExpression(e.name);
@@ -290,11 +298,11 @@
       }
       buffer.write(')');
     } else if (e is BinaryExpression) {
-      writeExpression(e.leftOperand);
+      writeExpression(e.leftOperand, e);
       buffer.write(' ');
       buffer.write(e.operator.lexeme);
       buffer.write(' ');
-      writeExpression(e.rightOperand);
+      writeExpression(e.rightOperand, e);
     } else if (e is BooleanLiteral) {
       buffer.write(e.value);
     } else if (e is ConditionalExpression) {
@@ -360,13 +368,13 @@
       buffer.write('null');
     } else if (e is PrefixExpression) {
       buffer.write(e.operator.lexeme);
-      writeExpression(e.operand);
+      writeExpression(e.operand, e);
     } else if (e is PrefixedIdentifier) {
       writeExpression(e.prefix);
       buffer.write('.');
       writeExpression(e.identifier);
     } else if (e is PropertyAccess) {
-      writeExpression(e.target);
+      writeExpression(e.target, e);
       buffer.write('.');
       writeExpression(e.propertyName);
     } else if (e is RedirectingConstructorInvocation) {
@@ -421,9 +429,16 @@
     } else {
       fail('Unsupported expression type: ${e.runtimeType}');
     }
+
+    if (needsParenthesis) {
+      buffer.write(')');
+    }
   }
 
   void writeFunctionElement(FunctionElement e) {
+    writeDocumentation(e);
+    writeMetadata(e, '', '\n');
+
     writeIf(e.isExternal, 'external ');
 
     writeType2(e.returnType);
@@ -476,7 +491,7 @@
     if (!e.isSynthetic) {
       writeMetadata(e, '', '\n');
       buffer.write('import ');
-      writeUri(e, e.importedLibrary?.source);
+      writeUri(e.importedLibrary?.source);
 
       writeIf(e.isDeferred, ' deferred');
 
@@ -585,8 +600,7 @@
 
   void writeParameterElement(ParameterElement e) {
     String defaultValueSeparator;
-    Expression defaultValue =
-        e is DefaultParameterElementImpl ? e.constantInitializer : null;
+    Expression defaultValue;
     String closeString;
     ParameterKind kind = e.parameterKind;
     if (kind == ParameterKind.REQUIRED) {
@@ -594,15 +608,24 @@
     } else if (kind == ParameterKind.POSITIONAL) {
       buffer.write('[');
       defaultValueSeparator = ' = ';
+      defaultValue = (e as ConstVariableElement).constantInitializer;
       closeString = ']';
     } else if (kind == ParameterKind.NAMED) {
       buffer.write('{');
       defaultValueSeparator = ': ';
+      defaultValue = (e as ConstVariableElement).constantInitializer;
       closeString = '}';
     } else {
       fail('Unknown parameter kind: $kind');
     }
 
+    // Kernel desugars omitted default parameter values to 'null'.
+    // Analyzer does not set initializer at all.
+    // It is not an interesting distinction, so we skip NullLiteral(s).
+    if (defaultValue is NullLiteral) {
+      defaultValue = null;
+    }
+
     writeMetadata(e, '', ' ');
 
     writeIf(e.isCovariant, 'covariant ');
@@ -634,7 +657,7 @@
   void writePartElement(CompilationUnitElement e) {
     writeMetadata(e, '', '\n');
     buffer.write('part ');
-    writeUri(e, e.source);
+    writeUri(e.source);
     buffer.writeln(';');
   }
 
@@ -643,6 +666,23 @@
       return;
     }
 
+    if (!e.isSynthetic) {
+      PropertyInducingElement variable = e.variable;
+      expect(variable, isNotNull);
+      expect(variable.isSynthetic, isTrue);
+      if (e.isGetter) {
+        expect(variable.getter, same(e));
+        if (variable.setter != null) {
+          expect(variable.setter.variable, same(variable));
+        }
+      } else {
+        expect(variable.setter, same(e));
+        if (variable.getter != null) {
+          expect(variable.getter.variable, same(variable));
+        }
+      }
+    }
+
     if (e.enclosingElement is ClassElement) {
       writeDocumentation(e, '  ');
       writeMetadata(e, '  ', '\n');
@@ -786,14 +826,16 @@
     e.functions.forEach(writeFunctionElement);
   }
 
-  void writeUri(UriReferencedElement e, Source source) {
-    String uri = e.uri ?? source.uri.toString();
-    buffer.write('\'$uri\'');
-    if (withOffsets) {
-      buffer.write('(');
-      buffer.write('${e.uriOffset}, ');
-      buffer.write('${e.uriEnd})');
-      buffer.write(')');
+  void writeUri(Source source) {
+    if (source != null) {
+      Uri uri = source.uri;
+      String uriStr = uri.toString();
+      if (uri.isScheme('file')) {
+        uriStr = uri.pathSegments.last;
+      }
+      buffer.write('\'$uriStr\'');
+    } else {
+      buffer.write('\'<unresolved>\'');
     }
   }
 
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index cb2c82c..2a01670 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -65,6 +65,11 @@
   bool shouldCompareLibraryElements = true;
 
   /**
+   * Return `true` if shared front-end is used.
+   */
+  bool get isSharedFrontEnd => false;
+
+  /**
    * Return `true` if resynthesizing should be done is strong mode.
    */
   bool get isStrongMode;
@@ -273,7 +278,6 @@
   void compareCompilationUnitElements(CompilationUnitElementImpl resynthesized,
       CompilationUnitElementImpl original) {
     String desc = 'Compilation unit ${original.source.uri}';
-    compareUriReferencedElements(resynthesized, original, desc);
     expect(resynthesized.source, original.source);
     expect(resynthesized.librarySource, original.librarySource);
     compareLineInfo(resynthesized.lineInfo, original.lineInfo);
@@ -763,7 +767,6 @@
 
   void compareExportElements(ExportElementImpl resynthesized,
       ExportElementImpl original, String desc) {
-    compareUriReferencedElements(resynthesized, original, desc);
     expect(resynthesized.exportedLibrary.location,
         original.exportedLibrary.location);
     expect(resynthesized.combinators.length, original.combinators.length);
@@ -845,7 +848,6 @@
 
   void compareImportElements(ImportElementImpl resynthesized,
       ImportElementImpl original, String desc) {
-    compareUriReferencedElements(resynthesized, original, desc);
     expect(resynthesized.importedLibrary.location,
         original.importedLibrary.location,
         reason: '$desc importedLibrary location');
@@ -1149,15 +1151,6 @@
     }
   }
 
-  void compareUriReferencedElements(UriReferencedElementImpl resynthesized,
-      UriReferencedElementImpl original, String desc) {
-    compareElements(resynthesized, original, desc);
-    expect(resynthesized.uri, original.uri, reason: '$desc.uri');
-    expect(resynthesized.uriOffset, original.uriOffset,
-        reason: '$desc.uriOffset');
-    expect(resynthesized.uriEnd, original.uriEnd, reason: '$desc.uriEnd');
-  }
-
   void compareVariableElements(
       VariableElement resynthesized, VariableElement original, String desc) {
     compareElements(resynthesized, original, desc);
@@ -1364,29 +1357,22 @@
 
   test_class_abstract() async {
     var library = await checkLibrary('abstract class C {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 abstract class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-abstract class C {
-}
-''');
-    }
   }
 
   test_class_alias() async {
     var library = await checkLibrary('''
-class C = D with E, F;
+class C = D with E, F, G;
 class D {}
 class E {}
 class F {}
+class G {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
-class alias C extends D with E, F {
+    checkElementText(library, r'''
+class alias C extends D with E, F, G {
   synthetic C() = D;
 }
 class D {
@@ -1395,20 +1381,9 @@
 }
 class F {
 }
-''');
-    } else {
-      checkElementText(library, r'''
-class alias C extends D with E, F {
-  synthetic C() = D;
-}
-class D {
-}
-class E {
-}
-class F {
+class G {
 }
 ''');
-    }
   }
 
   test_class_alias_abstract() async {
@@ -1417,8 +1392,7 @@
 class D {}
 class E {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 abstract class alias C extends D with E {
   synthetic C() = D;
 }
@@ -1427,17 +1401,6 @@
 class E {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-abstract class alias C extends D with E {
-  synthetic C() = D;
-}
-class D {
-}
-class E {
-}
-''');
-    }
   }
 
   test_class_alias_documented() async {
@@ -1450,8 +1413,7 @@
 
 class D {}
 class E {}''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 /**
  * Docs
  */
@@ -1463,20 +1425,26 @@
 class E {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-/**
- * Docs
- */
-class alias C extends D with E {
-  synthetic C() = D;
+  }
+
+  test_class_alias_generic() async {
+    var library = await checkLibrary('''
+class Z = A with B<int>, C<double>;
+class A {}
+class B<B1> {}
+class C<C1> {}
+''');
+    checkElementText(library, r'''
+class alias Z extends A with B<int>, C<double> {
+  synthetic Z() = A;
 }
-class D {
+class A {
 }
-class E {
+class B<B1> {
+}
+class C<C1> {
 }
 ''');
-    }
   }
 
   test_class_alias_with_forwarding_constructors() async {
@@ -1497,8 +1465,7 @@
 class M {}
 class MixinApp = Base with M;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart';
 class M {
 }
@@ -1511,21 +1478,6 @@
   synthetic MixinApp.fact2() = Base.fact2;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart';
-class M {
-}
-class alias MixinApp extends Base with M {
-  synthetic MixinApp._priv() = Base._priv;
-  synthetic MixinApp() = Base;
-  synthetic MixinApp.noArgs() = Base.noArgs;
-  synthetic MixinApp.requiredArg(dynamic x) = Base.requiredArg;
-  synthetic MixinApp.fact() = Base.fact;
-  synthetic MixinApp.fact2() = Base.fact2;
-}
-''');
-    }
   }
 
   test_class_alias_with_forwarding_constructors_type_substitution() async {
@@ -1536,8 +1488,7 @@
 class M {}
 class MixinApp = Base with M;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class Base<T> {
   Base.ctor(T t, List<T> l);
 }
@@ -1547,18 +1498,6 @@
   synthetic MixinApp.ctor(dynamic t, List<dynamic> l) = Base<T>.ctor;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class Base<T> {
-  Base.ctor(T t, List<T> l);
-}
-class M {
-}
-class alias MixinApp extends Base<dynamic> with M {
-  synthetic MixinApp.ctor(dynamic t, List<dynamic> l) = Base<T>.ctor;
-}
-''');
-    }
   }
 
   test_class_alias_with_forwarding_constructors_type_substitution_complex() async {
@@ -1569,8 +1508,7 @@
 class M {}
 class MixinApp<U> = Base<List<U>> with M;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class Base<T> {
   Base.ctor(T t, List<T> l);
 }
@@ -1580,18 +1518,6 @@
   synthetic MixinApp.ctor(List<U> t, List<List<U>> l) = Base<T>.ctor;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class Base<T> {
-  Base.ctor(T t, List<T> l);
-}
-class M {
-}
-class alias MixinApp<U> extends Base<List<U>> with M {
-  synthetic MixinApp.ctor(List<U> t, List<List<U>> l) = Base<T>.ctor;
-}
-''');
-    }
   }
 
   test_class_alias_with_mixin_members() async {
@@ -1604,8 +1530,7 @@
   void f() {}
   int x;
 }''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class alias C extends D with E {
   synthetic C() = D;
 }
@@ -1618,497 +1543,260 @@
   void f() {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class alias C extends D with E {
-  synthetic C() = D;
-}
-class D {
-}
-class E {
-  int x;
-  int get a {}
-  void set b(int i) {}
-  void f() {}
-}
-''');
-    }
   }
 
   test_class_constructor_const() async {
     var library = await checkLibrary('class C { const C(); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   const C();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  const C();
-}
-''');
-    }
   }
 
   test_class_constructor_const_external() async {
     var library = await checkLibrary('class C { external const C(); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   external const C();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  external const C();
-}
-''');
-    }
   }
 
   test_class_constructor_explicit_named() async {
     var library = await checkLibrary('class C { C.foo(); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   C.foo();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  C.foo();
-}
-''');
-    }
   }
 
   test_class_constructor_explicit_type_params() async {
     var library = await checkLibrary('class C<T, U> { C(); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T, U> {
   C();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T, U> {
-  C();
-}
-''');
-    }
   }
 
   test_class_constructor_explicit_unnamed() async {
     var library = await checkLibrary('class C { C(); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   C();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  C();
-}
-''');
-    }
   }
 
   test_class_constructor_external() async {
     var library = await checkLibrary('class C { external C(); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   external C();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  external C();
-}
-''');
-    }
   }
 
   test_class_constructor_factory() async {
     var library = await checkLibrary('class C { factory C() => null; }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   factory C();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  factory C();
-}
-''');
-    }
   }
 
   test_class_constructor_field_formal_dynamic_dynamic() async {
     var library =
         await checkLibrary('class C { dynamic x; C(dynamic this.x); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic x;
   C(dynamic this.x);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic x;
-  C(dynamic this.x);
-}
-''');
-    }
   }
 
   test_class_constructor_field_formal_dynamic_typed() async {
     var library = await checkLibrary('class C { dynamic x; C(int this.x); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic x;
   C(int this.x);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic x;
-  C(int this.x);
-}
-''');
-    }
   }
 
   test_class_constructor_field_formal_dynamic_untyped() async {
     var library = await checkLibrary('class C { dynamic x; C(this.x); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic x;
   C(dynamic this.x);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic x;
-  C(dynamic this.x);
-}
-''');
-    }
   }
 
   test_class_constructor_field_formal_multiple_matching_fields() async {
     // This is a compile-time error but it should still analyze consistently.
     var library = await checkLibrary('class C { C(this.x); int x; String x; }',
         allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   int x;
   String x;
   C(int this.x);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  int x;
-  String x;
-  C(int this.x);
-}
-''');
-    }
   }
 
   test_class_constructor_field_formal_no_matching_field() async {
     // This is a compile-time error but it should still analyze consistently.
     var library =
         await checkLibrary('class C { C(this.x); }', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   C(dynamic this.x);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  C(dynamic this.x);
-}
-''');
-    }
   }
 
   test_class_constructor_field_formal_typed_dynamic() async {
     var library = await checkLibrary('class C { num x; C(dynamic this.x); }',
         allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   num x;
   C(dynamic this.x);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  num x;
-  C(dynamic this.x);
-}
-''');
-    }
   }
 
   test_class_constructor_field_formal_typed_typed() async {
     var library = await checkLibrary('class C { num x; C(int this.x); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   num x;
   C(int this.x);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  num x;
-  C(int this.x);
-}
-''');
-    }
   }
 
   test_class_constructor_field_formal_typed_untyped() async {
     var library = await checkLibrary('class C { num x; C(this.x); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   num x;
   C(num this.x);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  num x;
-  C(num this.x);
-}
-''');
-    }
   }
 
   test_class_constructor_field_formal_untyped_dynamic() async {
     var library = await checkLibrary('class C { var x; C(dynamic this.x); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic x;
   C(dynamic this.x);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic x;
-  C(dynamic this.x);
-}
-''');
-    }
   }
 
   test_class_constructor_field_formal_untyped_typed() async {
     var library = await checkLibrary('class C { var x; C(int this.x); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic x;
   C(int this.x);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic x;
-  C(int this.x);
-}
-''');
-    }
   }
 
   test_class_constructor_field_formal_untyped_untyped() async {
     var library = await checkLibrary('class C { var x; C(this.x); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic x;
   C(dynamic this.x);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic x;
-  C(dynamic this.x);
-}
-''');
-    }
   }
 
   test_class_constructor_fieldFormal_named_noDefault() async {
     var library = await checkLibrary('class C { int x; C({this.x}); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   int x;
   C({int this.x});
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  int x;
-  C({int this.x});
-}
-''');
-    }
   }
 
   test_class_constructor_fieldFormal_named_withDefault() async {
     var library = await checkLibrary('class C { int x; C({this.x: 42}); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   int x;
-  C({int this.x});
+  C({int this.x: 42});
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  int x;
-  C({int this.x});
-}
-''');
-    }
   }
 
   test_class_constructor_fieldFormal_optional_noDefault() async {
     var library = await checkLibrary('class C { int x; C([this.x]); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   int x;
   C([int this.x]);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  int x;
-  C([int this.x]);
-}
-''');
-    }
   }
 
   test_class_constructor_fieldFormal_optional_withDefault() async {
     var library = await checkLibrary('class C { int x; C([this.x = 42]); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   int x;
-  C([int this.x]);
+  C([int this.x = 42]);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  int x;
-  C([int this.x]);
-}
-''');
-    }
   }
 
   test_class_constructor_implicit() async {
     var library = await checkLibrary('class C {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-}
-''');
-    }
   }
 
   test_class_constructor_implicit_type_params() async {
     var library = await checkLibrary('class C<T, U> {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T, U> {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T, U> {
-}
-''');
-    }
   }
 
   test_class_constructor_params() async {
     var library = await checkLibrary('class C { C(x, int y); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   C(dynamic x, int y);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  C(dynamic x, int y);
-}
-''');
-    }
   }
 
   test_class_constructors() async {
     var library = await checkLibrary('class C { C.foo(); C.bar(); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   C.foo();
   C.bar();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  C.foo();
-  C.bar();
-}
-''');
-    }
   }
 
   test_class_documented() async {
@@ -2132,23 +1820,13 @@
 /// bbbb
 /// cc
 class C {}''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 /// aaa
 /// bbbb
 /// cc
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-/// aaa
-/// bbbb
-/// cc
-class C {
-}
-''');
-    }
   }
 
   test_class_documented_with_references() async {
@@ -2160,8 +1838,7 @@
 
 class D {}
 class E {}''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 /**
  * Docs referring to [D] and [E]
  */
@@ -2172,40 +1849,17 @@
 class E {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-/**
- * Docs referring to [D] and [E]
- */
-class C {
-}
-class D {
-}
-class E {
-}
-''');
-    }
   }
 
   test_class_documented_with_windows_line_endings() async {
     var library = await checkLibrary('/**\r\n * Docs\r\n */\r\nclass C {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 /**
  * Docs
  */
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-/**
- * Docs
- */
-class C {
-}
-''');
-    }
   }
 
   test_class_documented_withLeadingNotDocumentation() async {
@@ -2226,160 +1880,86 @@
 
   test_class_field_const() async {
     var library = await checkLibrary('class C { static const int i = 0; }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   static const int i = 0;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  static const int i = 0;
-}
-''');
-    }
   }
 
   test_class_field_implicit_type() async {
     var library = await checkLibrary('class C { var x; }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic x;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic x;
-}
-''');
-    }
   }
 
   test_class_field_static() async {
     var library = await checkLibrary('class C { static int i; }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   static int i;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  static int i;
-}
-''');
-    }
   }
 
   test_class_fields() async {
     var library = await checkLibrary('class C { int i; int j; }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   int i;
   int j;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  int i;
-  int j;
-}
-''');
-    }
   }
 
   test_class_getter_abstract() async {
     var library = await checkLibrary('abstract class C { int get x; }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 abstract class C {
   int get x;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-abstract class C {
-  int get x;
-}
-''');
-    }
   }
 
   test_class_getter_external() async {
     var library = await checkLibrary('class C { external int get x; }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   external int get x {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  external int get x {}
-}
-''');
-    }
   }
 
   test_class_getter_implicit_return_type() async {
     var library = await checkLibrary('class C { get x => null; }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic get x {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic get x {}
-}
-''');
-    }
   }
 
   test_class_getter_static() async {
     var library = await checkLibrary('class C { static int get x => null; }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   static int get x {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  static int get x {}
-}
-''');
-    }
   }
 
   test_class_getters() async {
     var library =
         await checkLibrary('class C { int get x => null; get y => null; }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   int get x {}
   dynamic get y {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  int get x {}
-  dynamic get y {}
-}
-''');
-    }
   }
 
   test_class_implicitField_getterFirst() async {
@@ -2389,21 +1969,12 @@
   void set x(int value) {} 
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   int get x {}
   void set x(int value) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  int get x {}
-  void set x(int value) {}
-}
-''');
-    }
   }
 
   test_class_implicitField_setterFirst() async {
@@ -2413,21 +1984,12 @@
   int get x => 0;
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   void set x(int value) {}
   int get x {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  void set x(int value) {}
-  int get x {}
-}
-''');
-    }
   }
 
   test_class_interfaces() async {
@@ -2436,8 +1998,7 @@
 class D {}
 class E {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C implements D, E {
 }
 class D {
@@ -2445,24 +2006,13 @@
 class E {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C implements D, E {
-}
-class D {
-}
-class E {
-}
-''');
-    }
   }
 
   test_class_interfaces_unresolved() async {
     var library = await checkLibrary(
         'class C implements X, Y, Z {} class X {} class Z {}',
         allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C implements X, Z {
 }
 class X {
@@ -2470,137 +2020,102 @@
 class Z {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C implements X, Z {
-}
-class X {
-}
-class Z {
-}
-''');
-    }
   }
 
   test_class_method_abstract() async {
     var library = await checkLibrary('abstract class C { f(); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 abstract class C {
   dynamic f();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-abstract class C {
-  dynamic f();
-}
-''');
-    }
   }
 
   test_class_method_external() async {
     var library = await checkLibrary('class C { external f(); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   external dynamic f() {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  external dynamic f() {}
-}
-''');
-    }
   }
 
   test_class_method_params() async {
     var library = await checkLibrary('class C { f(x, y) {} }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic f(dynamic x, dynamic y) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic f(dynamic x, dynamic y) {}
-}
-''');
-    }
   }
 
   test_class_method_static() async {
     var library = await checkLibrary('class C { static f() {} }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   static dynamic f() {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  static dynamic f() {}
-}
-''');
-    }
   }
 
   test_class_methods() async {
     var library = await checkLibrary('class C { f() {} g() {} }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic f() {}
   dynamic g() {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic f() {}
-  dynamic g() {}
-}
-''');
-    }
   }
 
   test_class_mixins() async {
-    var library = await checkLibrary(
-        'class C extends Object with D, E {} class D {} class E {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
-class C extends Object with D, E {
+    var library = await checkLibrary('''
+class C extends D with E, F, G {}
+class D {}
+class E {}
+class F {}
+class G {}
+''');
+    checkElementText(library, r'''
+class C extends D with E, F, G {
   synthetic C();
 }
 class D {
 }
 class E {
 }
-''');
-    } else {
-      checkElementText(library, r'''
-class C extends Object with D, E {
-  synthetic C();
+class F {
 }
-class D {
-}
-class E {
+class G {
 }
 ''');
-    }
+  }
+
+  test_class_mixins_generic() async {
+    var library = await checkLibrary('''
+class Z extends A with B<int>, C<double> {}
+class A {}
+class B<B1> {}
+class C<C1> {}
+''');
+    checkElementText(library, r'''
+class Z extends A with B<int>, C<double> {
+  synthetic Z();
+}
+class A {
+}
+class B<B1> {
+}
+class C<C1> {
+}
+''');
   }
 
   test_class_mixins_unresolved() async {
     var library = await checkLibrary(
         'class C extends Object with X, Y, Z; class X {} class Z {}',
         allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C extends Object with X, Z {
   synthetic C();
 }
@@ -2609,70 +2124,35 @@
 class Z {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C extends Object with X, Z {
-  synthetic C();
-}
-class X {
-}
-class Z {
-}
-''');
-    }
   }
 
   test_class_setter_abstract() async {
     var library =
         await checkLibrary('abstract class C { void set x(int value); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 abstract class C {
   void set x(int value);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-abstract class C {
-  void set x(int value);
-}
-''');
-    }
   }
 
   test_class_setter_external() async {
     var library =
         await checkLibrary('class C { external void set x(int value); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   external void set x(int value) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  external void set x(int value) {}
-}
-''');
-    }
   }
 
   test_class_setter_implicit_param_type() async {
     var library = await checkLibrary('class C { void set x(value) {} }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   void set x(dynamic value) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  void set x(dynamic value) {}
-}
-''');
-    }
   }
 
   test_class_setter_implicit_return_type() async {
@@ -2694,37 +2174,21 @@
 
   test_class_setter_invalid_no_parameter() async {
     var library = await checkLibrary('class C { void set x() {} }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   void set x() {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  void set x() {}
-}
-''');
-    }
   }
 
   test_class_setter_static() async {
     var library =
         await checkLibrary('class C { static void set x(int value) {} }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   static void set x(int value) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  static void set x(int value) {}
-}
-''');
-    }
   }
 
   test_class_setters() async {
@@ -2779,32 +2243,18 @@
 
   test_class_supertype_unresolved() async {
     var library = await checkLibrary('class C extends D {}', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-}
-''');
-    }
   }
 
   test_class_type_parameters() async {
     var library = await checkLibrary('class C<T, U> {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T, U> {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T, U> {
-}
-''');
-    }
   }
 
   test_class_type_parameters_bound() async {
@@ -2812,70 +2262,38 @@
 class C<T extends Object, U extends D> {}
 class D {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T extends Object, U extends D> {
 }
 class D {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T extends Object, U extends D> {
-}
-class D {
-}
-''');
-    }
   }
 
   test_class_type_parameters_f_bound_complex() async {
     var library = await checkLibrary('class C<T extends List<U>, U> {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T extends List<U>, U> {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T extends List<U>, U> {
-}
-''');
-    }
   }
 
   test_class_type_parameters_f_bound_simple() async {
     var library = await checkLibrary('class C<T extends U, U> {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T extends U, U> {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T extends U, U> {
-}
-''');
-    }
   }
 
   test_classes() async {
     var library = await checkLibrary('class C {} class D {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
 }
 class D {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-}
-class D {
-}
-''');
-    }
   }
 
   test_closure_executable_with_return_type_from_closure() async {
@@ -2885,15 +2303,9 @@
   print(() => () => 0);
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic f() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic f() {}
-''');
-    }
   }
 
   test_closure_generic() async {
@@ -3342,19 +2754,11 @@
     var library = await checkLibrary(r'''
 const V = const C.named();
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 const dynamic V = const
         C/*location: null*/.
         named/*location: null*/();
 ''');
-    } else {
-      checkElementText(library, r'''
-const dynamic V = const
-        C/*location: null*/.
-        named/*location: null*/();
-''');
-    }
   }
 
   test_const_invokeConstructor_named_unresolved3() async {
@@ -3391,44 +2795,25 @@
 import 'a.dart' as p;
 const V = const p.C.named();
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart' as p;
 const dynamic V = const
         p/*location: test.dart;p*/.
         C/*location: null*/.
         named/*location: null*/();
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart' as p;
-const dynamic V = const
-        p/*location: test.dart;p*/.
-        C/*location: null*/.
-        named/*location: null*/();
-''');
-    }
   }
 
   test_const_invokeConstructor_named_unresolved5() async {
     var library = await checkLibrary(r'''
 const V = const p.C.named();
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 const dynamic V = const
         p/*location: null*/.
         C/*location: null*/.
         named/*location: null*/();
 ''');
-    } else {
-      checkElementText(library, r'''
-const dynamic V = const
-        p/*location: null*/.
-        C/*location: null*/.
-        named/*location: null*/();
-''');
-    }
   }
 
   test_const_invokeConstructor_named_unresolved6() async {
@@ -3535,17 +2920,10 @@
     var library = await checkLibrary(r'''
 const V = const C();
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 const dynamic V = const
         C/*location: null*/();
 ''');
-    } else {
-      checkElementText(library, r'''
-const dynamic V = const
-        C/*location: null*/();
-''');
-    }
   }
 
   test_const_invokeConstructor_unnamed_unresolved2() async {
@@ -3555,40 +2933,23 @@
 import 'a.dart' as p;
 const V = const p.C();
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart' as p;
 const dynamic V = const
         p/*location: test.dart;p*/.
         C/*location: null*/();
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart' as p;
-const dynamic V = const
-        p/*location: test.dart;p*/.
-        C/*location: null*/();
-''');
-    }
   }
 
   test_const_invokeConstructor_unnamed_unresolved3() async {
     var library = await checkLibrary(r'''
 const V = const p.C();
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 const dynamic V = const
         p/*location: null*/.
         C/*location: null*/();
 ''');
-    } else {
-      checkElementText(library, r'''
-const dynamic V = const
-        p/*location: null*/.
-        C/*location: null*/();
-''');
-    }
   }
 
   test_const_length_ofClassConstField() async {
@@ -3598,8 +2959,7 @@
 }
 const int v = C.F.length;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   static const String F = '';
 }
@@ -3608,17 +2968,6 @@
         F/*location: test.dart;C;F?*/.
         length/*location: dart:core;String;length?*/;
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  static const String F = '';
-}
-const int v =
-        C/*location: test.dart;C*/.
-        F/*location: test.dart;C;F?*/.
-        length/*location: dart:core;String;length?*/;
-''');
-    }
   }
 
   test_const_length_ofClassConstField_imported() async {
@@ -3631,23 +2980,13 @@
 import 'a.dart';
 const int v = C.F.length;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart';
 const int v =
         C/*location: a.dart;C*/.
         F/*location: a.dart;C;F?*/.
         length/*location: dart:core;String;length?*/;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart';
-const int v =
-        C/*location: a.dart;C*/.
-        F/*location: a.dart;C;F?*/.
-        length/*location: dart:core;String;length?*/;
-''');
-    }
   }
 
   test_const_length_ofClassConstField_imported_withPrefix() async {
@@ -3660,8 +2999,7 @@
 import 'a.dart' as p;
 const int v = p.C.F.length;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart' as p;
 const int v =
         p/*location: test.dart;p*/.
@@ -3669,16 +3007,6 @@
         F/*location: a.dart;C;F?*/.
         length/*location: dart:core;String;length?*/;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart' as p;
-const int v =
-        p/*location: test.dart;p*/.
-        C/*location: a.dart;C*/.
-        F/*location: a.dart;C;F?*/.
-        length/*location: dart:core;String;length?*/;
-''');
-    }
   }
 
   test_const_length_ofStringLiteral() async {
@@ -3686,10 +3014,17 @@
 const v = 'abc'.length;
 ''');
     if (isStrongMode) {
-      checkElementText(library, r'''
+      if (isSharedFrontEnd) {
+        checkElementText(library, r'''
+const int v = 'abc'.
+        length/*location: dart:core;String;length?*/;
+''');
+      } else {
+        checkElementText(library, r'''
 const dynamic v/*error: instanceGetter*/ = 'abc'.
         length/*location: dart:core;String;length?*/;
 ''');
+      }
     } else {
       checkElementText(library, r'''
 const dynamic v = 'abc'.
@@ -3704,12 +3039,21 @@
 const v = S.length;
 ''');
     if (isStrongMode) {
-      checkElementText(library, r'''
+      if (isSharedFrontEnd) {
+        checkElementText(library, r'''
+const String S = 'abc';
+const int v =
+        S/*location: test.dart;S?*/.
+        length/*location: dart:core;String;length?*/;
+''');
+      } else {
+        checkElementText(library, r'''
 const String S = 'abc';
 const dynamic v/*error: instanceGetter*/ =
         S/*location: test.dart;S?*/.
         length/*location: dart:core;String;length?*/;
 ''');
+      }
     } else {
       checkElementText(library, r'''
 const String S = 'abc';
@@ -3808,23 +3152,14 @@
 }
 int foo() => 42;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   final dynamic x;
-  const C({dynamic this.x});
+  const C({dynamic this.x:
+        foo/*location: test.dart;foo*/});
 }
 int foo() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  final dynamic x;
-  const C({dynamic this.x});
-}
-int foo() {}
-''');
-    }
   }
 
   test_const_parameterDefaultValue_initializingFormal_named() async {
@@ -3834,21 +3169,12 @@
   const C({this.x: 1 + 2});
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   final dynamic x;
-  const C({dynamic this.x});
+  const C({dynamic this.x: 1 + 2});
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  final dynamic x;
-  const C({dynamic this.x});
-}
-''');
-    }
   }
 
   test_const_parameterDefaultValue_initializingFormal_positional() async {
@@ -3858,21 +3184,12 @@
   const C([this.x = 1 + 2]);
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   final dynamic x;
-  const C([dynamic this.x]);
+  const C([dynamic this.x = 1 + 2]);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  final dynamic x;
-  const C([dynamic this.x]);
-}
-''');
-    }
   }
 
   test_const_parameterDefaultValue_normal() async {
@@ -3886,8 +3203,7 @@
   void methodNamedWithoutDefault({p}) {}
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   const C.positional([dynamic p = 1 + 2]);
   const C.named({dynamic p: 1 + 2});
@@ -3897,18 +3213,6 @@
   void methodNamedWithoutDefault({dynamic p}) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  const C.positional([dynamic p = 1 + 2]);
-  const C.named({dynamic p: 1 + 2});
-  void methodPositional([dynamic p = 1 + 2]) {}
-  void methodPositionalWithoutDefault([dynamic p]) {}
-  void methodNamed({dynamic p: 1 + 2}) {}
-  void methodNamedWithoutDefault({dynamic p}) {}
-}
-''');
-    }
   }
 
   test_const_reference_staticField() async {
@@ -4419,17 +3723,10 @@
     var library = await checkLibrary(r'''
 const V = foo;
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 const dynamic V =
         foo/*location: null*/;
 ''');
-    } else {
-      checkElementText(library, r'''
-const dynamic V =
-        foo/*location: null*/;
-''');
-    }
   }
 
   test_const_reference_unresolved_prefix1() async {
@@ -4437,23 +3734,13 @@
 class C {}
 const v = C.foo;
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
 }
 const dynamic v =
         C/*location: test.dart;C*/.
         foo/*location: null*/;
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-}
-const dynamic v =
-        C/*location: test.dart;C*/.
-        foo/*location: null*/;
-''');
-    }
   }
 
   test_const_reference_unresolved_prefix2() async {
@@ -4464,23 +3751,13 @@
 import 'foo.dart' as p;
 const v = p.C.foo;
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'foo.dart' as p;
 const dynamic v =
         p/*location: test.dart;p*/.
         C/*location: foo.dart;C*/.
         foo/*location: null*/;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'foo.dart' as p;
-const dynamic v =
-        p/*location: test.dart;p*/.
-        C/*location: foo.dart;C*/.
-        foo/*location: null*/;
-''');
-    }
   }
 
   test_const_topLevel_binary() async {
@@ -4636,6 +3913,20 @@
     }
   }
 
+  test_const_topLevel_parenthesis() async {
+    var library = await checkLibrary(r'''
+const int v1 = (1 + 2) * 3;
+const int v2 = -(1 + 2);
+const int v3 = ('aaa' + 'bbb').length;
+''');
+    checkElementText(library, r'''
+const int v1 = (1 + 2) * 3;
+const int v2 = -(1 + 2);
+const int v3 = ('aaa' + 'bbb').
+        length/*location: dart:core;String;length?*/;
+''');
+  }
+
   test_const_topLevel_prefix() async {
     var library = await checkLibrary(r'''
 const vNotEqual = 1 != 2;
@@ -4644,12 +3935,21 @@
 const vComplement = ~1;
 ''');
     if (isStrongMode) {
-      checkElementText(library, r'''
+      if (isSharedFrontEnd) {
+        checkElementText(library, r'''
+const bool vNotEqual = !(1 == 2);
+const bool vNot = !true;
+const int vNegate = -1;
+const int vComplement = ~1;
+''');
+      } else {
+        checkElementText(library, r'''
 const bool vNotEqual = 1 != 2;
 const bool vNot = !true;
 const int vNegate = -1;
 const int vComplement = ~1;
 ''');
+      }
     } else {
       checkElementText(library, r'''
 const dynamic vNotEqual = 1 != 2;
@@ -4664,30 +3964,18 @@
     var library = await checkLibrary(r'''
 const vSuper = super;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 const dynamic vSuper = super;
 ''');
-    } else {
-      checkElementText(library, r'''
-const dynamic vSuper = super;
-''');
-    }
   }
 
   test_const_topLevel_this() async {
     var library = await checkLibrary(r'''
 const vThis = this;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 const dynamic vThis = this;
 ''');
-    } else {
-      checkElementText(library, r'''
-const dynamic vThis = this;
-''');
-    }
   }
 
   test_const_topLevel_typedList() async {
@@ -4829,9 +4117,16 @@
 const v = const [1, 2, 3];
 ''');
     if (isStrongMode) {
-      checkElementText(library, r'''
+      if (isSharedFrontEnd) {
+        checkElementText(library, r'''
+const List<int> v = const <
+        int/*location: dart:core;int*/>[1, 2, 3];
+''');
+      } else {
+        checkElementText(library, r'''
 const List<int> v = const [1, 2, 3];
 ''');
+      }
     } else {
       checkElementText(library, r'''
 const dynamic v = const [1, 2, 3];
@@ -4844,9 +4139,17 @@
 const v = const {0: 'aaa', 1: 'bbb', 2: 'ccc'};
 ''');
     if (isStrongMode) {
-      checkElementText(library, r'''
+      if (isSharedFrontEnd) {
+        checkElementText(library, r'''
+const Map<int, String> v = const <
+        int/*location: dart:core;int*/,
+        String/*location: dart:core;String*/>{0: 'aaa', 1: 'bbb', 2: 'ccc'};
+''');
+      } else {
+        checkElementText(library, r'''
 const Map<int, String> v = const {0: 'aaa', 1: 'bbb', 2: 'ccc'};
 ''');
+      }
     } else {
       checkElementText(library, r'''
 const dynamic v = const {0: 'aaa', 1: 'bbb', 2: 'ccc'};
@@ -4923,8 +4226,7 @@
   static const b = null;
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   static const dynamic a =
         C/*location: test.dart;C*/.
@@ -4932,16 +4234,6 @@
   static const dynamic b = null;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  static const dynamic a =
-        C/*location: test.dart;C*/.
-        b/*location: test.dart;C;b?*/;
-  static const dynamic b = null;
-}
-''');
-    }
   }
 
   test_constExpr_pushReference_staticMethod_simpleIdentifier() async {
@@ -4980,8 +4272,7 @@
    */
   C();
 }''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   /**
    * Docs
@@ -4989,16 +4280,6 @@
   C();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  /**
-   * Docs
-   */
-  C();
-}
-''');
-    }
   }
 
   test_constructor_initializers_assertInvocation() async {
@@ -5007,21 +4288,12 @@
   const C(int x) : assert(x >= 42);
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   const C(int x) : assert(
         x/*location: test.dart;C;;x*/ >= 42);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  const C(int x) : assert(
-        x/*location: test.dart;C;;x*/ >= 42);
-}
-''');
-    }
   }
 
   test_constructor_initializers_assertInvocation_message() async {
@@ -5030,21 +4302,12 @@
   const C(int x) : assert(x >= 42, 'foo');
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   const C(int x) : assert(
         x/*location: test.dart;C;;x*/ >= 42, 'foo');
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  const C(int x) : assert(
-        x/*location: test.dart;C;;x*/ >= 42, 'foo');
-}
-''');
-    }
   }
 
   test_constructor_initializers_field() async {
@@ -5054,23 +4317,13 @@
   const C() : x = 42;
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   final dynamic x;
   const C() :
         x/*location: test.dart;C;x*/ = 42;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  final dynamic x;
-  const C() :
-        x/*location: test.dart;C;x*/ = 42;
-}
-''');
-    }
   }
 
   test_constructor_initializers_field_notConst() async {
@@ -5082,8 +4335,7 @@
 }
 int foo() => 42;
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   final dynamic x;
   const C() :
@@ -5092,17 +4344,6 @@
 }
 int foo() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  final dynamic x;
-  const C() :
-        x/*location: test.dart;C;x*/ =
-        $$invalidConstExpr$$/*location: null*/;
-}
-int foo() {}
-''');
-    }
   }
 
   test_constructor_initializers_field_withParameter() async {
@@ -5112,8 +4353,7 @@
   const C(int p) : x = 1 + p;
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   final dynamic x;
   const C(int p) :
@@ -5121,16 +4361,6 @@
         p/*location: test.dart;C;;p*/;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  final dynamic x;
-  const C(int p) :
-        x/*location: test.dart;C;x*/ = 1 +
-        p/*location: test.dart;C;;p*/;
-}
-''');
-    }
   }
 
   test_constructor_initializers_superInvocation_named() async {
@@ -5142,8 +4372,7 @@
   const C() : super.aaa(42);
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class A {
   const A.aaa(int p);
 }
@@ -5152,17 +4381,6 @@
         aaa/*location: test.dart;A;aaa*/(42);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class A {
-  const A.aaa(int p);
-}
-class C extends A {
-  const C() : super.
-        aaa/*location: test.dart;A;aaa*/(42);
-}
-''');
-    }
   }
 
   test_constructor_initializers_superInvocation_namedExpression() async {
@@ -5174,8 +4392,7 @@
   const C() : super.aaa(1, b: 2);
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class A {
   const A.aaa(dynamic a, {int b});
 }
@@ -5185,18 +4402,6 @@
         b/*location: null*/: 2);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class A {
-  const A.aaa(dynamic a, {int b});
-}
-class C extends A {
-  const C() : super.
-        aaa/*location: test.dart;A;aaa*/(1,
-        b/*location: null*/: 2);
-}
-''');
-    }
   }
 
   test_constructor_initializers_superInvocation_unnamed() async {
@@ -5208,8 +4413,7 @@
   const C.ccc() : super(42);
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class A {
   const A(int p);
 }
@@ -5217,16 +4421,6 @@
   const C.ccc() : super(42);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class A {
-  const A(int p);
-}
-class C extends A {
-  const C.ccc() : super(42);
-}
-''');
-    }
   }
 
   test_constructor_initializers_thisInvocation_named() async {
@@ -5236,23 +4430,13 @@
   const C.named(int a, String b);
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   const C() = C.named : this.
         named/*location: test.dart;C;named*/(1, 'bbb');
   const C.named(int a, String b);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  const C() = C.named : this.
-        named/*location: test.dart;C;named*/(1, 'bbb');
-  const C.named(int a, String b);
-}
-''');
-    }
   }
 
   test_constructor_initializers_thisInvocation_namedExpression() async {
@@ -5262,8 +4446,7 @@
   const C.named(a, {int b});
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   const C() = C.named : this.
         named/*location: test.dart;C;named*/(1,
@@ -5271,16 +4454,6 @@
   const C.named(dynamic a, {int b});
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  const C() = C.named : this.
-        named/*location: test.dart;C;named*/(1,
-        b/*location: null*/: 2);
-  const C.named(dynamic a, {int b});
-}
-''');
-    }
   }
 
   test_constructor_initializers_thisInvocation_unnamed() async {
@@ -5290,21 +4463,12 @@
   const C(int a, String b);
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   const C.named() = C : this(1, 'bbb');
   const C(int a, String b);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  const C.named() = C : this(1, 'bbb');
-  const C(int a, String b);
-}
-''');
-    }
   }
 
   test_constructor_redirected_factory_named() async {
@@ -5317,8 +4481,7 @@
   D.named() : super._();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   factory C() = D.named;
   C._();
@@ -5327,17 +4490,6 @@
   D.named();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  factory C() = D.named;
-  C._();
-}
-class D extends C {
-  D.named();
-}
-''');
-    }
   }
 
   test_constructor_redirected_factory_named_generic() async {
@@ -5350,8 +4502,7 @@
   D.named() : super._();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T, U> {
   factory C() = D<U, T>.named;
   C._();
@@ -5360,17 +4511,6 @@
   D.named();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T, U> {
-  factory C() = D<U, T>.named;
-  C._();
-}
-class D<T, U> extends C<U, T> {
-  D.named();
-}
-''');
-    }
   }
 
   test_constructor_redirected_factory_named_imported() async {
@@ -5387,23 +4527,13 @@
   C._();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'foo.dart';
 class C {
   factory C() = D.named;
   C._();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'foo.dart';
-class C {
-  factory C() = D.named;
-  C._();
-}
-''');
-    }
   }
 
   test_constructor_redirected_factory_named_imported_generic() async {
@@ -5420,23 +4550,13 @@
   C._();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'foo.dart';
 class C<T, U> {
   factory C() = D<U, T>.named;
   C._();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'foo.dart';
-class C<T, U> {
-  factory C() = D<U, T>.named;
-  C._();
-}
-''');
-    }
   }
 
   test_constructor_redirected_factory_named_prefixed() async {
@@ -5453,23 +4573,13 @@
   C._();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'foo.dart' as foo;
 class C {
   factory C() = D.named;
   C._();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'foo.dart' as foo;
-class C {
-  factory C() = D.named;
-  C._();
-}
-''');
-    }
   }
 
   test_constructor_redirected_factory_named_prefixed_generic() async {
@@ -5486,23 +4596,13 @@
   C._();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'foo.dart' as foo;
 class C<T, U> {
   factory C() = D<U, T>.named;
   C._();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'foo.dart' as foo;
-class C<T, U> {
-  factory C() = D<U, T>.named;
-  C._();
-}
-''');
-    }
   }
 
   test_constructor_redirected_factory_named_unresolved_class() async {
@@ -5511,19 +4611,11 @@
   factory C() = D.named<E>;
 }
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<E> {
   factory C();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<E> {
-  factory C();
-}
-''');
-    }
   }
 
   test_constructor_redirected_factory_named_unresolved_constructor() async {
@@ -5533,23 +4625,13 @@
   factory C() = D.named<E>;
 }
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class D {
 }
 class C<E> {
   factory C();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class D {
-}
-class C<E> {
-  factory C();
-}
-''');
-    }
   }
 
   test_constructor_redirected_factory_unnamed() async {
@@ -5562,8 +4644,7 @@
   D() : super._();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   factory C() = D;
   C._();
@@ -5572,17 +4653,6 @@
   D();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  factory C() = D;
-  C._();
-}
-class D extends C {
-  D();
-}
-''');
-    }
   }
 
   test_constructor_redirected_factory_unnamed_generic() async {
@@ -5595,8 +4665,7 @@
   D() : super._();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T, U> {
   factory C() = D<U, T>;
   C._();
@@ -5605,17 +4674,6 @@
   D();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T, U> {
-  factory C() = D<U, T>;
-  C._();
-}
-class D<T, U> extends C<U, T> {
-  D();
-}
-''');
-    }
   }
 
   test_constructor_redirected_factory_unnamed_imported() async {
@@ -5632,23 +4690,13 @@
   C._();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'foo.dart';
 class C {
   factory C() = D;
   C._();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'foo.dart';
-class C {
-  factory C() = D;
-  C._();
-}
-''');
-    }
   }
 
   test_constructor_redirected_factory_unnamed_imported_generic() async {
@@ -5665,23 +4713,13 @@
   C._();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'foo.dart';
 class C<T, U> {
   factory C() = D<U, T>;
   C._();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'foo.dart';
-class C<T, U> {
-  factory C() = D<U, T>;
-  C._();
-}
-''');
-    }
   }
 
   test_constructor_redirected_factory_unnamed_prefixed() async {
@@ -5698,23 +4736,13 @@
   C._();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'foo.dart' as foo;
 class C {
   factory C() = D;
   C._();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'foo.dart' as foo;
-class C {
-  factory C() = D;
-  C._();
-}
-''');
-    }
   }
 
   test_constructor_redirected_factory_unnamed_prefixed_generic() async {
@@ -5731,23 +4759,13 @@
   C._();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'foo.dart' as foo;
 class C<T, U> {
   factory C() = D<U, T>;
   C._();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'foo.dart' as foo;
-class C<T, U> {
-  factory C() = D<U, T>;
-  C._();
-}
-''');
-    }
   }
 
   test_constructor_redirected_factory_unnamed_unresolved() async {
@@ -5756,19 +4774,11 @@
   factory C() = D<E>;
 }
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<E> {
   factory C();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<E> {
-  factory C();
-}
-''');
-    }
   }
 
   test_constructor_redirected_thisInvocation_named() async {
@@ -5778,21 +4788,12 @@
   C() : this.named();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   C.named();
   C() = C.named;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  C.named();
-  C() = C.named;
-}
-''');
-    }
   }
 
   test_constructor_redirected_thisInvocation_named_generic() async {
@@ -5802,21 +4803,12 @@
   C() : this.named();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T> {
   C.named();
   C() = C<T>.named;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T> {
-  C.named();
-  C() = C<T>.named;
-}
-''');
-    }
   }
 
   test_constructor_redirected_thisInvocation_unnamed() async {
@@ -5826,21 +4818,12 @@
   C.named() : this();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   C();
   C.named() = C;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  C();
-  C.named() = C;
-}
-''');
-    }
   }
 
   test_constructor_redirected_thisInvocation_unnamed_generic() async {
@@ -5850,21 +4833,12 @@
   C.named() : this();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T> {
   C();
   C.named() = C<T>;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T> {
-  C();
-  C.named() = C<T>;
-}
-''');
-    }
   }
 
   test_constructor_withCycles_const() async {
@@ -5878,8 +4852,7 @@
   const D() : x = const C();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   final dynamic x;
   const C() :
@@ -5893,22 +4866,6 @@
         C/*location: test.dart;C*/();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  final dynamic x;
-  const C() :
-        x/*location: test.dart;C;x*/ = const
-        D/*location: test.dart;D*/();
-}
-class D {
-  final dynamic x;
-  const D() :
-        x/*location: test.dart;D;x*/ = const
-        C/*location: test.dart;C*/();
-}
-''');
-    }
   }
 
   test_constructor_withCycles_nonConst() async {
@@ -5922,8 +4879,7 @@
   D() : x = new C();
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   final dynamic x;
   C();
@@ -5933,18 +4889,6 @@
   D();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  final dynamic x;
-  C();
-}
-class D {
-  final dynamic x;
-  D();
-}
-''');
-    }
   }
 
   test_defaultValue_refersToGenericClass_constructor() async {
@@ -5956,8 +4900,7 @@
   const C([B<T> b = const B()]);
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class B<T> {
   const B();
 }
@@ -5966,17 +4909,6 @@
         B/*location: test.dart;B*/()]);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class B<T> {
-  const B();
-}
-class C<T> {
-  const C([B<T> b = const
-        B/*location: test.dart;B*/()]);
-}
-''');
-    }
   }
 
   test_defaultValue_refersToGenericClass_constructor2() async {
@@ -5989,8 +4921,7 @@
   const C([A<T> a = const B()]);
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 abstract class A<T> {
 }
 class B<T> implements A<T> {
@@ -6001,19 +4932,6 @@
         B/*location: test.dart;B*/()]);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-abstract class A<T> {
-}
-class B<T> implements A<T> {
-  const B();
-}
-class C<T> implements A<Iterable<T>> {
-  const C([A<T> a = const
-        B/*location: test.dart;B*/()]);
-}
-''');
-    }
   }
 
   test_defaultValue_refersToGenericClass_functionG() async {
@@ -6023,23 +4941,13 @@
 }
 void foo<T>([B<T> b = const B()]) {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class B<T> {
   const B();
 }
 void foo<T>([B<T> b = const
         B/*location: test.dart;B*/()]) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-class B<T> {
-  const B();
-}
-void foo<T>([B<T> b = const
-        B/*location: test.dart;B*/()]) {}
-''');
-    }
   }
 
   test_defaultValue_refersToGenericClass_methodG() async {
@@ -6051,8 +4959,7 @@
   void foo<T>([B<T> b = const B()]) {}
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class B<T> {
   const B();
 }
@@ -6061,17 +4968,6 @@
         B/*location: test.dart;B*/()]) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class B<T> {
-  const B();
-}
-class C {
-  void foo<T>([B<T> b = const
-        B/*location: test.dart;B*/()]) {}
-}
-''');
-    }
   }
 
   test_defaultValue_refersToGenericClass_methodG_classG() async {
@@ -6083,8 +4979,7 @@
   void foo<E2>([B<E1, E2> b = const B()]) {}
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class B<T1, T2> {
   const B();
 }
@@ -6093,17 +4988,6 @@
         B/*location: test.dart;B*/()]) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class B<T1, T2> {
-  const B();
-}
-class C<E1> {
-  void foo<E2>([B<E1, E2> b = const
-        B/*location: test.dart;B*/()]) {}
-}
-''');
-    }
   }
 
   test_defaultValue_refersToGenericClass_methodNG() async {
@@ -6115,8 +4999,7 @@
   void foo([B<T> b = const B()]) {}
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class B<T> {
   const B();
 }
@@ -6125,17 +5008,6 @@
         B/*location: test.dart;B*/()]) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class B<T> {
-  const B();
-}
-class C<T> {
-  void foo([B<T> b = const
-        B/*location: test.dart;B*/()]) {}
-}
-''');
-    }
   }
 
   test_enum_documented() async {
@@ -6145,8 +5017,7 @@
  * Docs
  */
 enum E { v }''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 /**
  * Docs
  */
@@ -6156,18 +5027,6 @@
   static const E v;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-/**
- * Docs
- */
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v;
-}
-''');
-    }
   }
 
   test_enum_value_documented() async {
@@ -6178,8 +5037,7 @@
    */
   v
 }''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 enum E {
   synthetic final int index;
   synthetic static const List<E> values;
@@ -6189,24 +5047,11 @@
   static const E v;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  /**
-   * Docs
-   */
-  static const E v;
-}
-''');
-    }
   }
 
   test_enum_values() async {
     var library = await checkLibrary('enum E { v1, v2 }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 enum E {
   synthetic final int index;
   synthetic static const List<E> values;
@@ -6214,22 +5059,11 @@
   static const E v2;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v1;
-  static const E v2;
-}
-''');
-    }
   }
 
   test_enums() async {
     var library = await checkLibrary('enum E1 { v1 } enum E2 { v2 }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 enum E1 {
   synthetic final int index;
   synthetic static const List<E1> values;
@@ -6241,20 +5075,6 @@
   static const E2 v2;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-enum E1 {
-  synthetic final int index;
-  synthetic static const List<E1> values;
-  static const E1 v1;
-}
-enum E2 {
-  synthetic final int index;
-  synthetic static const List<E2> values;
-  static const E2 v2;
-}
-''');
-    }
   }
 
   test_error_extendsEnum() async {
@@ -6277,8 +5097,7 @@
 
 class D = Object with M, E;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 enum E {
   synthetic final int index;
   synthetic static const List<E> values;
@@ -6302,32 +5121,6 @@
   synthetic D() = Object;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E a;
-  static const E b;
-  static const E c;
-}
-class M {
-}
-class A {
-  dynamic foo() {}
-}
-class B implements M {
-  dynamic foo() {}
-}
-class C extends Object with M {
-  synthetic C();
-  dynamic foo() {}
-}
-class alias D extends Object with M {
-  synthetic D() = Object;
-}
-''');
-    }
   }
 
   test_executable_parameter_type_typedef() async {
@@ -6335,46 +5128,27 @@
 typedef F(int p);
 main(F f) {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef dynamic F(int p);
 dynamic main(F f) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef dynamic F(int p);
-dynamic main(F f) {}
-''');
-    }
   }
 
   test_export_class() async {
     addLibrarySource('/a.dart', 'class C {}');
     var library = await checkLibrary('export "a.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'a.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'a.dart';
-''');
-    }
   }
 
   test_export_class_type_alias() async {
     addLibrarySource(
         '/a.dart', 'class C {} exends _D with _E; class _D {} class _E {}');
     var library = await checkLibrary('export "a.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'a.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'a.dart';
-''');
-    }
   }
 
   test_export_configurations_useDefault() async {
@@ -6387,16 +5161,9 @@
   if (dart.library.io) 'foo_io.dart'
   if (dart.library.html) 'foo_html.dart';
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'foo.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'foo.dart';
-''');
-    }
-    expect(library.exports[0].uri, 'foo.dart');
     expect(library.exports[0].exportedLibrary.source.shortName, 'foo.dart');
   }
 
@@ -6411,16 +5178,9 @@
   if (dart.library.io) 'foo_io.dart'
   if (dart.library.html) 'foo_html.dart';
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'foo_io.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'foo_io.dart';
-''');
-    }
-    expect(library.exports[0].uri, 'foo_io.dart');
     expect(library.exports[0].exportedLibrary.source.shortName, 'foo_io.dart');
   }
 
@@ -6435,161 +5195,94 @@
   if (dart.library.io) 'foo_io.dart'
   if (dart.library.html) 'foo_html.dart';
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'foo_html.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'foo_html.dart';
-''');
-    }
     ExportElement export = library.exports[0];
-    expect(export.uri, 'foo_html.dart');
     expect(export.exportedLibrary.source.shortName, 'foo_html.dart');
   }
 
   test_export_function() async {
     addLibrarySource('/a.dart', 'f() {}');
     var library = await checkLibrary('export "a.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'a.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'a.dart';
-''');
-    }
   }
 
   test_export_getter() async {
     addLibrarySource('/a.dart', 'get f() => null;');
     var library = await checkLibrary('export "a.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'a.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'a.dart';
-''');
-    }
   }
 
   test_export_hide() async {
     addLibrary('dart:async');
     var library =
         await checkLibrary('export "dart:async" hide Stream, Future;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'dart:async' hide Stream, Future;
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'dart:async' hide Stream, Future;
-''');
-    }
   }
 
   test_export_multiple_combinators() async {
     addLibrary('dart:async');
     var library =
         await checkLibrary('export "dart:async" hide Stream show Future;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'dart:async' hide Stream show Future;
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'dart:async' hide Stream show Future;
-''');
-    }
   }
 
   test_export_setter() async {
     addLibrarySource('/a.dart', 'void set f(value) {}');
     var library = await checkLibrary('export "a.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'a.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'a.dart';
-''');
-    }
   }
 
   test_export_show() async {
     addLibrary('dart:async');
     var library =
         await checkLibrary('export "dart:async" show Future, Stream;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'dart:async' show Future, Stream;
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'dart:async' show Future, Stream;
-''');
-    }
   }
 
   test_export_typedef() async {
     addLibrarySource('/a.dart', 'typedef F();');
     var library = await checkLibrary('export "a.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'a.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'a.dart';
-''');
-    }
   }
 
   test_export_variable() async {
     addLibrarySource('/a.dart', 'var x;');
     var library = await checkLibrary('export "a.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'a.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'a.dart';
-''');
-    }
   }
 
   test_export_variable_const() async {
     addLibrarySource('/a.dart', 'const x = 0;');
     var library = await checkLibrary('export "a.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'a.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'a.dart';
-''');
-    }
   }
 
   test_export_variable_final() async {
     addLibrarySource('/a.dart', 'final x = 0;');
     var library = await checkLibrary('export "a.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'a.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'a.dart';
-''');
-    }
   }
 
   test_exportImport_configurations_useDefault() async {
@@ -6606,19 +5299,11 @@
 import 'bar.dart';
 class B extends A {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'bar.dart';
 class B extends A {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'bar.dart';
-class B extends A {
-}
-''');
-    }
     var typeA = library.definingCompilationUnit.getType('B').supertype;
     expect(typeA.element.source.shortName, 'foo.dart');
   }
@@ -6638,19 +5323,11 @@
 import 'bar.dart';
 class B extends A {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'bar.dart';
 class B extends A {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'bar.dart';
-class B extends A {
-}
-''');
-    }
     var typeA = library.definingCompilationUnit.getType('B').supertype;
     expect(typeA.element.source.shortName, 'foo_io.dart');
   }
@@ -6659,17 +5336,10 @@
     addLibrarySource('/a.dart', 'library a;');
     addLibrarySource('/b.dart', 'library b;');
     var library = await checkLibrary('export "a.dart"; export "b.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'a.dart';
 export 'b.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'a.dart';
-export 'b.dart';
-''');
-    }
   }
 
   test_expr_invalid_typeParameter_asPrefix() async {
@@ -6679,21 +5349,12 @@
   final f = T.k;
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T> {
   final dynamic f =
         $$invalidConstExpr$$/*location: null*/;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T> {
-  final dynamic f =
-        $$invalidConstExpr$$/*location: null*/;
-}
-''');
-    }
   }
 
   test_field_covariant() async {
@@ -6701,19 +5362,11 @@
 class C {
   covariant int x;
 }''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   covariant int x;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  covariant int x;
-}
-''');
-    }
   }
 
   test_field_documented() async {
@@ -6724,8 +5377,7 @@
    */
   var x;
 }''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   /**
    * Docs
@@ -6733,16 +5385,6 @@
   dynamic x;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  /**
-   * Docs
-   */
-  dynamic x;
-}
-''');
-    }
   }
 
   test_field_formal_param_inferred_type_implicit() async {
@@ -6773,19 +5415,11 @@
 
   test_field_inferred_type_nonStatic_explicit_initialized() async {
     var library = await checkLibrary('class C { num v = 0; }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   num v;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  num v;
-}
-''');
-    }
   }
 
   test_field_inferred_type_nonStatic_implicit_initialized() async {
@@ -7008,17 +5642,10 @@
 import 'dart:async';
 Future f() async {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'dart:async';
 Future<dynamic> f() async {}
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'dart:async';
-Future<dynamic> f() async {}
-''');
-    }
   }
 
   test_function_asyncStar() async {
@@ -7026,17 +5653,10 @@
 import 'dart:async';
 Stream f() async* {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'dart:async';
 Stream<dynamic> f() async* {}
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'dart:async';
-Stream<dynamic> f() async* {}
-''');
-    }
   }
 
   test_function_documented() async {
@@ -7046,63 +5666,41 @@
  * Docs
  */
 f() {}''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
+/**
+ * Docs
+ */
 dynamic f() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic f() {}
-''');
-    }
   }
 
   test_function_entry_point() async {
     var library = await checkLibrary('main() {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic main() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic main() {}
-''');
-    }
   }
 
   test_function_entry_point_in_export() async {
     addLibrarySource('/a.dart', 'library a; main() {}');
     var library = await checkLibrary('export "a.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'a.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'a.dart';
-''');
-    }
   }
 
   test_function_entry_point_in_export_hidden() async {
     addLibrarySource('/a.dart', 'library a; main() {}');
     var library = await checkLibrary('export "a.dart" hide main;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'a.dart' hide main;
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'a.dart' hide main;
-''');
-    }
   }
 
   test_function_entry_point_in_part() async {
     addSource('/a.dart', 'part of my.lib; main() {}');
     var library = await checkLibrary('library my.lib; part "a.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 library my.lib;
 part 'a.dart';
 --------------------
@@ -7110,213 +5708,113 @@
 
 dynamic main() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-library my.lib;
-part 'a.dart';
---------------------
-unit: a.dart
-
-dynamic main() {}
-''');
-    }
   }
 
   test_function_external() async {
     var library = await checkLibrary('external f();');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 external dynamic f() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-external dynamic f() {}
-''');
-    }
   }
 
   test_function_parameter_final() async {
     var library = await checkLibrary('f(final x) {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic f(final dynamic x) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic f(final dynamic x) {}
-''');
-    }
   }
 
   test_function_parameter_kind_named() async {
     var library = await checkLibrary('f({x}) {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic f({dynamic x}) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic f({dynamic x}) {}
-''');
-    }
   }
 
   test_function_parameter_kind_positional() async {
     var library = await checkLibrary('f([x]) {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic f([dynamic x]) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic f([dynamic x]) {}
-''');
-    }
   }
 
   test_function_parameter_kind_required() async {
     var library = await checkLibrary('f(x) {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic f(dynamic x) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic f(dynamic x) {}
-''');
-    }
   }
 
   test_function_parameter_parameters() async {
     var library = await checkLibrary('f(g(x, y)) {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic f((dynamic, dynamic) → dynamic g) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic f((dynamic, dynamic) → dynamic g) {}
-''');
-    }
   }
 
   test_function_parameter_return_type() async {
     var library = await checkLibrary('f(int g()) {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic f(() → int g) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic f(() → int g) {}
-''');
-    }
   }
 
   test_function_parameter_return_type_void() async {
     var library = await checkLibrary('f(void g()) {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic f(() → void g) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic f(() → void g) {}
-''');
-    }
   }
 
   test_function_parameter_type() async {
     var library = await checkLibrary('f(int i) {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic f(int i) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic f(int i) {}
-''');
-    }
   }
 
   test_function_parameters() async {
     var library = await checkLibrary('f(x, y) {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic f(dynamic x, dynamic y) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic f(dynamic x, dynamic y) {}
-''');
-    }
   }
 
   test_function_return_type() async {
     var library = await checkLibrary('int f() => null;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 int f() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-int f() {}
-''');
-    }
   }
 
   test_function_return_type_implicit() async {
     var library = await checkLibrary('f() => null;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic f() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic f() {}
-''');
-    }
   }
 
   test_function_return_type_void() async {
     var library = await checkLibrary('void f() {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 void f() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-void f() {}
-''');
-    }
   }
 
   test_function_type_parameter() async {
     prepareAnalysisContext(createOptions());
     var library = await checkLibrary('T f<T, U>(U u) => null;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 T f<T, U>(U u) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-T f<T, U>(U u) {}
-''');
-    }
   }
 
   test_function_type_parameter_with_function_typed_parameter() async {
     prepareAnalysisContext(createOptions());
     var library = await checkLibrary('void f<T, U>(T x(U u)) {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 void f<T, U>((U) → T x) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-void f<T, U>((U) → T x) {}
-''');
-    }
   }
 
   test_function_typed_parameter_implicit() async {
@@ -7329,17 +5827,10 @@
 
   test_functions() async {
     var library = await checkLibrary('f() {} g() {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic f() {}
 dynamic g() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic f() {}
-dynamic g() {}
-''');
-    }
   }
 
   test_futureOr() async {
@@ -7438,19 +5929,11 @@
   }
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T, U> {
   static void m<V, W>(V v, W w) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T, U> {
-  static void m<V, W>(V v, W w) {}
-}
-''');
-    }
   }
 
   test_genericFunction_asFunctionReturnType() async {
@@ -7606,34 +6089,19 @@
  * Docs
  */
 get x => null;''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 /**
  * Docs
  */
 dynamic get x {}
 ''');
-    } else {
-      checkElementText(library, r'''
-/**
- * Docs
- */
-dynamic get x {}
-''');
-    }
   }
 
   test_getter_external() async {
     var library = await checkLibrary('external int get x;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 external int get x {}
 ''');
-    } else {
-      checkElementText(library, r'''
-external int get x {}
-''');
-    }
   }
 
   test_getter_inferred_type_nonStatic_implicit_return() async {
@@ -7662,49 +6130,28 @@
 
   test_getters() async {
     var library = await checkLibrary('int get x => null; get y => null;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 int get x {}
 dynamic get y {}
 ''');
-    } else {
-      checkElementText(library, r'''
-int get x {}
-dynamic get y {}
-''');
-    }
   }
 
   test_implicitTopLevelVariable_getterFirst() async {
     var library =
         await checkLibrary('int get x => 0; void set x(int value) {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 int get x {}
 void set x(int value) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-int get x {}
-void set x(int value) {}
-''');
-    }
   }
 
   test_implicitTopLevelVariable_setterFirst() async {
     var library =
         await checkLibrary('void set x(int value) {} int get x => 0;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 void set x(int value) {}
 int get x {}
 ''');
-    } else {
-      checkElementText(library, r'''
-void set x(int value) {}
-int get x {}
-''');
-    }
   }
 
   test_import_configurations_useDefault() async {
@@ -7719,19 +6166,11 @@
 
 class B extends A {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'foo.dart';
 class B extends A {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'foo.dart';
-class B extends A {
-}
-''');
-    }
     var typeA = library.definingCompilationUnit.getType('B').supertype;
     expect(typeA.element.source.shortName, 'foo.dart');
   }
@@ -7749,19 +6188,11 @@
 
 class B extends A {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'foo_io.dart';
 class B extends A {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'foo_io.dart';
-class B extends A {
-}
-''');
-    }
     var typeA = library.definingCompilationUnit.getType('B').supertype;
     expect(typeA.element.source.shortName, 'foo_io.dart');
   }
@@ -7774,17 +6205,10 @@
   p.f();
   }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart' deferred as p;
 dynamic main() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart' deferred as p;
-dynamic main() {}
-''');
-    }
   }
 
   test_import_hide() async {
@@ -7792,17 +6216,10 @@
     var library = await checkLibrary('''
 import 'dart:async' hide Stream, Completer; Future f;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'dart:async' hide Stream, Completer;
 Future<dynamic> f;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'dart:async' hide Stream, Completer;
-Future<dynamic> f;
-''');
-    }
   }
 
   test_import_invalidUri_metadata() async {
@@ -7812,19 +6229,11 @@
 @foo
 import '';
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 @
         foo/*location: null*/
-import '';
+import '<unresolved>';
 ''');
-    } else {
-      checkElementText(library, r'''
-@
-        foo/*location: null*/
-import '';
-''');
-    }
   }
 
   test_import_multiple_combinators() async {
@@ -7833,33 +6242,19 @@
 import "dart:async" hide Stream show Future;
 Future f;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'dart:async' hide Stream show Future;
 Future<dynamic> f;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'dart:async' hide Stream show Future;
-Future<dynamic> f;
-''');
-    }
   }
 
   test_import_prefixed() async {
     addLibrarySource('/a.dart', 'library a; class C {}');
     var library = await checkLibrary('import "a.dart" as a; a.C c;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart' as a;
 C c;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart' as a;
-C c;
-''');
-    }
   }
 
   test_import_self() async {
@@ -7871,23 +6266,13 @@
     expect(library.imports, hasLength(2));
     expect(library.imports[0].importedLibrary.location, library.location);
     expect(library.imports[1].importedLibrary.isDartCore, true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'test.dart' as p;
 class C {
 }
 class D extends C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'test.dart' as p;
-class C {
-}
-class D extends C {
-}
-''');
-    }
   }
 
   test_import_short_absolute() async {
@@ -7897,17 +6282,10 @@
         resourceProvider.pathContext.fromUri(Uri.parse('/a.dart'));
     addLibrarySource(destinationPath, 'class C {}');
     var library = await checkLibrary('import "/a.dart"; C c;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
-import '/a.dart';
+    checkElementText(library, r'''
+import 'a.dart';
 C c;
 ''');
-    } else {
-      checkElementText(library, r'''
-import '/a.dart';
-C c;
-''');
-    }
   }
 
   test_import_show() async {
@@ -7917,19 +6295,11 @@
 Future f;
 Stream s;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'dart:async' show Future, Stream;
 Future<dynamic> f;
 Stream<dynamic> s;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'dart:async' show Future, Stream;
-Future<dynamic> f;
-Stream<dynamic> s;
-''');
-    }
   }
 
   test_imports() async {
@@ -7937,21 +6307,12 @@
     addLibrarySource('/b.dart', 'library b; class D {}');
     var library =
         await checkLibrary('import "a.dart"; import "b.dart"; C c; D d;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart';
 import 'b.dart';
 C c;
 D d;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart';
-import 'b.dart';
-C c;
-D d;
-''');
-    }
   }
 
   test_inferred_function_type_for_variable_in_generic_function() async {
@@ -7962,15 +6323,9 @@
   var x = () => 0;
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic f<U, V>() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic f<U, V>() {}
-''');
-    }
   }
 
   test_inferred_function_type_in_generic_class_constructor() async {
@@ -7982,21 +6337,12 @@
   C() : x = (() => () => 0);
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<U, V> {
   final dynamic x;
   C();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<U, V> {
-  final dynamic x;
-  C();
-}
-''');
-    }
   }
 
   test_inferred_function_type_in_generic_class_getter() async {
@@ -8007,19 +6353,11 @@
   get x => () => () => 0;
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<U, V> {
   dynamic get x {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<U, V> {
-  dynamic get x {}
-}
-''');
-    }
   }
 
   test_inferred_function_type_in_generic_class_in_generic_method() async {
@@ -8033,19 +6371,11 @@
   }
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T> {
   dynamic f<U, V>() {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T> {
-  dynamic f<U, V>() {}
-}
-''');
-    }
   }
 
   test_inferred_function_type_in_generic_class_setter() async {
@@ -8058,19 +6388,11 @@
   }
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<U, V> {
   void set x(dynamic value) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<U, V> {
-  void set x(dynamic value) {}
-}
-''');
-    }
   }
 
   test_inferred_function_type_in_generic_closure() async {
@@ -8190,19 +6512,11 @@
 h(F f) => null;
 var v = h(/*info:INFERRED_TYPE_CLOSURE*/(y) {});
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef void F((String) → int g);
 dynamic v;
 dynamic h(F f) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef void F((String) → int g);
-dynamic v;
-dynamic h(F f) {}
-''');
-    }
   }
 
   test_inferred_type_refers_to_function_typed_parameter_type_generic_class() async {
@@ -8296,17 +6610,10 @@
 f(void g(int x, void h())) => null;
 var v = f((x, y) {});
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic v;
 dynamic f((int, () → void) → void g) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic v;
-dynamic f((int, () → void) → void g) {}
-''');
-    }
   }
 
   test_inferred_type_refers_to_nested_function_typed_param_named() async {
@@ -8314,17 +6621,10 @@
 f({void g(int x, void h())}) => null;
 var v = f(g: (x, y) {});
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic v;
 dynamic f({(int, () → void) → void g}) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic v;
-dynamic f({(int, () → void) → void g}) {}
-''');
-    }
   }
 
   test_inferred_type_refers_to_setter_function_typed_parameter_type() async {
@@ -8430,8 +6730,7 @@
   var f;
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 abstract class A {
   int m();
 }
@@ -8444,21 +6743,6 @@
   dynamic f;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-abstract class A {
-  int m();
-}
-abstract class B {
-  String m();
-}
-abstract class C implements A, B {
-}
-abstract class D extends C {
-  dynamic f;
-}
-''');
-    }
   }
 
   test_initializer_executable_with_return_type_from_closure() async {
@@ -8569,15 +6853,9 @@
   var v = () => 0;
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 void f() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-void f() {}
-''');
-    }
   }
 
   test_instantiateToBounds_boundRefersToEarlierTypeArgument() async {
@@ -8701,8 +6979,7 @@
 @a.C.named
 class D {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart' as a;
 @
         a/*location: test.dart;a*/.
@@ -8711,17 +6988,6 @@
 class D {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart' as a;
-@
-        a/*location: test.dart;a*/.
-        C/*location: a.dart;C*/.
-        named/*location: a.dart;C;named*/
-class D {
-}
-''');
-    }
   }
 
   test_invalid_annotation_unprefixed_constructor() async {
@@ -8735,8 +7001,7 @@
 @C.named
 class D {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart';
 @
         C/*location: a.dart;C*/.
@@ -8744,16 +7009,6 @@
 class D {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart';
-@
-        C/*location: a.dart;C*/.
-        named/*location: a.dart;C;named*/
-class D {
-}
-''');
-    }
   }
 
   test_invalid_importPrefix_asTypeArgument() async {
@@ -8763,21 +7018,12 @@
   List<ppp> v;
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'dart:async' as ppp;
 class C {
   List<dynamic> v;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'dart:async' as ppp;
-class C {
-  List<dynamic> v;
-}
-''');
-    }
   }
 
   test_invalid_nameConflict_imported() async {
@@ -8789,21 +7035,12 @@
 import 'b.dart';
 foo([p = V]) {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart';
 import 'b.dart';
 dynamic foo([dynamic p =
         V/*location: null*/]) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart';
-import 'b.dart';
-dynamic foo([dynamic p =
-        V/*location: null*/]) {}
-''');
-    }
   }
 
   test_invalid_nameConflict_imported_exported() async {
@@ -8818,19 +7055,11 @@
 import 'c.dart';
 foo([p = V]) {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'c.dart';
 dynamic foo([dynamic p =
         V/*location: null*/]) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'c.dart';
-dynamic foo([dynamic p =
-        V/*location: null*/]) {}
-''');
-    }
   }
 
   test_invalid_nameConflict_local() async {
@@ -8840,21 +7069,12 @@
 V() {}
 var V;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic V;
 dynamic foo([dynamic p =
         V/*location: null*/]) {}
 dynamic V() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic V;
-dynamic foo([dynamic p =
-        V/*location: null*/]) {}
-dynamic V() {}
-''');
-    }
   }
 
   test_invalid_setterParameter_fieldFormalParameter() async {
@@ -8864,21 +7084,12 @@
   void set bar(this.foo) {}
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   int foo;
   void set bar(dynamic this.foo) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  int foo;
-  void set bar(dynamic this.foo) {}
-}
-''');
-    }
   }
 
   test_invalid_setterParameter_fieldFormalParameter_self() async {
@@ -8909,25 +7120,14 @@
 part '';
 class B extends A {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
-part '';
+    checkElementText(library, r'''
+part '<unresolved>';
 class B {
 }
 --------------------
 unit: null
 
 ''');
-    } else {
-      checkElementText(library, r'''
-part '';
-class B {
-}
---------------------
-unit: null
-
-''');
-    }
   }
 
   test_invalidUris() async {
@@ -8950,21 +7150,20 @@
 part 'a3.dart';
 part '[invalid uri]';
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
-import '[invalid uri]';
-import '[invalid uri]:foo.dart';
+    checkElementText(library, r'''
+import '<unresolved>';
+import '<unresolved>';
 import 'a1.dart';
-import '[invalid uri]';
-import '[invalid uri]:foo.dart';
-export '[invalid uri]';
-export '[invalid uri]:foo.dart';
+import '<unresolved>';
+import '<unresolved>';
+export '<unresolved>';
+export '<unresolved>';
 export 'a2.dart';
-export '[invalid uri]';
-export '[invalid uri]:foo.dart';
-part '[invalid uri]';
+export '<unresolved>';
+export '<unresolved>';
+part '<unresolved>';
 part 'a3.dart';
-part '[invalid uri]';
+part '<unresolved>';
 --------------------
 unit: null
 
@@ -8975,43 +7174,12 @@
 unit: null
 
 ''');
-    } else {
-      checkElementText(library, r'''
-import '[invalid uri]';
-import '[invalid uri]:foo.dart';
-import 'a1.dart';
-import '[invalid uri]';
-import '[invalid uri]:foo.dart';
-export '[invalid uri]';
-export '[invalid uri]:foo.dart';
-export 'a2.dart';
-export '[invalid uri]';
-export '[invalid uri]:foo.dart';
-part '[invalid uri]';
-part 'a3.dart';
-part '[invalid uri]';
---------------------
-unit: null
-
---------------------
-unit: a3.dart
-
---------------------
-unit: null
-
-''');
-    }
   }
 
   test_library() async {
     var library = await checkLibrary('');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 ''');
-    } else {
-      checkElementText(library, r'''
-''');
-    }
   }
 
   test_library_documented_lines() async {
@@ -9045,28 +7213,16 @@
 
   test_library_name_with_spaces() async {
     var library = await checkLibrary('library foo . bar ;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 library foo.bar;
 ''');
-    } else {
-      checkElementText(library, r'''
-library foo.bar;
-''');
-    }
   }
 
   test_library_named() async {
     var library = await checkLibrary('library foo.bar;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 library foo.bar;
 ''');
-    } else {
-      checkElementText(library, r'''
-library foo.bar;
-''');
-    }
   }
 
   test_localFunctions() async {
@@ -9078,15 +7234,9 @@
   }
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic f() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic f() {}
-''');
-    }
   }
 
   test_localFunctions_inConstructor() async {
@@ -9097,19 +7247,11 @@
   }
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   C();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  C();
-}
-''');
-    }
   }
 
   test_localFunctions_inMethod() async {
@@ -9120,19 +7262,11 @@
   }
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic m() {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic m() {}
-}
-''');
-    }
   }
 
   test_localFunctions_inTopLevelGetter() async {
@@ -9141,15 +7275,9 @@
   f() {}
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic get g {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic get g {}
-''');
-    }
   }
 
   test_localLabels_inConstructor() async {
@@ -9164,19 +7292,11 @@
   }
 }
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   C();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  C();
-}
-''');
-    }
   }
 
   test_localLabels_inMethod() async {
@@ -9191,19 +7311,11 @@
   }
 }
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic m() {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic m() {}
-}
-''');
-    }
   }
 
   test_localLabels_inTopLevelFunction() async {
@@ -9216,37 +7328,23 @@
   }
 }
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic main() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic main() {}
-''');
-    }
   }
 
   test_main_class() async {
     var library = await checkLibrary('class main {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class main {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class main {
-}
-''');
-    }
   }
 
   test_main_class_alias() async {
     var library =
         await checkLibrary('class main = C with D; class C {} class D {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class alias main extends C with D {
   synthetic main() = C;
 }
@@ -9255,126 +7353,67 @@
 class D {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class alias main extends C with D {
-  synthetic main() = C;
-}
-class C {
-}
-class D {
-}
-''');
-    }
   }
 
   test_main_class_alias_via_export() async {
     addLibrarySource('/a.dart', 'class main = C with D; class C {} class D {}');
     var library = await checkLibrary('export "a.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'a.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'a.dart';
-''');
-    }
   }
 
   test_main_class_via_export() async {
     addLibrarySource('/a.dart', 'class main {}');
     var library = await checkLibrary('export "a.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'a.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'a.dart';
-''');
-    }
   }
 
   test_main_getter() async {
     var library = await checkLibrary('get main => null;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic get main {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic get main {}
-''');
-    }
   }
 
   test_main_getter_via_export() async {
     addLibrarySource('/a.dart', 'get main => null;');
     var library = await checkLibrary('export "a.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'a.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'a.dart';
-''');
-    }
   }
 
   test_main_typedef() async {
     var library = await checkLibrary('typedef main();');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef dynamic main();
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef dynamic main();
-''');
-    }
   }
 
   test_main_typedef_via_export() async {
     addLibrarySource('/a.dart', 'typedef main();');
     var library = await checkLibrary('export "a.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'a.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'a.dart';
-''');
-    }
   }
 
   test_main_variable() async {
     var library = await checkLibrary('var main;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic main;
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic main;
-''');
-    }
   }
 
   test_main_variable_via_export() async {
     addLibrarySource('/a.dart', 'var main;');
     var library = await checkLibrary('export "a.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'a.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'a.dart';
-''');
-    }
   }
 
   test_member_function_async() async {
@@ -9384,21 +7423,12 @@
   Future f() async {}
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'dart:async';
 class C {
   Future<dynamic> f() async {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'dart:async';
-class C {
-  Future<dynamic> f() async {}
-}
-''');
-    }
   }
 
   test_member_function_asyncStar() async {
@@ -9408,21 +7438,27 @@
   Stream f() async* {}
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'dart:async';
 class C {
   Stream<dynamic> f() async* {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'dart:async';
+  }
+
+  test_member_function_syncStar() async {
+    var library = await checkLibrary(r'''
 class C {
-  Stream<dynamic> f() async* {}
+  Iterable<int> f() sync* {
+    yield 42;
+  }
 }
 ''');
-    }
+    checkElementText(library, r'''
+class C {
+  Iterable<int> f() sync* {}
+}
+''');
   }
 
   test_metadata_classDeclaration() async {
@@ -9432,8 +7468,7 @@
 @a
 @b
 class C {}''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 @
         a/*location: test.dart;a?*/
 @
@@ -9443,25 +7478,12 @@
 const dynamic a = null;
 const dynamic b = null;
 ''');
-    } else {
-      checkElementText(library, r'''
-@
-        a/*location: test.dart;a?*/
-@
-        b/*location: test.dart;b?*/
-class C {
-}
-const dynamic a = null;
-const dynamic b = null;
-''');
-    }
   }
 
   test_metadata_classTypeAlias() async {
     var library = await checkLibrary(
         'const a = null; @a class C = D with E; class D {} class E {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 @
         a/*location: test.dart;a?*/
 class alias C extends D with E {
@@ -9473,20 +7495,6 @@
 }
 const dynamic a = null;
 ''');
-    } else {
-      checkElementText(library, r'''
-@
-        a/*location: test.dart;a?*/
-class alias C extends D with E {
-  synthetic C() = D;
-}
-class D {
-}
-class E {
-}
-const dynamic a = null;
-''');
-    }
   }
 
   test_metadata_constructor_call_named() async {
@@ -9497,8 +7505,7 @@
 @A.named()
 class C {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class A {
   const A.named();
 }
@@ -9508,18 +7515,6 @@
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class A {
-  const A.named();
-}
-@
-        A/*location: test.dart;A*/.
-        named/*location: test.dart;A;named*/()
-class C {
-}
-''');
-    }
   }
 
   test_metadata_constructor_call_named_prefixed() async {
@@ -9529,8 +7524,7 @@
 @foo.A.named()
 class C {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'foo.dart' as foo;
 @
         A/*location: foo.dart;A*/.
@@ -9538,22 +7532,11 @@
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'foo.dart' as foo;
-@
-        A/*location: foo.dart;A*/.
-        named/*location: foo.dart;A;named*/()
-class C {
-}
-''');
-    }
   }
 
   test_metadata_constructor_call_unnamed() async {
     var library = await checkLibrary('class A { const A(); } @A() class C {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class A {
   const A();
 }
@@ -9562,47 +7545,25 @@
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class A {
-  const A();
-}
-@
-        A/*location: test.dart;A*/()
-class C {
-}
-''');
-    }
   }
 
   test_metadata_constructor_call_unnamed_prefixed() async {
     addLibrarySource('/foo.dart', 'class A { const A(); }');
     var library =
         await checkLibrary('import "foo.dart" as foo; @foo.A() class C {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'foo.dart' as foo;
 @
         A/*location: foo.dart;A*/()
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'foo.dart' as foo;
-@
-        A/*location: foo.dart;A*/()
-class C {
-}
-''');
-    }
   }
 
   test_metadata_constructor_call_with_args() async {
     var library =
         await checkLibrary('class A { const A(x); } @A(null) class C {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class A {
   const A(dynamic x);
 }
@@ -9611,24 +7572,12 @@
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class A {
-  const A(dynamic x);
-}
-@
-        A/*location: test.dart;A*/(null)
-class C {
-}
-''');
-    }
   }
 
   test_metadata_constructorDeclaration_named() async {
     var library =
         await checkLibrary('const a = null; class C { @a C.named(); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   @
         a/*location: test.dart;a?*/
@@ -9636,22 +7585,11 @@
 }
 const dynamic a = null;
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  @
-        a/*location: test.dart;a?*/
-  C.named();
-}
-const dynamic a = null;
-''');
-    }
   }
 
   test_metadata_constructorDeclaration_unnamed() async {
     var library = await checkLibrary('const a = null; class C { @a C(); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   @
         a/*location: test.dart;a?*/
@@ -9659,22 +7597,11 @@
 }
 const dynamic a = null;
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  @
-        a/*location: test.dart;a?*/
-  C();
-}
-const dynamic a = null;
-''');
-    }
   }
 
   test_metadata_enumDeclaration() async {
     var library = await checkLibrary('const a = null; @a enum E { v }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 @
         a/*location: test.dart;a?*/
 enum E {
@@ -9684,44 +7611,22 @@
 }
 const dynamic a = null;
 ''');
-    } else {
-      checkElementText(library, r'''
-@
-        a/*location: test.dart;a?*/
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v;
-}
-const dynamic a = null;
-''');
-    }
   }
 
   test_metadata_exportDirective() async {
     addLibrarySource('/foo.dart', '');
     var library = await checkLibrary('@a export "foo.dart"; const a = null;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 @
         a/*location: test.dart;a?*/
 export 'foo.dart';
 const dynamic a = null;
 ''');
-    } else {
-      checkElementText(library, r'''
-@
-        a/*location: test.dart;a?*/
-export 'foo.dart';
-const dynamic a = null;
-''');
-    }
   }
 
   test_metadata_fieldDeclaration() async {
     var library = await checkLibrary('const a = null; class C { @a int x; }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   @
         a/*location: test.dart;a?*/
@@ -9729,16 +7634,6 @@
 }
 const dynamic a = null;
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  @
-        a/*location: test.dart;a?*/
-  int x;
-}
-const dynamic a = null;
-''');
-    }
   }
 
   test_metadata_fieldFormalParameter() async {
@@ -9749,8 +7644,7 @@
   C(@a this.x);
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic x;
   C(@
@@ -9758,23 +7652,12 @@
 }
 const dynamic a = null;
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic x;
-  C(@
-        a/*location: test.dart;a?*/ dynamic this.x);
-}
-const dynamic a = null;
-''');
-    }
   }
 
   test_metadata_fieldFormalParameter_withDefault() async {
     var library = await checkLibrary(
         'const a = null; class C { var x; C([@a this.x = null]); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic x;
   C([@
@@ -9782,50 +7665,30 @@
 }
 const dynamic a = null;
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic x;
-  C([@
-        a/*location: test.dart;a?*/ dynamic this.x]);
-}
-const dynamic a = null;
-''');
-    }
   }
 
   test_metadata_functionDeclaration_function() async {
-    var library = await checkLibrary('const a = null; @a f() {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    var library = await checkLibrary('''
+const a = null;
+@a
+f() {}
+''');
+    checkElementText(library, r'''
 const dynamic a = null;
+@
+        a/*location: test.dart;a?*/
 dynamic f() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-const dynamic a = null;
-dynamic f() {}
-''');
-    }
   }
 
   test_metadata_functionDeclaration_getter() async {
     var library = await checkLibrary('const a = null; @a get f => null;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 const dynamic a = null;
 @
         a/*location: test.dart;a?*/
 dynamic get f {}
 ''');
-    } else {
-      checkElementText(library, r'''
-const dynamic a = null;
-@
-        a/*location: test.dart;a?*/
-dynamic get f {}
-''');
-    }
   }
 
   test_metadata_functionDeclaration_setter() async {
@@ -9849,124 +7712,69 @@
 
   test_metadata_functionTypeAlias() async {
     var library = await checkLibrary('const a = null; @a typedef F();');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 @
         a/*location: test.dart;a?*/
 typedef dynamic F();
 const dynamic a = null;
 ''');
-    } else {
-      checkElementText(library, r'''
-@
-        a/*location: test.dart;a?*/
-typedef dynamic F();
-const dynamic a = null;
-''');
-    }
   }
 
   test_metadata_functionTypedFormalParameter() async {
     var library = await checkLibrary('const a = null; f(@a g()) {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 const dynamic a = null;
 dynamic f(@
         a/*location: test.dart;a?*/ () → dynamic g) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-const dynamic a = null;
-dynamic f(@
-        a/*location: test.dart;a?*/ () → dynamic g) {}
-''');
-    }
   }
 
   test_metadata_functionTypedFormalParameter_withDefault() async {
     var library = await checkLibrary('const a = null; f([@a g() = null]) {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 const dynamic a = null;
 dynamic f([@
-        a/*location: test.dart;a?*/ () → dynamic g = null]) {}
+        a/*location: test.dart;a?*/ () → dynamic g]) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-const dynamic a = null;
-dynamic f([@
-        a/*location: test.dart;a?*/ () → dynamic g = null]) {}
-''');
-    }
   }
 
   test_metadata_importDirective() async {
     addLibrarySource('/foo.dart', 'const b = null;');
     var library = await checkLibrary('@a import "foo.dart"; const a = b;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 @
         a/*location: test.dart;a?*/
 import 'foo.dart';
 const dynamic a =
         b/*location: foo.dart;b?*/;
 ''');
-    } else {
-      checkElementText(library, r'''
-@
-        a/*location: test.dart;a?*/
-import 'foo.dart';
-const dynamic a =
-        b/*location: foo.dart;b?*/;
-''');
-    }
   }
 
   test_metadata_invalid_classDeclaration() async {
     var library = await checkLibrary('f(_) {} @f(42) class C {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 @
         f/*location: test.dart;f*/(42)
 class C {
 }
 dynamic f(dynamic _) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-@
-        f/*location: test.dart;f*/(42)
-class C {
-}
-dynamic f(dynamic _) {}
-''');
-    }
   }
 
   test_metadata_libraryDirective() async {
     var library = await checkLibrary('@a library L; const a = null;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 @
         a/*location: test.dart;a?*/
 library L;
 const dynamic a = null;
 ''');
-    } else {
-      checkElementText(library, r'''
-@
-        a/*location: test.dart;a?*/
-library L;
-const dynamic a = null;
-''');
-    }
   }
 
   test_metadata_methodDeclaration_getter() async {
     var library =
         await checkLibrary('const a = null; class C { @a get m => null; }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   @
         a/*location: test.dart;a?*/
@@ -9974,16 +7782,6 @@
 }
 const dynamic a = null;
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  @
-        a/*location: test.dart;a?*/
-  dynamic get m {}
-}
-const dynamic a = null;
-''');
-    }
   }
 
   test_metadata_methodDeclaration_method() async {
@@ -9996,8 +7794,7 @@
   m() {}
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   @
         a/*location: test.dart;a?*/
@@ -10008,19 +7805,6 @@
 const dynamic a = null;
 const dynamic b = null;
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  @
-        a/*location: test.dart;a?*/
-  @
-        b/*location: test.dart;b?*/
-  dynamic m() {}
-}
-const dynamic a = null;
-const dynamic b = null;
-''');
-    }
   }
 
   test_metadata_methodDeclaration_setter() async {
@@ -10059,8 +7843,7 @@
 @a
 part 'foo.dart';
 const a = null;''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 library L;
 @
         a/*location: test.dart;a?*/
@@ -10070,25 +7853,12 @@
 unit: foo.dart
 
 ''');
-    } else {
-      checkElementText(library, r'''
-library L;
-@
-        a/*location: test.dart;a?*/
-part 'foo.dart';
-const dynamic a = null;
---------------------
-unit: foo.dart
-
-''');
-    }
   }
 
   test_metadata_prefixed_variable() async {
     addLibrarySource('/a.dart', 'const b = null;');
     var library = await checkLibrary('import "a.dart" as a; @a.b class C {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart' as a;
 @
         a/*location: test.dart;a*/.
@@ -10096,86 +7866,43 @@
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart' as a;
-@
-        a/*location: test.dart;a*/.
-        b/*location: a.dart;b?*/
-class C {
-}
-''');
-    }
   }
 
   test_metadata_simpleFormalParameter() async {
     var library = await checkLibrary('const a = null; f(@a x) {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 const dynamic a = null;
 dynamic f(@
         a/*location: test.dart;a?*/ dynamic x) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-const dynamic a = null;
-dynamic f(@
-        a/*location: test.dart;a?*/ dynamic x) {}
-''');
-    }
   }
 
   test_metadata_simpleFormalParameter_withDefault() async {
     var library = await checkLibrary('const a = null; f([@a x = null]) {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 const dynamic a = null;
 dynamic f([@
-        a/*location: test.dart;a?*/ dynamic x = null]) {}
+        a/*location: test.dart;a?*/ dynamic x]) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-const dynamic a = null;
-dynamic f([@
-        a/*location: test.dart;a?*/ dynamic x = null]) {}
-''');
-    }
   }
 
   test_metadata_topLevelVariableDeclaration() async {
     var library = await checkLibrary('const a = null; @a int v;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 const dynamic a = null;
 @
         a/*location: test.dart;a?*/
 int v;
 ''');
-    } else {
-      checkElementText(library, r'''
-const dynamic a = null;
-@
-        a/*location: test.dart;a?*/
-int v;
-''');
-    }
   }
 
   test_metadata_typeParameter_ofClass() async {
     var library = await checkLibrary('const a = null; class C<@a T> {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T> {
 }
 const dynamic a = null;
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T> {
-}
-const dynamic a = null;
-''');
-    }
   }
 
   test_metadata_typeParameter_ofClassTypeAlias() async {
@@ -10184,8 +7911,7 @@
 class C<@a T> = D with E;
 class D {}
 class E {}''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class alias C<T> extends D with E {
   synthetic C() = D;
 }
@@ -10195,48 +7921,22 @@
 }
 const dynamic a = null;
 ''');
-    } else {
-      checkElementText(library, r'''
-class alias C<T> extends D with E {
-  synthetic C() = D;
-}
-class D {
-}
-class E {
-}
-const dynamic a = null;
-''');
-    }
   }
 
   test_metadata_typeParameter_ofFunction() async {
     var library = await checkLibrary('const a = null; f<@a T>() {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 const dynamic a = null;
 dynamic f<T>() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-const dynamic a = null;
-dynamic f<T>() {}
-''');
-    }
   }
 
   test_metadata_typeParameter_ofTypedef() async {
     var library = await checkLibrary('const a = null; typedef F<@a T>();');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef dynamic F<T>();
 const dynamic a = null;
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef dynamic F<T>();
-const dynamic a = null;
-''');
-    }
   }
 
   test_method_documented() async {
@@ -10247,8 +7947,7 @@
    */
   f() {}
 }''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   /**
    * Docs
@@ -10256,16 +7955,6 @@
   dynamic f() {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  /**
-   * Docs
-   */
-  dynamic f() {}
-}
-''');
-    }
   }
 
   test_method_inferred_type_nonStatic_implicit_param() async {
@@ -10293,8 +7982,14 @@
   }
 
   test_method_inferred_type_nonStatic_implicit_return() async {
-    var library = await checkLibrary(
-        'class C extends D { f() => null; } abstract class D { int f(); }');
+    var library = await checkLibrary('''
+class C extends D {
+  f() => null;
+}
+abstract class D {
+  int f();
+}
+''');
     if (isStrongMode) {
       checkElementText(library, r'''
 class C extends D {
@@ -10319,19 +8014,11 @@
   test_method_type_parameter() async {
     prepareAnalysisContext(createOptions());
     var library = await checkLibrary('class C { T f<T, U>(U u) => null; }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   T f<T, U>(U u) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  T f<T, U>(U u) {}
-}
-''');
-    }
   }
 
   test_method_type_parameter_in_generic_class() async {
@@ -10341,37 +8028,21 @@
   V f<V, W>(T t, U u, W w) => null;
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T, U> {
   V f<V, W>(T t, U u, W w) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T, U> {
-  V f<V, W>(T t, U u, W w) {}
-}
-''');
-    }
   }
 
   test_method_type_parameter_with_function_typed_parameter() async {
     prepareAnalysisContext(createOptions());
     var library = await checkLibrary('class C { void f<T, U>(T x(U u)) {} }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   void f<T, U>((U) → T x) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  void f<T, U>((U) → T x) {}
-}
-''');
-    }
   }
 
   test_nameConflict_exportedAndLocal() async {
@@ -10385,17 +8056,10 @@
 import 'c.dart';
 C v = null;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'c.dart';
 C v;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'c.dart';
-C v;
-''');
-    }
   }
 
   test_nameConflict_exportedAndLocal_exported() async {
@@ -10410,17 +8074,10 @@
 import 'd.dart';
 C v = null;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'd.dart';
 C v;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'd.dart';
-C v;
-''');
-    }
   }
 
   test_nameConflict_exportedAndParted() async {
@@ -10439,17 +8096,10 @@
 import 'c.dart';
 C v = null;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'c.dart';
 C v;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'c.dart';
-C v;
-''');
-    }
   }
 
   test_nameConflict_importWithRelativeUri_exportWithAbsolute() async {
@@ -10464,19 +8114,11 @@
 import 'b.dart';
 A v = null;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart';
 import 'b.dart';
 A v;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart';
-import 'b.dart';
-A v;
-''');
-    }
   }
 
   test_nested_generic_functions_in_generic_class_with_function_typed_params() async {
@@ -10488,19 +8130,11 @@
   }
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T, U> {
   void g<V, W>() {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T, U> {
-  void g<V, W>() {}
-}
-''');
-    }
   }
 
   test_nested_generic_functions_in_generic_class_with_local_variables() async {
@@ -10518,19 +8152,11 @@
   }
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T, U> {
   void g<V, W>() {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T, U> {
-  void g<V, W>() {}
-}
-''');
-    }
   }
 
   test_nested_generic_functions_with_function_typed_param() async {
@@ -10542,15 +8168,9 @@
   }
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 void f<T, U>() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-void f<T, U>() {}
-''');
-    }
   }
 
   test_nested_generic_functions_with_local_variables() async {
@@ -10568,33 +8188,19 @@
   }
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 void f<T, U>() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-void f<T, U>() {}
-''');
-    }
   }
 
   test_operator() async {
     var library =
         await checkLibrary('class C { C operator+(C other) => null; }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   C +(C other) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  C +(C other) {}
-}
-''');
-    }
   }
 
   test_operator_equal() async {
@@ -10603,37 +8209,21 @@
   bool operator==(Object other) => false;
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   bool ==(Object other) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  bool ==(Object other) {}
-}
-''');
-    }
   }
 
   test_operator_external() async {
     var library =
         await checkLibrary('class C { external C operator+(C other); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   external C +(C other) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  external C +(C other) {}
-}
-''');
-    }
   }
 
   test_operator_greater_equal() async {
@@ -10642,37 +8232,21 @@
   bool operator>=(C other) => false;
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   bool >=(C other) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  bool >=(C other) {}
-}
-''');
-    }
   }
 
   test_operator_index() async {
     var library =
         await checkLibrary('class C { bool operator[](int i) => null; }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   bool [](int i) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  bool [](int i) {}
-}
-''');
-    }
   }
 
   test_operator_index_set() async {
@@ -10681,19 +8255,11 @@
   void operator[]=(int i, bool v) {}
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   void []=(int i, bool v) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  void []=(int i, bool v) {}
-}
-''');
-    }
   }
 
   test_operator_less_equal() async {
@@ -10702,19 +8268,11 @@
   bool operator<=(C other) => false;
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   bool <=(C other) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  bool <=(C other) {}
-}
-''');
-    }
   }
 
   test_parameter_checked() async {
@@ -10728,8 +8286,7 @@
   void f(@checked T t) {}
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 library meta;
 class A<T> {
   void f(@
@@ -10737,16 +8294,6 @@
 }
 const dynamic checked = null;
 ''');
-    } else {
-      checkElementText(library, r'''
-library meta;
-class A<T> {
-  void f(@
-        checked/*location: test.dart;checked?*/ covariant T t) {}
-}
-const dynamic checked = null;
-''');
-    }
   }
 
   test_parameter_checked_inherited() async {
@@ -10793,19 +8340,11 @@
   test_parameter_covariant() async {
     prepareAnalysisContext(createOptions());
     var library = await checkLibrary('class C { void m(covariant C c) {} }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   void m(covariant C c) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  void m(covariant C c) {}
-}
-''');
-    }
   }
 
   test_parameter_covariant_inherited() async {
@@ -10840,70 +8379,38 @@
 
   test_parameter_parameters() async {
     var library = await checkLibrary('class C { f(g(x, y)) {} }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic f((dynamic, dynamic) → dynamic g) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic f((dynamic, dynamic) → dynamic g) {}
-}
-''');
-    }
   }
 
   test_parameter_parameters_in_generic_class() async {
     var library = await checkLibrary('class C<A, B> { f(A g(B x)) {} }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<A, B> {
   dynamic f((B) → A g) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<A, B> {
-  dynamic f((B) → A g) {}
-}
-''');
-    }
   }
 
   test_parameter_return_type() async {
     var library = await checkLibrary('class C { f(int g()) {} }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic f(() → int g) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic f(() → int g) {}
-}
-''');
-    }
   }
 
   test_parameter_return_type_void() async {
     var library = await checkLibrary('class C { f(void g()) {} }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic f(() → void g) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic f(() → void g) {}
-}
-''');
-    }
   }
 
   test_parameterTypeNotInferred_constructor() async {
@@ -10915,21 +8422,12 @@
   C.named({x: 1});
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   C.positional([dynamic x = 1]);
   C.named({dynamic x: 1});
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  C.positional([dynamic x = 1]);
-  C.named({dynamic x: 1});
-}
-''');
-    }
   }
 
   test_parameterTypeNotInferred_initializingFormal() async {
@@ -10942,23 +8440,13 @@
   C.named({this.x: 1});
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   dynamic x;
-  C.positional([dynamic this.x]);
-  C.named({dynamic this.x});
+  C.positional([dynamic this.x = 1]);
+  C.named({dynamic this.x: 1});
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  dynamic x;
-  C.positional([dynamic this.x]);
-  C.named({dynamic this.x});
-}
-''');
-    }
   }
 
   test_parameterTypeNotInferred_staticMethod() async {
@@ -10970,21 +8458,12 @@
   static void named({x: 1}) {}
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   static void positional([dynamic x = 1]) {}
   static void named({dynamic x: 1}) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  static void positional([dynamic x = 1]) {}
-  static void named({dynamic x: 1}) {}
-}
-''');
-    }
   }
 
   test_parameterTypeNotInferred_topLevelFunction() async {
@@ -10995,17 +8474,10 @@
 void positional([x = 1]) {}
 void named({x: 1}) {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 void positional([dynamic x = 1]) {}
 void named({dynamic x: 1}) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-void positional([dynamic x = 1]) {}
-void named({dynamic x: 1}) {}
-''');
-    }
   }
 
   test_parts() async {
@@ -11013,8 +8485,7 @@
     addSource('/b.dart', 'part of my.lib;');
     var library =
         await checkLibrary('library my.lib; part "a.dart"; part "b.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 library my.lib;
 part 'a.dart';
 part 'b.dart';
@@ -11025,19 +8496,6 @@
 unit: b.dart
 
 ''');
-    } else {
-      checkElementText(library, r'''
-library my.lib;
-part 'a.dart';
-part 'b.dart';
---------------------
-unit: a.dart
-
---------------------
-unit: b.dart
-
-''');
-    }
   }
 
   test_parts_invalidUri() async {
@@ -11045,23 +8503,13 @@
     shouldCompareLibraryElements = false;
     addSource('/foo/bar.dart', 'part of my.lib;');
     var library = await checkLibrary('library my.lib; part "foo/";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 library my.lib;
-part 'foo/';
+part '<unresolved>';
 --------------------
 unit: null
 
 ''');
-    } else {
-      checkElementText(library, r'''
-library my.lib;
-part 'foo/';
---------------------
-unit: null
-
-''');
-    }
   }
 
   test_parts_invalidUri_nullStringValue() async {
@@ -11072,23 +8520,13 @@
 library my.lib;
 part "${foo}/bar.dart";
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 library my.lib;
-part '';
+part '<unresolved>';
 --------------------
 unit: null
 
 ''');
-    } else {
-      checkElementText(library, r'''
-library my.lib;
-part '';
---------------------
-unit: null
-
-''');
-    }
   }
 
   test_propagated_type_refers_to_closure() async {
@@ -11098,33 +8536,19 @@
   var y = x;
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 void f() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-void f() {}
-''');
-    }
   }
 
   test_setter_covariant() async {
     var library =
         await checkLibrary('class C { void set x(covariant int value); }');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
   void set x(covariant int value);
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-  void set x(covariant int value);
-}
-''');
-    }
   }
 
   test_setter_documented() async {
@@ -11134,34 +8558,19 @@
  * Docs
  */
 void set x(value) {}''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 /**
  * Docs
  */
 void set x(dynamic value) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-/**
- * Docs
- */
-void set x(dynamic value) {}
-''');
-    }
   }
 
   test_setter_external() async {
     var library = await checkLibrary('external void set x(int value);');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 external void set x(int value) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-external void set x(int value) {}
-''');
-    }
   }
 
   test_setter_inferred_type_nonStatic_implicit_param() async {
@@ -11190,7 +8599,11 @@
   }
 
   test_setter_inferred_type_static_implicit_return() async {
-    var library = await checkLibrary('class C { static set f(int value) {} }');
+    var library = await checkLibrary('''
+class C {
+  static set f(int value) {}
+}
+''');
     if (isStrongMode) {
       checkElementText(library, r'''
 class C {
@@ -11249,13 +8662,8 @@
 final v = f() ? /*<T>*/(T t) => 0 : /*<T>*/(T t) => 1;
 bool f() => true;
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 ''');
-    } else {
-      checkElementText(library, r'''
-''');
-    }
   }
 
   test_syntheticFunctionType_genericClosure_inGenericFunction() async {
@@ -11312,15 +8720,9 @@
   var v = b ? (T t, U u) => 0 : (T t, U u) => 1;
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 void f<T, U>(bool b) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-void f<T, U>(bool b) {}
-''');
-    }
   }
 
   test_syntheticFunctionType_noArguments() async {
@@ -11357,80 +8759,44 @@
 
   test_type_arguments_explicit_dynamic_dynamic() async {
     var library = await checkLibrary('Map<dynamic, dynamic> m;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 Map<dynamic, dynamic> m;
 ''');
-    } else {
-      checkElementText(library, r'''
-Map<dynamic, dynamic> m;
-''');
-    }
   }
 
   test_type_arguments_explicit_dynamic_int() async {
     var library = await checkLibrary('Map<dynamic, int> m;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 Map<dynamic, int> m;
 ''');
-    } else {
-      checkElementText(library, r'''
-Map<dynamic, int> m;
-''');
-    }
   }
 
   test_type_arguments_explicit_String_dynamic() async {
     var library = await checkLibrary('Map<String, dynamic> m;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 Map<String, dynamic> m;
 ''');
-    } else {
-      checkElementText(library, r'''
-Map<String, dynamic> m;
-''');
-    }
   }
 
   test_type_arguments_explicit_String_int() async {
     var library = await checkLibrary('Map<String, int> m;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 Map<String, int> m;
 ''');
-    } else {
-      checkElementText(library, r'''
-Map<String, int> m;
-''');
-    }
   }
 
   test_type_arguments_implicit() async {
     var library = await checkLibrary('Map m;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 Map<dynamic, dynamic> m;
 ''');
-    } else {
-      checkElementText(library, r'''
-Map<dynamic, dynamic> m;
-''');
-    }
   }
 
   test_type_dynamic() async {
     var library = await checkLibrary('dynamic d;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic d;
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic d;
-''');
-    }
   }
 
   test_type_invalid_topLevelVariableElement_asType() async {
@@ -11441,8 +8807,7 @@
 V V2 = null;
 int V = 0;
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef dynamic F(dynamic p);
 class C<T extends dynamic> {
 }
@@ -11450,16 +8815,6 @@
 int V;
 dynamic f(dynamic p) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef dynamic F(dynamic p);
-class C<T extends dynamic> {
-}
-dynamic V2;
-int V;
-dynamic f(dynamic p) {}
-''');
-    }
   }
 
   test_type_invalid_topLevelVariableElement_asTypeArgument() async {
@@ -11467,17 +8822,10 @@
 var V;
 static List<V> V2;
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic V;
 List<dynamic> V2;
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic V;
-List<dynamic> V2;
-''');
-    }
   }
 
   test_type_invalid_typeParameter_asPrefix() async {
@@ -11486,19 +8834,11 @@
   m(T.K p) {}
 }
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T> {
   dynamic m(dynamic p) {}
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T> {
-  dynamic m(dynamic p) {}
-}
-''');
-    }
   }
 
   test_type_reference_lib_to_lib() async {
@@ -11509,8 +8849,7 @@
 C c;
 E e;
 F f;''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef dynamic F();
 enum E {
   synthetic final int index;
@@ -11523,29 +8862,13 @@
 E e;
 F f;
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef dynamic F();
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v;
-}
-class C {
-}
-C c;
-E e;
-F f;
-''');
-    }
   }
 
   test_type_reference_lib_to_part() async {
     addSource('/a.dart', 'part of l; class C {} enum E { v } typedef F();');
     var library =
         await checkLibrary('library l; part "a.dart"; C c; E e; F f;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 library l;
 part 'a.dart';
 C c;
@@ -11563,34 +8886,13 @@
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-library l;
-part 'a.dart';
-C c;
-E e;
-F f;
---------------------
-unit: a.dart
-
-typedef dynamic F();
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v;
-}
-class C {
-}
-''');
-    }
   }
 
   test_type_reference_part_to_lib() async {
     addSource('/a.dart', 'part of l; C c; E e; F f;');
     var library = await checkLibrary(
         'library l; part "a.dart"; class C {} enum E { v } typedef F();');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 library l;
 part 'a.dart';
 typedef dynamic F();
@@ -11608,26 +8910,6 @@
 E e;
 F f;
 ''');
-    } else {
-      checkElementText(library, r'''
-library l;
-part 'a.dart';
-typedef dynamic F();
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v;
-}
-class C {
-}
---------------------
-unit: a.dart
-
-C c;
-E e;
-F f;
-''');
-    }
   }
 
   test_type_reference_part_to_other_part() async {
@@ -11635,8 +8917,7 @@
     addSource('/b.dart', 'part of l; C c; E e; F f;');
     var library =
         await checkLibrary('library l; part "a.dart"; part "b.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 library l;
 part 'a.dart';
 part 'b.dart';
@@ -11658,38 +8939,13 @@
 E e;
 F f;
 ''');
-    } else {
-      checkElementText(library, r'''
-library l;
-part 'a.dart';
-part 'b.dart';
---------------------
-unit: a.dart
-
-typedef dynamic F();
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v;
-}
-class C {
-}
---------------------
-unit: b.dart
-
-C c;
-E e;
-F f;
-''');
-    }
   }
 
   test_type_reference_part_to_part() async {
     addSource('/a.dart',
         'part of l; class C {} enum E { v } typedef F(); C c; E e; F f;');
     var library = await checkLibrary('library l; part "a.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 library l;
 part 'a.dart';
 --------------------
@@ -11707,83 +8963,38 @@
 E e;
 F f;
 ''');
-    } else {
-      checkElementText(library, r'''
-library l;
-part 'a.dart';
---------------------
-unit: a.dart
-
-typedef dynamic F();
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v;
-}
-class C {
-}
-C c;
-E e;
-F f;
-''');
-    }
   }
 
   test_type_reference_to_class() async {
     var library = await checkLibrary('class C {} C c;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C {
 }
 C c;
 ''');
-    } else {
-      checkElementText(library, r'''
-class C {
-}
-C c;
-''');
-    }
   }
 
   test_type_reference_to_class_with_type_arguments() async {
     var library = await checkLibrary('class C<T, U> {} C<int, String> c;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T, U> {
 }
 C<int, String> c;
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T, U> {
-}
-C<int, String> c;
-''');
-    }
   }
 
   test_type_reference_to_class_with_type_arguments_implicit() async {
     var library = await checkLibrary('class C<T, U> {} C c;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class C<T, U> {
 }
 C<dynamic, dynamic> c;
 ''');
-    } else {
-      checkElementText(library, r'''
-class C<T, U> {
-}
-C<dynamic, dynamic> c;
-''');
-    }
   }
 
   test_type_reference_to_enum() async {
     var library = await checkLibrary('enum E { v } E e;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 enum E {
   synthetic final int index;
   synthetic static const List<E> values;
@@ -11791,57 +9002,29 @@
 }
 E e;
 ''');
-    } else {
-      checkElementText(library, r'''
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v;
-}
-E e;
-''');
-    }
   }
 
   test_type_reference_to_import() async {
     addLibrarySource('/a.dart', 'class C {} enum E { v }; typedef F();');
     var library = await checkLibrary('import "a.dart"; C c; E e; F f;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart';
 C c;
 E e;
 F f;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart';
-C c;
-E e;
-F f;
-''');
-    }
   }
 
   test_type_reference_to_import_export() async {
     addLibrarySource('/a.dart', 'export "b.dart";');
     addLibrarySource('/b.dart', 'class C {} enum E { v } typedef F();');
     var library = await checkLibrary('import "a.dart"; C c; E e; F f;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart';
 C c;
 E e;
 F f;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart';
-C c;
-E e;
-F f;
-''');
-    }
   }
 
   test_type_reference_to_import_export_export() async {
@@ -11849,21 +9032,12 @@
     addLibrarySource('/b.dart', 'export "c.dart";');
     addLibrarySource('/c.dart', 'class C {} enum E { v } typedef F();');
     var library = await checkLibrary('import "a.dart"; C c; E e; F f;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart';
 C c;
 E e;
 F f;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart';
-C c;
-E e;
-F f;
-''');
-    }
   }
 
   test_type_reference_to_import_export_export_in_subdirs() async {
@@ -11871,63 +9045,36 @@
     addLibrarySource('/a/b/b.dart', 'export "../c/c.dart";');
     addLibrarySource('/a/c/c.dart', 'class C {} enum E { v } typedef F();');
     var library = await checkLibrary('import "a/a.dart"; C c; E e; F f;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
-import 'a/a.dart';
+    checkElementText(library, r'''
+import 'a.dart';
 C c;
 E e;
 F f;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a/a.dart';
-C c;
-E e;
-F f;
-''');
-    }
   }
 
   test_type_reference_to_import_export_in_subdirs() async {
     addLibrarySource('/a/a.dart', 'export "b/b.dart";');
     addLibrarySource('/a/b/b.dart', 'class C {} enum E { v } typedef F();');
     var library = await checkLibrary('import "a/a.dart"; C c; E e; F f;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
-import 'a/a.dart';
+    checkElementText(library, r'''
+import 'a.dart';
 C c;
 E e;
 F f;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a/a.dart';
-C c;
-E e;
-F f;
-''');
-    }
   }
 
   test_type_reference_to_import_part() async {
     addLibrarySource('/a.dart', 'library l; part "b.dart";');
     addSource('/b.dart', 'part of l; class C {} enum E { v } typedef F();');
     var library = await checkLibrary('import "a.dart"; C c; E e; F f;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart';
 C c;
 E e;
 F f;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart';
-C c;
-E e;
-F f;
-''');
-    }
   }
 
   test_type_reference_to_import_part2() async {
@@ -11935,135 +9082,75 @@
     addSource('/p1.dart', 'part of l; class C1 {}');
     addSource('/p2.dart', 'part of l; class C2 {}');
     var library = await checkLibrary('import "a.dart"; C1 c1; C2 c2;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart';
 C1 c1;
 C2 c2;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart';
-C1 c1;
-C2 c2;
-''');
-    }
   }
 
   test_type_reference_to_import_part_in_subdir() async {
     addLibrarySource('/a/b.dart', 'library l; part "c.dart";');
     addSource('/a/c.dart', 'part of l; class C {} enum E { v } typedef F();');
     var library = await checkLibrary('import "a/b.dart"; C c; E e; F f;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
-import 'a/b.dart';
+    checkElementText(library, r'''
+import 'b.dart';
 C c;
 E e;
 F f;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a/b.dart';
-C c;
-E e;
-F f;
-''');
-    }
   }
 
   test_type_reference_to_import_relative() async {
     addLibrarySource('/a.dart', 'class C {} enum E { v } typedef F();');
     var library = await checkLibrary('import "a.dart"; C c; E e; F f;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'a.dart';
 C c;
 E e;
 F f;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'a.dart';
-C c;
-E e;
-F f;
-''');
-    }
   }
 
   test_type_reference_to_typedef() async {
     var library = await checkLibrary('typedef F(); F f;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef dynamic F();
 F f;
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef dynamic F();
-F f;
-''');
-    }
   }
 
   test_type_reference_to_typedef_with_type_arguments() async {
     var library =
         await checkLibrary('typedef U F<T, U>(T t); F<int, String> f;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef U F<T, U>(T t);
 F<int, String> f;
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef U F<T, U>(T t);
-F<int, String> f;
-''');
-    }
   }
 
   test_type_reference_to_typedef_with_type_arguments_implicit() async {
     var library = await checkLibrary('typedef U F<T, U>(T t); F f;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef U F<T, U>(T t);
 F f;
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef U F<T, U>(T t);
-F f;
-''');
-    }
   }
 
   test_type_unresolved() async {
     var library = await checkLibrary('C c;', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic c;
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic c;
-''');
-    }
   }
 
   test_type_unresolved_prefixed() async {
     var library = await checkLibrary('import "dart:core" as core; core.C c;',
         allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'dart:core' as core;
 dynamic c;
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'dart:core' as core;
-dynamic c;
-''');
-    }
   }
 
   test_typedef_documented() async {
@@ -12073,35 +9160,20 @@
  * Docs
  */
 typedef F();''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 /**
  * Docs
  */
 typedef dynamic F();
 ''');
-    } else {
-      checkElementText(library, r'''
-/**
- * Docs
- */
-typedef dynamic F();
-''');
-    }
   }
 
   test_typedef_generic() async {
     var library = await checkLibrary(
         'typedef F<T> = int Function<S>(List<S> list, num Function<A>(A), T);');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef F<T> = int Function<S>(List<S> list, <A>(A) → num , T );
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef F<T> = int Function<S>(List<S> list, <A>(A) → num , T );
-''');
-    }
   }
 
   test_typedef_generic_asFieldType() async {
@@ -12112,182 +9184,99 @@
   Foo<int> f;
 }
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef Foo<S> = S Function<T>(T x);
 class A {
   <T>(T) → int f;
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef Foo<S> = S Function<T>(T x);
-class A {
-  <T>(T) → int f;
-}
-''');
-    }
   }
 
   test_typedef_parameter_parameters() async {
     var library = await checkLibrary('typedef F(g(x, y));');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef dynamic F((dynamic, dynamic) → dynamic g);
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef dynamic F((dynamic, dynamic) → dynamic g);
-''');
-    }
   }
 
   test_typedef_parameter_parameters_in_generic_class() async {
     var library = await checkLibrary('typedef F<A, B>(A g(B x));');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef dynamic F<A, B>((B) → A g);
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef dynamic F<A, B>((B) → A g);
-''');
-    }
   }
 
   test_typedef_parameter_return_type() async {
     var library = await checkLibrary('typedef F(int g());');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef dynamic F(() → int g);
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef dynamic F(() → int g);
-''');
-    }
   }
 
   test_typedef_parameter_type() async {
     var library = await checkLibrary('typedef F(int i);');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef dynamic F(int i);
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef dynamic F(int i);
-''');
-    }
   }
 
   test_typedef_parameter_type_generic() async {
     var library = await checkLibrary('typedef F<T>(T t);');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef dynamic F<T>(T t);
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef dynamic F<T>(T t);
-''');
-    }
   }
 
   test_typedef_parameters() async {
     var library = await checkLibrary('typedef F(x, y);');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef dynamic F(dynamic x, dynamic y);
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef dynamic F(dynamic x, dynamic y);
-''');
-    }
   }
 
   test_typedef_return_type() async {
     var library = await checkLibrary('typedef int F();');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef int F();
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef int F();
-''');
-    }
   }
 
   test_typedef_return_type_generic() async {
     var library = await checkLibrary('typedef T F<T>();');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef T F<T>();
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef T F<T>();
-''');
-    }
   }
 
   test_typedef_return_type_implicit() async {
     var library = await checkLibrary('typedef F();');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef dynamic F();
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef dynamic F();
-''');
-    }
   }
 
   test_typedef_return_type_void() async {
     var library = await checkLibrary('typedef void F();');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef void F();
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef void F();
-''');
-    }
   }
 
   test_typedef_type_parameters() async {
     var library = await checkLibrary('typedef U F<T, U>(T t);');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef U F<T, U>(T t);
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef U F<T, U>(T t);
-''');
-    }
   }
 
   test_typedef_type_parameters_bound() async {
     var library = await checkLibrary(
         'typedef U F<T extends Object, U extends D>(T t); class D {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef U F<T extends Object, U extends D>(T t);
 class D {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef U F<T extends Object, U extends D>(T t);
-class D {
-}
-''');
-    }
   }
 
   test_typedef_type_parameters_bound_recursive() async {
@@ -12308,43 +9297,24 @@
 
   test_typedef_type_parameters_f_bound_complex() async {
     var library = await checkLibrary('typedef U F<T extends List<U>, U>(T t);');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef U F<T extends List<U>, U>(T t);
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef U F<T extends List<U>, U>(T t);
-''');
-    }
   }
 
   test_typedef_type_parameters_f_bound_simple() async {
     var library = await checkLibrary('typedef U F<T extends U, U>(T t);');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 typedef U F<T extends U, U>(T t);
 ''');
-    } else {
-      checkElementText(library, r'''
-typedef U F<T extends U, U>(T t);
-''');
-    }
   }
 
   test_typedefs() async {
     var library = await checkLibrary('f() {} g() {}');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic f() {}
 dynamic g() {}
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic f() {}
-dynamic g() {}
-''');
-    }
   }
 
   @failingTest
@@ -12358,8 +9328,7 @@
 @A(super)
 class C {}
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class A {
   A(_);
 }
@@ -12368,17 +9337,6 @@
   synthetic C();
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class A {
-  A(_);
-}
-
-class C {
-  synthetic C();
-}
-''');
-    }
   }
 
   test_unresolved_annotation_instanceCreation_argument_this() async {
@@ -12390,8 +9348,7 @@
 @A(this)
 class C {}
 ''', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 class A {
   const A(dynamic _);
 }
@@ -12400,90 +9357,48 @@
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-class A {
-  const A(dynamic _);
-}
-@
-        A/*location: test.dart;A*/(this)
-class C {
-}
-''');
-    }
   }
 
   test_unresolved_annotation_namedConstructorCall_noClass() async {
     var library =
         await checkLibrary('@foo.bar() class C {}', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 @
         foo/*location: null*/.
         bar/*location: null*/()
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-@
-        foo/*location: null*/.
-        bar/*location: null*/()
-class C {
-}
-''');
-    }
   }
 
   test_unresolved_annotation_namedConstructorCall_noConstructor() async {
     var library =
         await checkLibrary('@String.foo() class C {}', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 @
         String/*location: dart:core;String*/.
         foo/*location: null*/()
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-@
-        String/*location: dart:core;String*/.
-        foo/*location: null*/()
-class C {
-}
-''');
-    }
   }
 
   test_unresolved_annotation_prefixedIdentifier_badPrefix() async {
     var library = await checkLibrary('@foo.bar class C {}', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 @
         foo/*location: null*/.
         bar/*location: null*/
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-@
-        foo/*location: null*/.
-        bar/*location: null*/
-class C {
-}
-''');
-    }
   }
 
   test_unresolved_annotation_prefixedIdentifier_noDeclaration() async {
     var library = await checkLibrary(
         'import "dart:async" as foo; @foo.bar class C {}',
         allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'dart:async' as foo;
 @
         foo/*location: test.dart;foo*/.
@@ -12491,23 +9406,12 @@
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'dart:async' as foo;
-@
-        foo/*location: test.dart;foo*/.
-        bar/*location: null*/
-class C {
-}
-''');
-    }
   }
 
   test_unresolved_annotation_prefixedNamedConstructorCall_badPrefix() async {
     var library =
         await checkLibrary('@foo.bar.baz() class C {}', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 @
         foo/*location: null*/.
         bar/*location: null*/.
@@ -12515,24 +9419,13 @@
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-@
-        foo/*location: null*/.
-        bar/*location: null*/.
-        baz/*location: null*/()
-class C {
-}
-''');
-    }
   }
 
   test_unresolved_annotation_prefixedNamedConstructorCall_noClass() async {
     var library = await checkLibrary(
         'import "dart:async" as foo; @foo.bar.baz() class C {}',
         allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'dart:async' as foo;
 @
         foo/*location: test.dart;foo*/.
@@ -12541,25 +9434,13 @@
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'dart:async' as foo;
-@
-        foo/*location: test.dart;foo*/.
-        bar/*location: null*/.
-        baz/*location: null*/()
-class C {
-}
-''');
-    }
   }
 
   test_unresolved_annotation_prefixedNamedConstructorCall_noConstructor() async {
     var library = await checkLibrary(
         'import "dart:async" as foo; @foo.Future.bar() class C {}',
         allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'dart:async' as foo;
 @
         foo/*location: test.dart;foo*/.
@@ -12568,47 +9449,25 @@
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'dart:async' as foo;
-@
-        foo/*location: test.dart;foo*/.
-        Future/*location: dart:async;Future*/.
-        bar/*location: null*/()
-class C {
-}
-''');
-    }
   }
 
   test_unresolved_annotation_prefixedUnnamedConstructorCall_badPrefix() async {
     var library =
         await checkLibrary('@foo.bar() class C {}', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 @
         foo/*location: null*/.
         bar/*location: null*/()
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-@
-        foo/*location: null*/.
-        bar/*location: null*/()
-class C {
-}
-''');
-    }
   }
 
   test_unresolved_annotation_prefixedUnnamedConstructorCall_noClass() async {
     var library = await checkLibrary(
         'import "dart:async" as foo; @foo.bar() class C {}',
         allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'dart:async' as foo;
 @
         foo/*location: test.dart;foo*/.
@@ -12616,68 +9475,34 @@
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'dart:async' as foo;
-@
-        foo/*location: test.dart;foo*/.
-        bar/*location: null*/()
-class C {
-}
-''');
-    }
   }
 
   test_unresolved_annotation_simpleIdentifier() async {
     var library = await checkLibrary('@foo class C {}', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 @
         foo/*location: null*/
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-@
-        foo/*location: null*/
-class C {
-}
-''');
-    }
   }
 
   test_unresolved_annotation_unnamedConstructorCall_noClass() async {
     var library = await checkLibrary('@foo() class C {}', allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 @
         foo/*location: null*/()
 class C {
 }
 ''');
-    } else {
-      checkElementText(library, r'''
-@
-        foo/*location: null*/()
-class C {
-}
-''');
-    }
   }
 
   test_unresolved_export() async {
     allowMissingFiles = true;
     var library = await checkLibrary("export 'foo.dart';", allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 export 'foo.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-export 'foo.dart';
-''');
-    }
   }
 
   test_unresolved_import() async {
@@ -12687,35 +9512,20 @@
     expect(importedLibrary.loadLibraryFunction, isNotNull);
     expect(importedLibrary.publicNamespace, isNotNull);
     expect(importedLibrary.exportNamespace, isNotNull);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 import 'foo.dart';
 ''');
-    } else {
-      checkElementText(library, r'''
-import 'foo.dart';
-''');
-    }
   }
 
   test_unresolved_part() async {
     allowMissingFiles = true;
     var library = await checkLibrary("part 'foo.dart';", allowErrors: true);
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 part 'foo.dart';
 --------------------
 unit: foo.dart
 
 ''');
-    } else {
-      checkElementText(library, r'''
-part 'foo.dart';
---------------------
-unit: foo.dart
-
-''');
-    }
   }
 
   test_unused_type_parameter() async {
@@ -12747,15 +9557,9 @@
 
   test_variable_const() async {
     var library = await checkLibrary('const int i = 0;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 const int i = 0;
 ''');
-    } else {
-      checkElementText(library, r'''
-const int i = 0;
-''');
-    }
   }
 
   test_variable_documented() async {
@@ -12765,34 +9569,19 @@
  * Docs
  */
 var x;''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 /**
  * Docs
  */
 dynamic x;
 ''');
-    } else {
-      checkElementText(library, r'''
-/**
- * Docs
- */
-dynamic x;
-''');
-    }
   }
 
   test_variable_final() async {
     var library = await checkLibrary('final int x = 0;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 final int x;
 ''');
-    } else {
-      checkElementText(library, r'''
-final int x;
-''');
-    }
   }
 
   test_variable_final_top_level_untyped() async {
@@ -12817,8 +9606,7 @@
 library my.lib;
 part 'a.dart';
 int get x => 42;''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 library my.lib;
 part 'a.dart';
 int get x {}
@@ -12827,17 +9615,6 @@
 
 void set x(int _) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-library my.lib;
-part 'a.dart';
-int get x {}
---------------------
-unit: a.dart
-
-void set x(int _) {}
-''');
-    }
   }
 
   test_variable_getterInPart_setterInLib() async {
@@ -12850,8 +9627,7 @@
 part 'a.dart';
 void set x(int _) {}
 ''');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 library my.lib;
 part 'a.dart';
 void set x(int _) {}
@@ -12860,17 +9636,6 @@
 
 int get x {}
 ''');
-    } else {
-      checkElementText(library, r'''
-library my.lib;
-part 'a.dart';
-void set x(int _) {}
---------------------
-unit: a.dart
-
-int get x {}
-''');
-    }
   }
 
   test_variable_getterInPart_setterInPart() async {
@@ -12878,8 +9643,7 @@
     addSource('/b.dart', 'part of my.lib; void set x(int _) {}');
     var library =
         await checkLibrary('library my.lib; part "a.dart"; part "b.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 library my.lib;
 part 'a.dart';
 part 'b.dart';
@@ -12892,34 +9656,13 @@
 
 void set x(int _) {}
 ''');
-    } else {
-      checkElementText(library, r'''
-library my.lib;
-part 'a.dart';
-part 'b.dart';
---------------------
-unit: a.dart
-
-int get x {}
---------------------
-unit: b.dart
-
-void set x(int _) {}
-''');
-    }
   }
 
   test_variable_implicit_type() async {
     var library = await checkLibrary('var x;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 dynamic x;
 ''');
-    } else {
-      checkElementText(library, r'''
-dynamic x;
-''');
-    }
   }
 
   test_variable_inferred_type_implicit_initialized() async {
@@ -13027,8 +9770,7 @@
     addSource('/b.dart', 'part of my.lib; int get x => 42;');
     var library =
         await checkLibrary('library my.lib; part "a.dart"; part "b.dart";');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 library my.lib;
 part 'a.dart';
 part 'b.dart';
@@ -13041,36 +9783,14 @@
 
 int get x {}
 ''');
-    } else {
-      checkElementText(library, r'''
-library my.lib;
-part 'a.dart';
-part 'b.dart';
---------------------
-unit: a.dart
-
-void set x(int _) {}
---------------------
-unit: b.dart
-
-int get x {}
-''');
-    }
   }
 
   test_variables() async {
     var library = await checkLibrary('int i; int j;');
-    if (isStrongMode) {
-      checkElementText(library, r'''
+    checkElementText(library, r'''
 int i;
 int j;
 ''');
-    } else {
-      checkElementText(library, r'''
-int i;
-int j;
-''');
-    }
   }
 
   /**
diff --git a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
index f5d1d30..637d796 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
@@ -6,6 +6,10 @@
 
 import 'dart:async';
 
+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/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
@@ -13,6 +17,7 @@
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
 import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/generated/testing/ast_test_factory.dart';
 import 'package:analyzer/src/summary/resynthesize.dart';
 import 'package:front_end/file_system.dart';
 import 'package:front_end/src/base/performace_logger.dart';
@@ -21,6 +26,7 @@
 import 'package:front_end/src/incremental/kernel_driver.dart';
 import 'package:kernel/kernel.dart' as kernel;
 import 'package:kernel/target/targets.dart';
+import 'package:kernel/type_environment.dart' as kernel;
 import 'package:package_config/packages.dart';
 import 'package:path/path.dart' as pathos;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -39,6 +45,9 @@
   final resourceProvider = new MemoryResourceProvider(context: pathos.posix);
 
   @override
+  bool get isSharedFrontEnd => true;
+
+  @override
   bool get isStrongMode => true;
 
   @override
@@ -88,7 +97,8 @@
       }
     }
 
-    var resynthesizer = new _KernelResynthesizer(context, libraryMap);
+    var resynthesizer =
+        new _KernelResynthesizer(context, kernelResult.types, libraryMap);
     return resynthesizer.getLibrary(testUriStr);
   }
 
@@ -99,26 +109,11 @@
   }
 
   @failingTest
-  test_class_alias() async {
-    await super.test_class_alias();
-  }
-
-  @failingTest
-  test_class_alias_abstract() async {
-    await super.test_class_alias_abstract();
-  }
-
-  @failingTest
   test_class_alias_documented() async {
     await super.test_class_alias_documented();
   }
 
   @failingTest
-  test_class_alias_with_forwarding_constructors() async {
-    await super.test_class_alias_with_forwarding_constructors();
-  }
-
-  @failingTest
   test_class_alias_with_forwarding_constructors_type_substitution() async {
     await super
         .test_class_alias_with_forwarding_constructors_type_substitution();
@@ -131,91 +126,13 @@
   }
 
   @failingTest
-  test_class_alias_with_mixin_members() async {
-    await super.test_class_alias_with_mixin_members();
-  }
-
-  @failingTest
-  test_class_constructor_field_formal_dynamic_dynamic() async {
-    await super.test_class_constructor_field_formal_dynamic_dynamic();
-  }
-
-  @failingTest
-  test_class_constructor_field_formal_dynamic_typed() async {
-    await super.test_class_constructor_field_formal_dynamic_typed();
-  }
-
-  @failingTest
-  test_class_constructor_field_formal_dynamic_untyped() async {
-    await super.test_class_constructor_field_formal_dynamic_untyped();
-  }
-
-  @failingTest
   test_class_constructor_field_formal_multiple_matching_fields() async {
+    // Fasta does not generate the class.
+    // main() with a fatal error is generated instead.
     await super.test_class_constructor_field_formal_multiple_matching_fields();
   }
 
   @failingTest
-  test_class_constructor_field_formal_no_matching_field() async {
-    await super.test_class_constructor_field_formal_no_matching_field();
-  }
-
-  @failingTest
-  test_class_constructor_field_formal_typed_dynamic() async {
-    await super.test_class_constructor_field_formal_typed_dynamic();
-  }
-
-  @failingTest
-  test_class_constructor_field_formal_typed_typed() async {
-    await super.test_class_constructor_field_formal_typed_typed();
-  }
-
-  @failingTest
-  test_class_constructor_field_formal_typed_untyped() async {
-    await super.test_class_constructor_field_formal_typed_untyped();
-  }
-
-  @failingTest
-  test_class_constructor_field_formal_untyped_dynamic() async {
-    await super.test_class_constructor_field_formal_untyped_dynamic();
-  }
-
-  @failingTest
-  test_class_constructor_field_formal_untyped_typed() async {
-    await super.test_class_constructor_field_formal_untyped_typed();
-  }
-
-  @failingTest
-  test_class_constructor_field_formal_untyped_untyped() async {
-    await super.test_class_constructor_field_formal_untyped_untyped();
-  }
-
-  @failingTest
-  test_class_constructor_fieldFormal_named_noDefault() async {
-    await super.test_class_constructor_fieldFormal_named_noDefault();
-  }
-
-  @failingTest
-  test_class_constructor_fieldFormal_named_withDefault() async {
-    await super.test_class_constructor_fieldFormal_named_withDefault();
-  }
-
-  @failingTest
-  test_class_constructor_fieldFormal_optional_noDefault() async {
-    await super.test_class_constructor_fieldFormal_optional_noDefault();
-  }
-
-  @failingTest
-  test_class_constructor_fieldFormal_optional_withDefault() async {
-    await super.test_class_constructor_fieldFormal_optional_withDefault();
-  }
-
-  @failingTest
-  test_class_constructor_params() async {
-    await super.test_class_constructor_params();
-  }
-
-  @failingTest
   test_class_documented_tripleSlash() async {
     await super.test_class_documented_tripleSlash();
   }
@@ -226,136 +143,16 @@
   }
 
   @failingTest
-  test_class_field_const() async {
-    await super.test_class_field_const();
-  }
-
-  @failingTest
-  test_class_field_implicit_type() async {
-    await super.test_class_field_implicit_type();
-  }
-
-  @failingTest
-  test_class_field_static() async {
-    await super.test_class_field_static();
-  }
-
-  @failingTest
-  test_class_fields() async {
-    await super.test_class_fields();
-  }
-
-  @failingTest
-  test_class_getter_abstract() async {
-    await super.test_class_getter_abstract();
-  }
-
-  @failingTest
-  test_class_getter_external() async {
-    await super.test_class_getter_external();
-  }
-
-  @failingTest
-  test_class_getter_implicit_return_type() async {
-    await super.test_class_getter_implicit_return_type();
-  }
-
-  @failingTest
-  test_class_getter_static() async {
-    await super.test_class_getter_static();
-  }
-
-  @failingTest
-  test_class_getters() async {
-    await super.test_class_getters();
-  }
-
-  @failingTest
-  test_class_implicitField_getterFirst() async {
-    await super.test_class_implicitField_getterFirst();
-  }
-
-  @failingTest
-  test_class_implicitField_setterFirst() async {
-    await super.test_class_implicitField_setterFirst();
-  }
-
-  @failingTest
   test_class_interfaces_unresolved() async {
     await super.test_class_interfaces_unresolved();
   }
 
   @failingTest
-  test_class_method_abstract() async {
-    await super.test_class_method_abstract();
-  }
-
-  @failingTest
-  test_class_method_external() async {
-    await super.test_class_method_external();
-  }
-
-  @failingTest
-  test_class_method_params() async {
-    await super.test_class_method_params();
-  }
-
-  @failingTest
-  test_class_method_static() async {
-    await super.test_class_method_static();
-  }
-
-  @failingTest
-  test_class_methods() async {
-    await super.test_class_methods();
-  }
-
-  @failingTest
-  test_class_mixins() async {
-    await super.test_class_mixins();
-  }
-
-  @failingTest
   test_class_mixins_unresolved() async {
     await super.test_class_mixins_unresolved();
   }
 
   @failingTest
-  test_class_setter_abstract() async {
-    await super.test_class_setter_abstract();
-  }
-
-  @failingTest
-  test_class_setter_external() async {
-    await super.test_class_setter_external();
-  }
-
-  @failingTest
-  test_class_setter_implicit_param_type() async {
-    await super.test_class_setter_implicit_param_type();
-  }
-
-  @failingTest
-  test_class_setter_implicit_return_type() async {
-    await super.test_class_setter_implicit_return_type();
-  }
-
-  @failingTest
-  test_class_setter_invalid_no_parameter() async {
-    await super.test_class_setter_invalid_no_parameter();
-  }
-
-  @failingTest
-  test_class_setter_static() async {
-    await super.test_class_setter_static();
-  }
-
-  @failingTest
-  test_class_setters() async {
-    await super.test_class_setters();
-  }
-
-  @failingTest
   test_class_supertype_unresolved() async {
     await super.test_class_supertype_unresolved();
   }
@@ -371,16 +168,6 @@
   }
 
   @failingTest
-  test_class_type_parameters_f_bound_simple() async {
-    await super.test_class_type_parameters_f_bound_simple();
-  }
-
-  @failingTest
-  test_closure_executable_with_return_type_from_closure() async {
-    await super.test_closure_executable_with_return_type_from_closure();
-  }
-
-  @failingTest
   test_closure_generic() async {
     await super.test_closure_generic();
   }
@@ -411,53 +198,18 @@
   }
 
   @failingTest
-  test_const_invokeConstructor_generic_named() async {
-    await super.test_const_invokeConstructor_generic_named();
-  }
-
-  @failingTest
-  test_const_invokeConstructor_generic_named_imported() async {
-    await super.test_const_invokeConstructor_generic_named_imported();
-  }
-
-  @failingTest
   test_const_invokeConstructor_generic_named_imported_withPrefix() async {
     await super
         .test_const_invokeConstructor_generic_named_imported_withPrefix();
   }
 
   @failingTest
-  test_const_invokeConstructor_generic_noTypeArguments() async {
-    await super.test_const_invokeConstructor_generic_noTypeArguments();
-  }
-
-  @failingTest
-  test_const_invokeConstructor_generic_unnamed() async {
-    await super.test_const_invokeConstructor_generic_unnamed();
-  }
-
-  @failingTest
-  test_const_invokeConstructor_generic_unnamed_imported() async {
-    await super.test_const_invokeConstructor_generic_unnamed_imported();
-  }
-
-  @failingTest
   test_const_invokeConstructor_generic_unnamed_imported_withPrefix() async {
     await super
         .test_const_invokeConstructor_generic_unnamed_imported_withPrefix();
   }
 
   @failingTest
-  test_const_invokeConstructor_named() async {
-    await super.test_const_invokeConstructor_named();
-  }
-
-  @failingTest
-  test_const_invokeConstructor_named_imported() async {
-    await super.test_const_invokeConstructor_named_imported();
-  }
-
-  @failingTest
   test_const_invokeConstructor_named_imported_withPrefix() async {
     await super.test_const_invokeConstructor_named_imported_withPrefix();
   }
@@ -493,16 +245,6 @@
   }
 
   @failingTest
-  test_const_invokeConstructor_unnamed() async {
-    await super.test_const_invokeConstructor_unnamed();
-  }
-
-  @failingTest
-  test_const_invokeConstructor_unnamed_imported() async {
-    await super.test_const_invokeConstructor_unnamed_imported();
-  }
-
-  @failingTest
   test_const_invokeConstructor_unnamed_imported_withPrefix() async {
     await super.test_const_invokeConstructor_unnamed_imported_withPrefix();
   }
@@ -523,31 +265,11 @@
   }
 
   @failingTest
-  test_const_length_ofClassConstField() async {
-    await super.test_const_length_ofClassConstField();
-  }
-
-  @failingTest
-  test_const_length_ofClassConstField_imported() async {
-    await super.test_const_length_ofClassConstField_imported();
-  }
-
-  @failingTest
   test_const_length_ofClassConstField_imported_withPrefix() async {
     await super.test_const_length_ofClassConstField_imported_withPrefix();
   }
 
   @failingTest
-  test_const_length_ofStringLiteral() async {
-    await super.test_const_length_ofStringLiteral();
-  }
-
-  @failingTest
-  test_const_length_ofTopLevelVariable() async {
-    await super.test_const_length_ofTopLevelVariable();
-  }
-
-  @failingTest
   test_const_length_ofTopLevelVariable_imported() async {
     await super.test_const_length_ofTopLevelVariable_imported();
   }
@@ -563,38 +285,6 @@
   }
 
   @failingTest
-  test_const_parameterDefaultValue_initializingFormal_functionTyped() async {
-    await super
-        .test_const_parameterDefaultValue_initializingFormal_functionTyped();
-  }
-
-  @failingTest
-  test_const_parameterDefaultValue_initializingFormal_named() async {
-    await super.test_const_parameterDefaultValue_initializingFormal_named();
-  }
-
-  @failingTest
-  test_const_parameterDefaultValue_initializingFormal_positional() async {
-    await super
-        .test_const_parameterDefaultValue_initializingFormal_positional();
-  }
-
-  @failingTest
-  test_const_parameterDefaultValue_normal() async {
-    await super.test_const_parameterDefaultValue_normal();
-  }
-
-  @failingTest
-  test_const_reference_staticField() async {
-    await super.test_const_reference_staticField();
-  }
-
-  @failingTest
-  test_const_reference_staticField_imported() async {
-    await super.test_const_reference_staticField_imported();
-  }
-
-  @failingTest
   test_const_reference_staticField_imported_withPrefix() async {
     await super.test_const_reference_staticField_imported_withPrefix();
   }
@@ -630,16 +320,6 @@
   }
 
   @failingTest
-  test_const_reference_topLevelVariable() async {
-    await super.test_const_reference_topLevelVariable();
-  }
-
-  @failingTest
-  test_const_reference_topLevelVariable_imported() async {
-    await super.test_const_reference_topLevelVariable_imported();
-  }
-
-  @failingTest
   test_const_reference_topLevelVariable_imported_withPrefix() async {
     await super.test_const_reference_topLevelVariable_imported_withPrefix();
   }
@@ -685,36 +365,11 @@
   }
 
   @failingTest
-  test_const_topLevel_binary() async {
-    await super.test_const_topLevel_binary();
-  }
-
-  @failingTest
-  test_const_topLevel_conditional() async {
-    await super.test_const_topLevel_conditional();
-  }
-
-  @failingTest
-  test_const_topLevel_identical() async {
-    await super.test_const_topLevel_identical();
-  }
-
-  @failingTest
   test_const_topLevel_ifNull() async {
     await super.test_const_topLevel_ifNull();
   }
 
   @failingTest
-  test_const_topLevel_literal() async {
-    await super.test_const_topLevel_literal();
-  }
-
-  @failingTest
-  test_const_topLevel_prefix() async {
-    await super.test_const_topLevel_prefix();
-  }
-
-  @failingTest
   test_const_topLevel_super() async {
     await super.test_const_topLevel_super();
   }
@@ -725,36 +380,11 @@
   }
 
   @failingTest
-  test_const_topLevel_typedList() async {
-    await super.test_const_topLevel_typedList();
-  }
-
-  @failingTest
-  test_const_topLevel_typedList_imported() async {
-    await super.test_const_topLevel_typedList_imported();
-  }
-
-  @failingTest
   test_const_topLevel_typedList_importedWithPrefix() async {
     await super.test_const_topLevel_typedList_importedWithPrefix();
   }
 
   @failingTest
-  test_const_topLevel_typedMap() async {
-    await super.test_const_topLevel_typedMap();
-  }
-
-  @failingTest
-  test_const_topLevel_untypedList() async {
-    await super.test_const_topLevel_untypedList();
-  }
-
-  @failingTest
-  test_const_topLevel_untypedMap() async {
-    await super.test_const_topLevel_untypedMap();
-  }
-
-  @failingTest
   test_constExpr_pushReference_enum_field() async {
     await super.test_constExpr_pushReference_enum_field();
   }
@@ -765,11 +395,6 @@
   }
 
   @failingTest
-  test_constExpr_pushReference_field_simpleIdentifier() async {
-    await super.test_constExpr_pushReference_field_simpleIdentifier();
-  }
-
-  @failingTest
   test_constExpr_pushReference_staticMethod_simpleIdentifier() async {
     await super.test_constExpr_pushReference_staticMethod_simpleIdentifier();
   }
@@ -865,6 +490,17 @@
   }
 
   @failingTest
+  test_constructor_redirected_factory_named_unresolved_class() async {
+    await super.test_constructor_redirected_factory_named_unresolved_class();
+  }
+
+  @failingTest
+  test_constructor_redirected_factory_named_unresolved_constructor() async {
+    await super
+        .test_constructor_redirected_factory_named_unresolved_constructor();
+  }
+
+  @failingTest
   test_constructor_redirected_factory_unnamed() async {
     await super.test_constructor_redirected_factory_unnamed();
   }
@@ -895,6 +531,11 @@
   }
 
   @failingTest
+  test_constructor_redirected_factory_unnamed_unresolved() async {
+    await super.test_constructor_redirected_factory_unnamed_unresolved();
+  }
+
+  @failingTest
   test_constructor_redirected_thisInvocation_named() async {
     await super.test_constructor_redirected_thisInvocation_named();
   }
@@ -920,11 +561,6 @@
   }
 
   @failingTest
-  test_constructor_withCycles_nonConst() async {
-    await super.test_constructor_withCycles_nonConst();
-  }
-
-  @failingTest
   test_defaultValue_refersToGenericClass_constructor() async {
     await super.test_defaultValue_refersToGenericClass_constructor();
   }
@@ -1090,36 +726,6 @@
   }
 
   @failingTest
-  test_field_formal_param_inferred_type_implicit() async {
-    await super.test_field_formal_param_inferred_type_implicit();
-  }
-
-  @failingTest
-  test_field_inferred_type_nonStatic_explicit_initialized() async {
-    await super.test_field_inferred_type_nonStatic_explicit_initialized();
-  }
-
-  @failingTest
-  test_field_inferred_type_nonStatic_implicit_initialized() async {
-    await super.test_field_inferred_type_nonStatic_implicit_initialized();
-  }
-
-  @failingTest
-  test_field_inferred_type_nonStatic_implicit_uninitialized() async {
-    await super.test_field_inferred_type_nonStatic_implicit_uninitialized();
-  }
-
-  @failingTest
-  test_field_inferred_type_static_implicit_initialized() async {
-    await super.test_field_inferred_type_static_implicit_initialized();
-  }
-
-  @failingTest
-  test_field_propagatedType_const_noDep() async {
-    await super.test_field_propagatedType_const_noDep();
-  }
-
-  @failingTest
   test_field_propagatedType_final_dep_inLib() async {
     await super.test_field_propagatedType_final_dep_inLib();
   }
@@ -1135,41 +741,11 @@
   }
 
   @failingTest
-  test_field_propagatedType_final_noDep_static() async {
-    await super.test_field_propagatedType_final_noDep_static();
-  }
-
-  @failingTest
-  test_field_static_final_untyped() async {
-    await super.test_field_static_final_untyped();
-  }
-
-  @failingTest
-  test_field_untyped() async {
-    await super.test_field_untyped();
-  }
-
-  @failingTest
-  test_function_async() async {
-    await super.test_function_async();
-  }
-
-  @failingTest
-  test_function_asyncStar() async {
-    await super.test_function_asyncStar();
-  }
-
-  @failingTest
   test_function_documented() async {
     await super.test_function_documented();
   }
 
   @failingTest
-  test_function_entry_point() async {
-    await super.test_function_entry_point();
-  }
-
-  @failingTest
   test_function_entry_point_in_export() async {
     await super.test_function_entry_point_in_export();
   }
@@ -1185,31 +761,6 @@
   }
 
   @failingTest
-  test_function_external() async {
-    await super.test_function_external();
-  }
-
-  @failingTest
-  test_function_parameter_final() async {
-    await super.test_function_parameter_final();
-  }
-
-  @failingTest
-  test_function_parameter_kind_named() async {
-    await super.test_function_parameter_kind_named();
-  }
-
-  @failingTest
-  test_function_parameter_kind_positional() async {
-    await super.test_function_parameter_kind_positional();
-  }
-
-  @failingTest
-  test_function_parameter_kind_required() async {
-    await super.test_function_parameter_kind_required();
-  }
-
-  @failingTest
   test_function_parameter_parameters() async {
     await super.test_function_parameter_parameters();
   }
@@ -1225,31 +776,6 @@
   }
 
   @failingTest
-  test_function_parameter_type() async {
-    await super.test_function_parameter_type();
-  }
-
-  @failingTest
-  test_function_parameters() async {
-    await super.test_function_parameters();
-  }
-
-  @failingTest
-  test_function_return_type() async {
-    await super.test_function_return_type();
-  }
-
-  @failingTest
-  test_function_return_type_implicit() async {
-    await super.test_function_return_type_implicit();
-  }
-
-  @failingTest
-  test_function_return_type_void() async {
-    await super.test_function_return_type_void();
-  }
-
-  @failingTest
   test_function_type_parameter() async {
     await super.test_function_type_parameter();
   }
@@ -1260,16 +786,6 @@
   }
 
   @failingTest
-  test_function_typed_parameter_implicit() async {
-    await super.test_function_typed_parameter_implicit();
-  }
-
-  @failingTest
-  test_functions() async {
-    await super.test_functions();
-  }
-
-  @failingTest
   test_futureOr() async {
     await super.test_futureOr();
   }
@@ -1370,11 +886,6 @@
   }
 
   @failingTest
-  test_getter_inferred_type_nonStatic_implicit_return() async {
-    await super.test_getter_inferred_type_nonStatic_implicit_return();
-  }
-
-  @failingTest
   test_getters() async {
     await super.test_getters();
   }
@@ -1430,47 +941,22 @@
   }
 
   @failingTest
-  test_import_short_absolute() async {
-    await super.test_import_short_absolute();
-  }
-
-  @failingTest
   test_import_show() async {
     await super.test_import_show();
   }
 
   @failingTest
-  test_imports() async {
-    await super.test_imports();
-  }
-
-  @failingTest
   test_inferred_function_type_for_variable_in_generic_function() async {
     await super.test_inferred_function_type_for_variable_in_generic_function();
   }
 
   @failingTest
-  test_inferred_function_type_in_generic_class_constructor() async {
-    await super.test_inferred_function_type_in_generic_class_constructor();
-  }
-
-  @failingTest
-  test_inferred_function_type_in_generic_class_getter() async {
-    await super.test_inferred_function_type_in_generic_class_getter();
-  }
-
-  @failingTest
   test_inferred_function_type_in_generic_class_in_generic_method() async {
     await super
         .test_inferred_function_type_in_generic_class_in_generic_method();
   }
 
   @failingTest
-  test_inferred_function_type_in_generic_class_setter() async {
-    await super.test_inferred_function_type_in_generic_class_setter();
-  }
-
-  @failingTest
   test_inferred_type_is_typedef() async {
     await super.test_inferred_type_is_typedef();
   }
@@ -1532,11 +1018,6 @@
   }
 
   @failingTest
-  test_inheritance_errors() async {
-    await super.test_inheritance_errors();
-  }
-
-  @failingTest
   test_initializer_executable_with_return_type_from_closure() async {
     await super.test_initializer_executable_with_return_type_from_closure();
   }
@@ -1572,12 +1053,6 @@
   }
 
   @failingTest
-  test_initializer_executable_with_return_type_from_closure_local() async {
-    await super
-        .test_initializer_executable_with_return_type_from_closure_local();
-  }
-
-  @failingTest
   test_instantiateToBounds_boundRefersToEarlierTypeArgument() async {
     await super.test_instantiateToBounds_boundRefersToEarlierTypeArgument();
   }
@@ -1663,36 +1138,11 @@
   }
 
   @failingTest
-  test_localFunctions() async {
-    await super.test_localFunctions();
-  }
-
-  @failingTest
-  test_localFunctions_inMethod() async {
-    await super.test_localFunctions_inMethod();
-  }
-
-  @failingTest
   test_localFunctions_inTopLevelGetter() async {
     await super.test_localFunctions_inTopLevelGetter();
   }
 
   @failingTest
-  test_localLabels_inMethod() async {
-    await super.test_localLabels_inMethod();
-  }
-
-  @failingTest
-  test_localLabels_inTopLevelFunction() async {
-    await super.test_localLabels_inTopLevelFunction();
-  }
-
-  @failingTest
-  test_main_class_alias() async {
-    await super.test_main_class_alias();
-  }
-
-  @failingTest
   test_main_class_alias_via_export() async {
     await super.test_main_class_alias_via_export();
   }
@@ -1723,26 +1173,11 @@
   }
 
   @failingTest
-  test_main_variable() async {
-    await super.test_main_variable();
-  }
-
-  @failingTest
   test_main_variable_via_export() async {
     await super.test_main_variable_via_export();
   }
 
   @failingTest
-  test_member_function_async() async {
-    await super.test_member_function_async();
-  }
-
-  @failingTest
-  test_member_function_asyncStar() async {
-    await super.test_member_function_asyncStar();
-  }
-
-  @failingTest
   test_metadata_classDeclaration() async {
     await super.test_metadata_classDeclaration();
   }
@@ -1898,16 +1333,6 @@
   }
 
   @failingTest
-  test_metadata_typeParameter_ofClass() async {
-    await super.test_metadata_typeParameter_ofClass();
-  }
-
-  @failingTest
-  test_metadata_typeParameter_ofClassTypeAlias() async {
-    await super.test_metadata_typeParameter_ofClassTypeAlias();
-  }
-
-  @failingTest
   test_metadata_typeParameter_ofFunction() async {
     await super.test_metadata_typeParameter_ofFunction();
   }
@@ -1923,16 +1348,6 @@
   }
 
   @failingTest
-  test_method_inferred_type_nonStatic_implicit_param() async {
-    await super.test_method_inferred_type_nonStatic_implicit_param();
-  }
-
-  @failingTest
-  test_method_inferred_type_nonStatic_implicit_return() async {
-    await super.test_method_inferred_type_nonStatic_implicit_return();
-  }
-
-  @failingTest
   test_method_type_parameter() async {
     await super.test_method_type_parameter();
   }
@@ -1948,26 +1363,6 @@
   }
 
   @failingTest
-  test_nameConflict_exportedAndLocal() async {
-    await super.test_nameConflict_exportedAndLocal();
-  }
-
-  @failingTest
-  test_nameConflict_exportedAndLocal_exported() async {
-    await super.test_nameConflict_exportedAndLocal_exported();
-  }
-
-  @failingTest
-  test_nameConflict_exportedAndParted() async {
-    await super.test_nameConflict_exportedAndParted();
-  }
-
-  @failingTest
-  test_nameConflict_importWithRelativeUri_exportWithAbsolute() async {
-    await super.test_nameConflict_importWithRelativeUri_exportWithAbsolute();
-  }
-
-  @failingTest
   test_nested_generic_functions_in_generic_class_with_function_typed_params() async {
     await super
         .test_nested_generic_functions_in_generic_class_with_function_typed_params();
@@ -1990,41 +1385,6 @@
   }
 
   @failingTest
-  test_operator() async {
-    await super.test_operator();
-  }
-
-  @failingTest
-  test_operator_equal() async {
-    await super.test_operator_equal();
-  }
-
-  @failingTest
-  test_operator_external() async {
-    await super.test_operator_external();
-  }
-
-  @failingTest
-  test_operator_greater_equal() async {
-    await super.test_operator_greater_equal();
-  }
-
-  @failingTest
-  test_operator_index() async {
-    await super.test_operator_index();
-  }
-
-  @failingTest
-  test_operator_index_set() async {
-    await super.test_operator_index_set();
-  }
-
-  @failingTest
-  test_operator_less_equal() async {
-    await super.test_operator_less_equal();
-  }
-
-  @failingTest
   test_parameter_checked() async {
     await super.test_parameter_checked();
   }
@@ -2065,26 +1425,6 @@
   }
 
   @failingTest
-  test_parameterTypeNotInferred_constructor() async {
-    await super.test_parameterTypeNotInferred_constructor();
-  }
-
-  @failingTest
-  test_parameterTypeNotInferred_initializingFormal() async {
-    await super.test_parameterTypeNotInferred_initializingFormal();
-  }
-
-  @failingTest
-  test_parameterTypeNotInferred_staticMethod() async {
-    await super.test_parameterTypeNotInferred_staticMethod();
-  }
-
-  @failingTest
-  test_parameterTypeNotInferred_topLevelFunction() async {
-    await super.test_parameterTypeNotInferred_topLevelFunction();
-  }
-
-  @failingTest
   test_parts() async {
     await super.test_parts();
   }
@@ -2100,11 +1440,6 @@
   }
 
   @failingTest
-  test_propagated_type_refers_to_closure() async {
-    await super.test_propagated_type_refers_to_closure();
-  }
-
-  @failingTest
   test_setter_covariant() async {
     await super.test_setter_covariant();
   }
@@ -2120,16 +1455,6 @@
   }
 
   @failingTest
-  test_setter_inferred_type_nonStatic_implicit_param() async {
-    await super.test_setter_inferred_type_nonStatic_implicit_param();
-  }
-
-  @failingTest
-  test_setter_inferred_type_static_implicit_return() async {
-    await super.test_setter_inferred_type_static_implicit_return();
-  }
-
-  @failingTest
   test_setter_inferred_type_top_level_implicit_return() async {
     await super.test_setter_inferred_type_top_level_implicit_return();
   }
@@ -2160,31 +1485,6 @@
   }
 
   @failingTest
-  test_type_arguments_explicit_dynamic_dynamic() async {
-    await super.test_type_arguments_explicit_dynamic_dynamic();
-  }
-
-  @failingTest
-  test_type_arguments_explicit_dynamic_int() async {
-    await super.test_type_arguments_explicit_dynamic_int();
-  }
-
-  @failingTest
-  test_type_arguments_explicit_String_dynamic() async {
-    await super.test_type_arguments_explicit_String_dynamic();
-  }
-
-  @failingTest
-  test_type_arguments_implicit() async {
-    await super.test_type_arguments_implicit();
-  }
-
-  @failingTest
-  test_type_dynamic() async {
-    await super.test_type_dynamic();
-  }
-
-  @failingTest
   test_type_invalid_topLevelVariableElement_asType() async {
     await super.test_type_invalid_topLevelVariableElement_asType();
   }
@@ -2225,11 +1525,6 @@
   }
 
   @failingTest
-  test_type_reference_to_class_with_type_arguments_implicit() async {
-    await super.test_type_reference_to_class_with_type_arguments_implicit();
-  }
-
-  @failingTest
   test_type_reference_to_enum() async {
     await super.test_type_reference_to_enum();
   }
@@ -2265,11 +1560,6 @@
   }
 
   @failingTest
-  test_type_reference_to_import_part2() async {
-    await super.test_type_reference_to_import_part2();
-  }
-
-  @failingTest
   test_type_reference_to_import_part_in_subdir() async {
     await super.test_type_reference_to_import_part_in_subdir();
   }
@@ -2400,11 +1690,6 @@
   }
 
   @failingTest
-  test_typedefs() async {
-    await super.test_typedefs();
-  }
-
-  @failingTest
   test_unresolved_annotation_instanceCreation_argument_super() async {
     await super.test_unresolved_annotation_instanceCreation_argument_super();
   }
@@ -2495,11 +1780,6 @@
   }
 
   @failingTest
-  test_variable_const() async {
-    await super.test_variable_const();
-  }
-
-  @failingTest
   test_variable_documented() async {
     await super.test_variable_documented();
   }
@@ -2520,36 +1800,267 @@
   }
 
   @failingTest
-  test_variable_implicit_type() async {
-    await super.test_variable_implicit_type();
-  }
-
-  @failingTest
-  test_variable_propagatedType_const_noDep() async {
-    await super.test_variable_propagatedType_const_noDep();
-  }
-
-  @failingTest
-  test_variable_propagatedType_final_dep_inLib() async {
-    await super.test_variable_propagatedType_final_dep_inLib();
-  }
-
-  @failingTest
   test_variable_propagatedType_final_dep_inPart() async {
     await super.test_variable_propagatedType_final_dep_inPart();
   }
 
   @failingTest
-  test_variable_propagatedType_implicit_dep() async {
-    await super.test_variable_propagatedType_implicit_dep();
-  }
-
-  @failingTest
   test_variable_setterInPart_getterInPart() async {
     await super.test_variable_setterInPart_getterInPart();
   }
 }
 
+/**
+ * Builder of [Expression]s from [kernel.Expression]s.
+ */
+class _ExprBuilder {
+  final _KernelLibraryResynthesizerContextImpl _context;
+
+  _ExprBuilder(this._context);
+
+  Expression build(kernel.Expression expr) {
+    if (expr is kernel.NullLiteral) {
+      return AstTestFactory.nullLiteral();
+    }
+    if (expr is kernel.BoolLiteral) {
+      return AstTestFactory.booleanLiteral(expr.value);
+    }
+    if (expr is kernel.IntLiteral) {
+      return AstTestFactory.integer(expr.value);
+    }
+    if (expr is kernel.DoubleLiteral) {
+      return AstTestFactory.doubleLiteral(expr.value);
+    }
+    if (expr is kernel.StringLiteral) {
+      return AstTestFactory.string2(expr.value);
+    }
+    if (expr is kernel.StringConcatenation) {
+      List<InterpolationElement> elements = expr.expressions
+          .map(build)
+          .map(_newInterpolationElement)
+          .toList(growable: false);
+      return AstTestFactory.string(elements);
+    }
+    if (expr is kernel.SymbolLiteral) {
+      List<String> components = expr.value.split('.').toList();
+      return AstTestFactory.symbolLiteral(components);
+    }
+
+    if (expr is kernel.ListLiteral) {
+      Keyword keyword = expr.isConst ? Keyword.CONST : null;
+      var typeArguments = _buildTypeArgumentList([expr.typeArgument]);
+      var elements = expr.expressions.map(build).toList();
+      return AstTestFactory.listLiteral2(keyword, typeArguments, elements);
+    }
+
+    if (expr is kernel.MapLiteral) {
+      Keyword keyword = expr.isConst ? Keyword.CONST : null;
+      var typeArguments =
+          _buildTypeArgumentList([expr.keyType, expr.valueType]);
+
+      int numberOfEntries = expr.entries.length;
+      var entries = new List<MapLiteralEntry>(numberOfEntries);
+      for (int i = 0; i < numberOfEntries; i++) {
+        var entry = expr.entries[i];
+        Expression key = build(entry.key);
+        Expression value = build(entry.value);
+        entries[i] = AstTestFactory.mapLiteralEntry2(key, value);
+      }
+
+      return AstTestFactory.mapLiteral(keyword, typeArguments, entries);
+    }
+
+    if (expr is kernel.StaticGet) {
+      return _buildIdentifier(expr.targetReference, isGet: true);
+    }
+
+    if (expr is kernel.PropertyGet) {
+      Expression target = build(expr.receiver);
+      kernel.Reference reference = expr.interfaceTargetReference;
+      SimpleIdentifier identifier = _buildSimpleIdentifier(reference);
+      return AstTestFactory.propertyAccess(target, identifier);
+    }
+
+    if (expr is kernel.ConditionalExpression) {
+      var condition = build(expr.condition);
+      var then = build(expr.then);
+      var otherwise = build(expr.otherwise);
+      return AstTestFactory.conditionalExpression(condition, then, otherwise);
+    }
+
+    if (expr is kernel.Not) {
+      kernel.Expression kernelOperand = expr.operand;
+      var operand = build(kernelOperand);
+      return AstTestFactory.prefixExpression(TokenType.BANG, operand);
+    }
+
+    if (expr is kernel.LogicalExpression) {
+      var operator = _toBinaryOperatorTokenType(expr.operator);
+      var left = build(expr.left);
+      var right = build(expr.right);
+      return AstTestFactory.binaryExpression(left, operator, right);
+    }
+
+    if (expr is kernel.MethodInvocation) {
+      kernel.Member member = expr.interfaceTarget;
+      if (member is kernel.Procedure) {
+        if (member.kind == kernel.ProcedureKind.Operator) {
+          var left = build(expr.receiver);
+          String operatorName = expr.name.name;
+          List<kernel.Expression> args = expr.arguments.positional;
+          if (args.isEmpty) {
+            if (operatorName == 'unary-') {
+              return AstTestFactory.prefixExpression(TokenType.MINUS, left);
+            }
+            if (operatorName == '~') {
+              return AstTestFactory.prefixExpression(TokenType.TILDE, left);
+            }
+          } else if (args.length == 1) {
+            var operator = _toBinaryOperatorTokenType(operatorName);
+            var right = build(args.single);
+            return AstTestFactory.binaryExpression(left, operator, right);
+          }
+        }
+      }
+    }
+
+    if (expr is kernel.ConstructorInvocation) {
+      var element = _getElement(expr.targetReference);
+
+      var kernelType = expr.getStaticType(_context._resynthesizer._types);
+      var type = _context.getType(null, kernelType);
+      TypeName typeName = _buildType(type);
+
+      var constructorName = AstTestFactory.constructorName(
+          typeName, element.name.isNotEmpty ? element.name : null);
+      constructorName?.name?.staticElement = element;
+
+      var keyword = expr.isConst ? Keyword.CONST : Keyword.NEW;
+      var arguments = _toArguments(expr.arguments);
+      return AstTestFactory.instanceCreationExpression(
+          keyword, constructorName, arguments);
+    }
+
+    // TODO(scheglov): complete getExpression
+    throw new UnimplementedError('kernel: (${expr.runtimeType}) $expr');
+  }
+
+  Expression _buildIdentifier(kernel.Reference reference, {bool isGet: false}) {
+    Element element = _getElement(reference);
+    if (isGet && element is PropertyInducingElement) {
+      element = (element as PropertyInducingElement).getter;
+    }
+    SimpleIdentifier property = AstTestFactory.identifier3(element.displayName)
+      ..staticElement = element;
+    Element enclosingElement = element.enclosingElement;
+    if (enclosingElement is ClassElement) {
+      SimpleIdentifier classRef = AstTestFactory
+          .identifier3(enclosingElement.name)
+            ..staticElement = enclosingElement;
+      return AstTestFactory.propertyAccess(classRef, property);
+    } else {
+      return property;
+    }
+  }
+
+  SimpleIdentifier _buildSimpleIdentifier(kernel.Reference reference) {
+    String name = reference.canonicalName.name;
+    SimpleIdentifier identifier = AstTestFactory.identifier3(name);
+    Element element = _getElement(reference);
+    identifier.staticElement = element;
+    return identifier;
+  }
+
+  TypeAnnotation _buildType(DartType type) {
+    if (type is InterfaceType) {
+      var name = AstTestFactory.identifier3(type.element.name)
+        ..staticElement = type.element
+        ..staticType = type;
+      List<TypeAnnotation> arguments = _buildTypeArguments(type.typeArguments);
+      return AstTestFactory.typeName3(name, arguments)..type = type;
+    }
+    if (type is DynamicTypeImpl) {
+      var name = AstTestFactory.identifier3('dynamic')
+        ..staticElement = type.element
+        ..staticType = type;
+      return AstTestFactory.typeName3(name)..type = type;
+    }
+    // TODO(scheglov) Implement for other types.
+    throw new UnimplementedError('type: $type');
+  }
+
+  TypeArgumentList _buildTypeArgumentList(List<kernel.DartType> kernels) {
+    int length = kernels.length;
+    var types = new List<TypeAnnotation>(length);
+    for (int i = 0; i < length; i++) {
+      DartType type = _context.getType(null, kernels[i]);
+      TypeAnnotation typeAnnotation = _buildType(type);
+      types[i] = typeAnnotation;
+    }
+    return AstTestFactory.typeArgumentList(types);
+  }
+
+  List<TypeAnnotation> _buildTypeArguments(List<DartType> types) {
+    if (types.every((t) => t.isDynamic)) return null;
+    return types.map(_buildType).toList();
+  }
+
+  ElementImpl _getElement(kernel.Reference reference) {
+    return _context._getElement(reference?.canonicalName);
+  }
+
+  InterpolationElement _newInterpolationElement(Expression expr) {
+    if (expr is SimpleStringLiteral) {
+      return astFactory.interpolationString(expr.literal, expr.value);
+    } else {
+      return AstTestFactory.interpolationExpression(expr);
+    }
+  }
+
+  /// Return [Expression]s for the given [kernelArguments].
+  List<Expression> _toArguments(kernel.Arguments kernelArguments) {
+    int numPositional = kernelArguments.positional.length;
+    int numNamed = kernelArguments.named.length;
+    var arguments = new List<Expression>(numPositional + numNamed);
+
+    int i = 0;
+    for (kernel.Expression k in kernelArguments.positional) {
+      arguments[i++] = build(k);
+    }
+
+    for (kernel.NamedExpression k in kernelArguments.named) {
+      var value = build(k.value);
+      arguments[i++] = AstTestFactory.namedExpression2(k.name, value);
+    }
+
+    return arguments;
+  }
+
+  /// Return the [TokenType] for the given operator [name].
+  TokenType _toBinaryOperatorTokenType(String name) {
+    if (name == '==') return TokenType.EQ_EQ;
+    if (name == '&&') return TokenType.AMPERSAND_AMPERSAND;
+    if (name == '||') return TokenType.BAR_BAR;
+    if (name == '^') return TokenType.CARET;
+    if (name == '&') return TokenType.AMPERSAND;
+    if (name == '|') return TokenType.BAR;
+    if (name == '>>') return TokenType.GT_GT;
+    if (name == '<<') return TokenType.LT_LT;
+    if (name == '+') return TokenType.PLUS;
+    if (name == '-') return TokenType.MINUS;
+    if (name == '*') return TokenType.STAR;
+    if (name == '/') return TokenType.SLASH;
+    if (name == '~/') return TokenType.TILDE_SLASH;
+    if (name == '%') return TokenType.PERCENT;
+    if (name == '>') return TokenType.GT;
+    if (name == '<') return TokenType.LT;
+    if (name == '>=') return TokenType.GT_EQ;
+    if (name == '<=') return TokenType.LT_EQ;
+    if (name == 'unary-') return TokenType.MINUS;
+    throw new ArgumentError(name);
+  }
+}
+
 class _FileSystemAdaptor implements FileSystem {
   final ResourceProvider provider;
 
@@ -2564,7 +2075,6 @@
       throw new ArgumentError(
           'Only file:// URIs are supported, but $uri is given.');
     }
-    // TODO: implement entityForUri
   }
 }
 
@@ -2580,11 +2090,6 @@
   }
 
   @override
-  Future<DateTime> lastModified() async {
-    return new DateTime.fromMicrosecondsSinceEpoch(file.modificationStamp);
-  }
-
-  @override
   Future<List<int>> readAsBytes() async {
     return file.readAsBytesSync();
   }
@@ -2605,21 +2110,110 @@
   _KernelLibraryResynthesizerContextImpl(this._resynthesizer, this.library);
 
   @override
+  Expression getExpression(kernel.Expression expression) {
+    return new _ExprBuilder(this).build(expression);
+  }
+
+  @override
   InterfaceType getInterfaceType(
       ElementImpl context, kernel.Supertype kernelType) {
     return _getInterfaceType(
         kernelType.className.canonicalName, kernelType.typeArguments);
   }
 
+  @override
+  LibraryElement getLibrary(String uriStr) {
+    return _resynthesizer.getLibrary(uriStr);
+  }
+
   DartType getType(ElementImpl context, kernel.DartType kernelType) {
+    if (kernelType is kernel.DynamicType) return DynamicTypeImpl.instance;
+    if (kernelType is kernel.VoidType) return VoidTypeImpl.instance;
     if (kernelType is kernel.InterfaceType) {
       return _getInterfaceType(
           kernelType.className.canonicalName, kernelType.typeArguments);
     }
+    if (kernelType is kernel.TypeParameterType) {
+      kernel.TypeParameter kTypeParameter = kernelType.parameter;
+      return _getTypeParameter(context, kTypeParameter).type;
+    }
     // TODO(scheglov) Support other kernel types.
     throw new UnimplementedError('For ${kernelType.runtimeType}');
   }
 
+  /**
+   * Return the [ElementImpl] that corresponds to the given [name], or `null`
+   * if the corresponding element cannot be found.
+   */
+  ElementImpl _getElement(kernel.CanonicalName name) {
+    if (name == null) return null;
+    kernel.CanonicalName parentName = name.parent;
+
+    // If the parent is the root, then this name is a library.
+    if (parentName.isRoot) {
+      return _resynthesizer.getLibrary(name.name);
+    }
+
+    // Skip qualifiers.
+    bool isGetter = false;
+    bool isSetter = false;
+    bool isField = false;
+    bool isConstructor = false;
+    bool isMethod = false;
+    if (parentName.name == '@getters') {
+      isGetter = true;
+      parentName = parentName.parent;
+    } else if (parentName.name == '@setters') {
+      isSetter = true;
+      parentName = parentName.parent;
+    } else if (parentName.name == '@fields') {
+      isField = true;
+      parentName = parentName.parent;
+    } else if (parentName.name == '@constructors') {
+      isConstructor = true;
+      parentName = parentName.parent;
+    } else if (parentName.name == '@methods') {
+      isMethod = true;
+      parentName = parentName.parent;
+    }
+
+    ElementImpl parentElement = _getElement(parentName);
+    if (parentElement == null) return null;
+
+    // Search in units of the library.
+    if (parentElement is LibraryElementImpl) {
+      for (CompilationUnitElement unit in parentElement.units) {
+        CompilationUnitElementImpl unitImpl = unit;
+        ElementImpl child = unitImpl.getChild(name.name);
+        if (child != null) {
+          return child;
+        }
+      }
+      return null;
+    }
+
+    // Search in the class.
+    if (parentElement is ClassElementImpl) {
+      if (isGetter) {
+        return parentElement.getGetter(name.name) as ElementImpl;
+      } else if (isSetter) {
+        return parentElement.getSetter(name.name) as ElementImpl;
+      } else if (isField) {
+        return parentElement.getField(name.name) as ElementImpl;
+      } else if (isConstructor) {
+        if (name.name.isEmpty) {
+          return parentElement.unnamedConstructor as ConstructorElementImpl;
+        }
+        return parentElement.getNamedConstructor(name.name) as ElementImpl;
+      } else if (isMethod) {
+        return parentElement.getMethod(name.name) as ElementImpl;
+      }
+      return null;
+    }
+
+    throw new UnimplementedError('Should not be reached.');
+  }
+
   InterfaceType _getInterfaceType(
       kernel.CanonicalName className, List<kernel.DartType> kernelArguments) {
     var libraryName = className.parent;
@@ -2638,22 +2232,60 @@
       return arguments;
     });
   }
+
+  /// Return the [TypeParameterElement] for the given [kernelTypeParameter].
+  TypeParameterElement _getTypeParameter(
+      ElementImpl context, kernel.TypeParameter kernelTypeParameter) {
+    String name = kernelTypeParameter.name;
+    for (var ctx = context; ctx != null; ctx = ctx.enclosingElement) {
+      if (ctx is TypeParameterizedElementMixin) {
+        for (var typeParameter in ctx.typeParameters) {
+          if (typeParameter.name == name) {
+            return typeParameter;
+          }
+        }
+      }
+    }
+    throw new StateError('Not found $kernelTypeParameter in $context');
+  }
 }
 
 class _KernelResynthesizer {
   final AnalysisContext _analysisContext;
+  final kernel.TypeEnvironment _types;
   final Map<String, kernel.Library> _kernelMap;
   final Map<String, LibraryElementImpl> _libraryMap = {};
 
-  _KernelResynthesizer(this._analysisContext, this._kernelMap);
+  /**
+   * Cache of [Source] objects that have already been converted from URIs.
+   */
+  final Map<String, Source> _sources = <String, Source>{};
+
+  _KernelResynthesizer(this._analysisContext, this._types, this._kernelMap);
 
   LibraryElementImpl getLibrary(String uriStr) {
     return _libraryMap.putIfAbsent(uriStr, () {
       var kernel = _kernelMap[uriStr];
       if (kernel == null) return null;
+
       var libraryContext =
           new _KernelLibraryResynthesizerContextImpl(this, kernel);
-      return new LibraryElementImpl.forKernel(_analysisContext, libraryContext);
+      Source librarySource = _getSource(uriStr);
+      LibraryElementImpl libraryElement =
+          new LibraryElementImpl.forKernel(_analysisContext, libraryContext);
+      CompilationUnitElementImpl definingUnit =
+          libraryElement.definingCompilationUnit;
+      definingUnit.source = librarySource;
+      definingUnit.librarySource = librarySource;
+      return libraryElement;
     });
   }
+
+  /**
+   * Get the [Source] object for the given [uri].
+   */
+  Source _getSource(String uri) {
+    return _sources.putIfAbsent(
+        uri, () => _analysisContext.sourceFactory.forUri(uri));
+  }
 }
diff --git a/pkg/analyzer/test/src/summary/top_level_inference_test.dart b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
index 341364f..a9d11d9 100644
--- a/pkg/analyzer/test/src/summary/top_level_inference_test.dart
+++ b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
@@ -1387,7 +1387,7 @@
     checkElementText(library, r'''
 class A {
   int f;
-  A([int this.f]);
+  A([int this.f = 'hello']);
 }
 ''');
   }
diff --git a/pkg/analyzer/test/src/task/dart_test.dart b/pkg/analyzer/test/src/task/dart_test.dart
index e6d058f..2ac3cff 100644
--- a/pkg/analyzer/test/src/task/dart_test.dart
+++ b/pkg/analyzer/test/src/task/dart_test.dart
@@ -294,8 +294,6 @@
       expect(importElement.importedLibrary, libraryElementB);
       expect(importElement.prefix, isNull);
       expect(importElement.nameOffset, 14);
-      expect(importElement.uriOffset, 21);
-      expect(importElement.uriEnd, 32);
     }
     {
       ExportDirective exportNode = libraryUnitA.directives[2];
@@ -303,8 +301,6 @@
       expect(exportElement, isNotNull);
       expect(exportElement.exportedLibrary, libraryElementC);
       expect(exportElement.nameOffset, 34);
-      expect(exportElement.uriOffset, 41);
-      expect(exportElement.uriEnd, 52);
     }
     // validate LibraryElement
     expect(libraryElementA.hasExtUri, isFalse);
@@ -372,7 +368,6 @@
     // Validate the export element.
     ExportElement export = testLibrary.exports[0];
     expect(export.exportedLibrary.source, foo_io);
-    expect(export.uri, 'foo_io.dart');
   }
 
   test_perform_configurations_import() {
@@ -393,7 +388,6 @@
     // Validate the import element.
     ImportElement import = testLibrary.imports[0];
     expect(import.importedLibrary.source, foo_io);
-    expect(import.uri, 'foo_io.dart');
   }
 
   test_perform_dartCoreContext() {
@@ -808,7 +802,10 @@
     // CompilationUnitElement(s)
     CompilationUnitElement firstPart;
     CompilationUnitElement secondPart;
-    if (resolutionMap.elementDeclaredByCompilationUnit(partUnits[0]).uri ==
+    if (resolutionMap
+            .elementDeclaredByCompilationUnit(partUnits[0])
+            .source
+            .shortName ==
         'part1.dart') {
       firstPart = partUnits[0].element;
       secondPart = partUnits[1].element;
@@ -816,15 +813,11 @@
       firstPart = partUnits[1].element;
       secondPart = partUnits[0].element;
     }
-    expect(firstPart.uri, 'part1.dart');
-    expect(firstPart.uriOffset, 18);
-    expect(firstPart.uriEnd, 30);
+    expect(firstPart.source.shortName, 'part1.dart');
     expect(
         (libraryUnit.directives[1] as PartDirective).element, same(firstPart));
 
-    expect(secondPart.uri, 'part2.dart');
-    expect(secondPart.uriOffset, 37);
-    expect(secondPart.uriEnd, 49);
+    expect(secondPart.source.shortName, 'part2.dart');
     expect(
         (libraryUnit.directives[2] as PartDirective).element, same(secondPart));
   }
diff --git a/pkg/analyzer/test/src/task/strong/checker_test.dart b/pkg/analyzer/test/src/task/strong/checker_test.dart
index a35ef8c..3f9acb1 100644
--- a/pkg/analyzer/test/src/task/strong/checker_test.dart
+++ b/pkg/analyzer/test/src/task/strong/checker_test.dart
@@ -640,8 +640,8 @@
     ''');
   }
 
-  test_dynamicInvocation() async {
-    await checkFile('''
+  test_dynamicInvocation() {
+    return checkFile(r'''
 typedef dynamic A(dynamic x);
 class B {
   int call(int x) => x;
@@ -664,13 +664,13 @@
     int x;
     double y;
     x = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f(3);
-    x = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f.col(3.0);
+    x = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f./*error:UNDEFINED_METHOD*/col(3.0);
     y = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f(3);
-    y = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f.col(3.0);
+    y = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f./*error:UNDEFINED_METHOD*/col(3.0);
     /*info:DYNAMIC_INVOKE*/f(3.0);
     // Through type propagation, we know f is actually a B, hence the
     // hint.
-    /*info:DYNAMIC_INVOKE*/f.col(3);
+    /*info:DYNAMIC_INVOKE*/f./*error:UNDEFINED_METHOD*/col(3);
   }
   {
     A f = new B();
@@ -687,8 +687,8 @@
     /*info:DYNAMIC_INVOKE*/g.foo(42.0);
     /*info:DYNAMIC_INVOKE*/g.x;
     A f = new B();
-    /*info:DYNAMIC_INVOKE*/f.col(42.0);
-    /*info:DYNAMIC_INVOKE*/f.foo(42.0);
+    /*info:DYNAMIC_INVOKE*/f./*error:UNDEFINED_METHOD*/col(42.0);
+    /*info:DYNAMIC_INVOKE*/f./*error:UNDEFINED_METHOD*/foo(42.0);
     /*info:DYNAMIC_INVOKE*/f./*error:UNDEFINED_GETTER*/x;
   }
 }
@@ -2196,11 +2196,96 @@
 ''');
   }
 
-  test_implicitCasts() async {
-    addFile('num n; int i = /*info:ASSIGNMENT_CAST*/n;');
+  test_implicitCasts_assignment() async {
+    addFile(
+        'num n; int i; void main() { i = /*info:DOWN_CAST_IMPLICIT*/n;}//yy');
     await check();
-    addFile('num n; int i = /*error:INVALID_ASSIGNMENT*/n;');
-    await check(implicitCasts: false);
+    addFile(
+        'num n; int i; void main() { i = /*error:INVALID_ASSIGNMENT*/n;}//ny');
+    await check(implicitCasts: false, declarationCasts: true);
+    addFile(
+        'num n; int i; void main() { i = /*info:DOWN_CAST_IMPLICIT*/n;}//yn');
+    await check(implicitCasts: true, declarationCasts: false);
+    addFile(
+        'num n; int i; void main() { i = /*error:INVALID_ASSIGNMENT*/n;}//nn');
+    await check(implicitCasts: false, declarationCasts: false);
+  }
+
+  test_implicitCasts_compoundAssignment() async {
+    addFile('''f(num n, int i) {
+               /*info:DOWN_CAST_IMPLICIT_ASSIGN*/i += n;}//yy''');
+    await check();
+    addFile('''f(num n, int i) {
+               i += /*error:INVALID_ASSIGNMENT*/n;}//ny''');
+    await check(implicitCasts: false, declarationCasts: true);
+    addFile('''f(num n, int i) {
+               /*info:DOWN_CAST_IMPLICIT_ASSIGN*/i += n;}//yn''');
+    await check(implicitCasts: true, declarationCasts: false);
+    addFile('''f(num n, int i) {
+               i += /*error:INVALID_ASSIGNMENT*/n;}//nn''');
+    await check(implicitCasts: false, declarationCasts: false);
+  }
+
+  test_implicitCasts_constructorInitializer() async {
+    addFile(
+        'class A { int i; A(num n) : i = /*info:DOWN_CAST_IMPLICIT*/n;}//yy');
+    await check();
+    addFile(
+        'class A { int i; A(num n) : i = /*error:FIELD_INITIALIZER_NOT_ASSIGNABLE*/n;}//ny');
+    await check(implicitCasts: false, declarationCasts: true);
+    addFile(
+        'class A { int i; A(num n) : i = /*info:DOWN_CAST_IMPLICIT*/n;}//yn');
+    await check(implicitCasts: true, declarationCasts: false);
+    addFile(
+        'class A { int i; A(num n) : i = /*error:FIELD_INITIALIZER_NOT_ASSIGNABLE*/n;}//nn');
+    await check(implicitCasts: false, declarationCasts: false);
+  }
+
+  test_implicitCasts_defaultValue() async {
+    addFile('''const num n = 0;
+               f({int i = /*info:DOWN_CAST_IMPLICIT*/n}) => i;//yy''');
+    await check();
+    addFile('''const num n = 0;
+               f({int i = /*error:INVALID_ASSIGNMENT*/n}) => i;//ny''');
+    await check(implicitCasts: false, declarationCasts: true);
+    addFile('''const num n = 0;
+               f({int i = /*info:DOWN_CAST_IMPLICIT*/n}) => i;//yn''');
+    await check(implicitCasts: true, declarationCasts: false);
+    addFile('''const num n = 0;
+               f({int i = /*error:INVALID_ASSIGNMENT*/n}) => i;//nn''');
+    await check(implicitCasts: false, declarationCasts: false);
+  }
+
+  test_implicitCasts_fieldInitializer() async {
+    addFile('class A { static num n; int i = /*info:ASSIGNMENT_CAST*/n;}//yy');
+    await check();
+    addFile('class A { static num n; int i = /*info:ASSIGNMENT_CAST*/n;}//ny');
+    await check(implicitCasts: false, declarationCasts: true);
+    addFile(
+        'class A { static num n; int i = /*error:INVALID_ASSIGNMENT*/n;}//yn');
+    await check(implicitCasts: true, declarationCasts: false);
+    addFile(
+        'class A { static num n; int i = /*error:INVALID_ASSIGNMENT*/n;}//nn');
+    await check(implicitCasts: false, declarationCasts: false);
+  }
+
+  test_implicitCasts_functionCall() async {
+    addFile('''num n;
+               f(int i) => i;
+               var i = f(/*info:DOWN_CAST_IMPLICIT*/n);//yy''');
+    await check();
+    addFile('''num n;
+               f(int i) => i;
+               var i = f(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/n);//ny''');
+    await check(implicitCasts: false, declarationCasts: true);
+    addFile('''num n;
+               f(int i) => i;
+               var i = f(/*info:DOWN_CAST_IMPLICIT*/n);//yn''');
+    await check(implicitCasts: true, declarationCasts: false);
+    addFile('''num n;
+             f(int i) => i;
+             var i = f(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/n);//nn''');
+    await check(implicitCasts: false, declarationCasts: false);
   }
 
   test_implicitCasts_genericMethods() async {
@@ -2210,6 +2295,17 @@
     await check(implicitCasts: false);
   }
 
+  test_implicitCasts_initializer() async {
+    addFile('num n; int i = /*info:ASSIGNMENT_CAST*/n;//yy');
+    await check();
+    addFile('num n; int i = /*info:ASSIGNMENT_CAST*/n;//ny');
+    await check(implicitCasts: false, declarationCasts: true);
+    addFile('num n; int i = /*error:INVALID_ASSIGNMENT*/n;//yn');
+    await check(implicitCasts: true, declarationCasts: false);
+    addFile('num n; int i = /*error:INVALID_ASSIGNMENT*/n;//nn');
+    await check(implicitCasts: false, declarationCasts: false);
+  }
+
   test_implicitCasts_numericOps() async {
     // Regression test for https://github.com/dart-lang/sdk/issues/26912
     addFile(r'''
@@ -2222,7 +2318,37 @@
     await check(implicitCasts: false);
   }
 
+  test_implicitCasts_operator() async {
+    addFile('''num n;
+             int i;
+             var r = i & /*info:DOWN_CAST_IMPLICIT*/n;//yy''');
+    await check();
+    addFile('''num n;
+             int i;
+             var r = i & /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/n;//ny''');
+    await check(implicitCasts: false, declarationCasts: true);
+    addFile('''num n;
+             int i;
+             var r = i & /*info:DOWN_CAST_IMPLICIT*/n;//yn''');
+    await check(implicitCasts: true, declarationCasts: false);
+    addFile('''num n;
+             int i;
+             var r = i & /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/n;//nn''');
+    await check(implicitCasts: false, declarationCasts: false);
+  }
+
   test_implicitCasts_return() async {
+    addFile('int f(num n) => /*info:DOWN_CAST_IMPLICIT*/n;//yy');
+    await check();
+    addFile('int f(num n) => /*error:RETURN_OF_INVALID_TYPE*/n;//ny');
+    await check(implicitCasts: false, declarationCasts: true);
+    addFile('int f(num n) => /*info:DOWN_CAST_IMPLICIT*/n;//yn');
+    await check(implicitCasts: true, declarationCasts: false);
+    addFile('int f(num n) => /*error:RETURN_OF_INVALID_TYPE*/n;//nn');
+    await check(implicitCasts: false, declarationCasts: false);
+  }
+
+  test_implicitCasts_return_async() async {
     addFile(r'''
 import 'dart:async';
 
@@ -2478,6 +2604,63 @@
     await check(implicitDynamic: false);
   }
 
+  test_interfaceOverridesAreAllChecked() {
+    // Regression test for https://github.com/dart-lang/sdk/issues/29766
+    return checkFile(r'''
+class B {
+  set x(int y) {}
+}
+class C {
+  set x(Object y) {}
+}
+class D implements B, C {
+  /*error:INVALID_METHOD_OVERRIDE*/int x;
+}
+    ''');
+  }
+
+  test_interfacesFromMixinsAreChecked() {
+    // Regression test for https://github.com/dart-lang/sdk/issues/29782
+    return checkFile(r'''
+abstract class I {
+  set x(int v);
+}
+abstract class M implements I {}
+
+class C extends Object with M {
+  /*error:INVALID_METHOD_OVERRIDE*/String x;
+}
+
+abstract class M2 = Object with M;
+
+class C2 extends Object with M2 {
+  /*error:INVALID_METHOD_OVERRIDE*/String x;
+}
+    ''');
+  }
+
+  test_interfacesFromMixinsUsedTwiceAreChecked() {
+    // Regression test for https://github.com/dart-lang/sdk/issues/29782
+    return checkFile(r'''
+abstract class I<E> {
+  set x(E v);
+}
+abstract class M<E> implements I<E> {}
+
+class C extends Object with M<int> {
+  /*error:INVALID_METHOD_OVERRIDE*/String x;
+}
+
+abstract class D extends Object with M<num> {}
+class E extends D with M<int> {
+  /*error:INVALID_METHOD_OVERRIDE*/int x;
+}
+class F extends D with M<int> {
+  num x;
+}
+    ''');
+  }
+
   test_invalidOverrides_baseClassOverrideToChildInterface() async {
     await checkFile('''
 class A {}
@@ -3324,21 +3507,24 @@
     ''');
   }
 
-  test_overrideNarrowsType_noDuplicateError() async {
+  test_overrideNarrowsType_noDuplicateError() {
     // Regression test for https://github.com/dart-lang/sdk/issues/25232
-    _addMetaLibrary();
-    await checkFile(r'''
-import 'meta.dart';
+    return checkFile(r'''
 abstract class A { void test(A arg) { } }
 abstract class B extends A {
   /*error:INVALID_METHOD_OVERRIDE*/void test(B arg) { }
 }
 abstract class X implements A { }
-class C extends B with X { }
+
+class C extends B {}
+
+// We treat "with X" as asking for another check.
+// This feels inconsistent.
+class D /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends B with X { }
 
 // We treat "implements A" as asking for another check.
-// This feels inconsistent to me.
-class D /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends B implements A { }
+// This feels inconsistent.
+class E /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends B implements A { }
     ''');
   }
 
@@ -3376,8 +3562,8 @@
 ''');
   }
 
-  test_proxy() async {
-    await checkFile(r'''
+  test_proxy() {
+    return checkFile(r'''
 @proxy class C {}
 @proxy class D {
   var f;
@@ -3401,15 +3587,15 @@
   d();
 
   C c = new C();
-  /*info:DYNAMIC_INVOKE*/c.m();
-  /*info:DYNAMIC_INVOKE*/c.m;
-  /*info:DYNAMIC_INVOKE*/-c;
-  /*info:DYNAMIC_INVOKE*/c + 7;
-  /*info:DYNAMIC_INVOKE*/c[7];
+  /*info:DYNAMIC_INVOKE*/c./*error:UNDEFINED_METHOD*/m();
+  /*info:DYNAMIC_INVOKE*/c./*error:UNDEFINED_GETTER*/m;
+  /*info:DYNAMIC_INVOKE,error:UNDEFINED_OPERATOR*/-c;
+  /*info:DYNAMIC_INVOKE*/c /*error:UNDEFINED_OPERATOR*/+ 7;
+  /*info:DYNAMIC_INVOKE*/c /*error:UNDEFINED_OPERATOR*/[7];
   /*error:INVOCATION_OF_NON_FUNCTION,info:DYNAMIC_INVOKE*/c();
 
   F f = new F();
-  /*info:DYNAMIC_INVOKE*/f();
+  /*error:INVOCATION_OF_NON_FUNCTION,info:DYNAMIC_INVOKE*/f();
 }
     ''');
   }
@@ -3895,7 +4081,7 @@
 }
 void g/*<T extends num>*/(/*=T*/ object) {
   if (object is int) print(object.isEven);
-  if (object is String) print(/*info:DYNAMIC_INVOKE*/object.substring(1));
+  if (object is String) print(/*info:DYNAMIC_INVOKE*/object./*error:UNDEFINED_METHOD*/substring(1));
 }
 class Clonable<T> {}
 class SubClonable<T> extends Clonable<T> {
diff --git a/pkg/analyzer/test/src/task/strong/front_end_inference_test.dart b/pkg/analyzer/test/src/task/strong/front_end_inference_test.dart
index df4d372..bb6fa56 100644
--- a/pkg/analyzer/test/src/task/strong/front_end_inference_test.dart
+++ b/pkg/analyzer/test/src/task/strong/front_end_inference_test.dart
@@ -133,33 +133,35 @@
 }
 
 class _FrontEndInferenceTest extends BaseAnalysisDriverTest {
-  Future<String> runTest(String path, String code) async {
-    Uri uri = provider.pathContext.toUri(path);
+  Future<String> runTest(String path, String code) {