Version 1.22.0-dev.1.0

Merge e00732643f489af199f633472a104cd68dc6cecc into dev
diff --git a/.gitattributes b/.gitattributes
index 0f5ea98..30c6123 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -29,9 +29,9 @@
 tests/lib/mirrors/method_mirror_source_line_ending_lf.dart -text
 tests/lib/mirrors/method_mirror_source_test.dart -text
 tests/lib/mirrors/method_mirror_source_other.dart -text
-pkg/dev_compiler/test/codegen/language/multiline_newline_crlf.dart -text
-pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_source_line_ending_cr.dart -text
-pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_source_line_ending_crlf.dart -text
+tests/language_strong/multiline_newline_crlf.dart -text
+tests/lib_strong/mirrors/method_mirror_source_line_ending_cr.dart -text
+tests/lib_strong/mirrors/method_mirror_source_line_ending_crlf.dart -text
 
 # Files to leave alone and not diff.
 *.png binary
diff --git a/.travis.yml b/.travis.yml
index f458e35..f08c83f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -75,13 +75,11 @@
   - ANALYZER=master
   - ANALYZER=master DDC_BROWSERS=Firefox
   - ANALYZER=master DDC_BROWSERS=ChromeCanaryTravis
-  - ANALYZER=master CXX=g++
   - ANALYZER=master CXX=clang++
   - TEST=coverage
   - TEST=package
 matrix:
   allow_failures:
-    - env: ANALYZER=master CXX=g++
     - env: ANALYZER=master DDC_BROWSERS=ChromeCanaryTravis
 notifications:
   email:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f573d16..df7ef8a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,26 @@
+## 1.22.0
+
+### Tool changes
+
+* Pub
+
+  * Avoid using a barback asset server for executables unless they actually use
+    transformers. This makes precompilation substantially faster, produces
+    better error messages when precompilation fails, and allows
+    globally-activated executables to consistently use the
+    `Isolate.resolvePackageUri()` API.
+
+  * On POSIX systems, always ignore packages' original file owners and
+    permissions when extracting those packages. This was already the default
+    under most circumstances.
+
+  * Properly close the standard input stream of child processes started using
+    `pub run`.
+
+  * Handle parse errors from the package cache more gracefully. A package whose
+    pubspec can't be parsed will now be ignored by `pub get --offline` and
+    deleted by `pub cache repair`.
+
 ## 1.21.0 - 2016-12-07
 
 ### Language
diff --git a/DEPS b/DEPS
index affb687..919c056 100644
--- a/DEPS
+++ b/DEPS
@@ -73,7 +73,7 @@
   "isolate_tag": "@0.2.3",
   "jinja2_rev": "@2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_tag": "@2.0.2",
-  "linter_rev": "@b2d95da1287e27d4dbb9bd199dd2d23d650bd274",
+  "linter_rev": "@3ec970f7acc8599ad8fb08b848485205d48052cf",
   "logging_tag": "@0.11.3+1",
   "markdown_tag": "@0.11.0",
   "matcher_tag": "@0.12.0+2",
@@ -90,7 +90,7 @@
   "ply_rev": "@604b32590ffad5cbb82e4afef1d305512d06ae93",
   "pool_tag": "@1.2.4",
   "protobuf_tag": "@0.5.3",
-  "pub_rev": "@3dd04bd17ba269ccdd34502a253041dd96ded3be",
+  "pub_rev": "@9309be93140638fb19903648d07de59681a08989",
   "pub_semver_tag": "@1.3.0",
   "quiver_tag": "@0.22.0",
   "resource_rev":"@a49101ba2deb29c728acba6fb86000a8f730f4b1",
diff --git a/docs/language/dartLangSpec.tex b/docs/language/dartLangSpec.tex
index 8232a3b..44e846c 100644
--- a/docs/language/dartLangSpec.tex
+++ b/docs/language/dartLangSpec.tex
@@ -2616,10 +2616,7 @@
 The \code{Null} class declares no methods except those also declared by \code{Object}.
 
 \LMHash{}
-The static type of \NULL{} is $\bot$.
-
-\rationale{The decision to use $\bot$ instead of \code{Null} allows \NULL{} to be be assigned everywhere without complaint by the static checker.
-}
+The static type of \NULL{} is the \code{Null} type.
 
 
 \subsection{Numbers}
@@ -7369,11 +7366,6 @@
 \item If $J$ is a mixin application (\ref{mixinApplication}) of the mixin of $I$.
 \end{itemize}
 
-\commentary{
-
-
-}
-
 %\Q{Can wacky stuff happen with interface injection, e.g., a direct superinterface becomes indirect? What about side effects - loading order can affect type relationships.
 %}
 
@@ -7381,8 +7373,9 @@
 A type $T$ is more specific than a type $S$, written $T << S$,  if one of the following conditions is met:
 \begin{itemize}
 \item $T$ is $S$.
-\item T is $\bot$.
-\item S is \DYNAMIC{}.
+\item $T$ is $\bot$.
+\item $T$ is \NULL{} and $S$ is not $\bot$.
+\item $S$ is \DYNAMIC{}.
 \item $S$ is a direct supertype of $T$.
 \item $T$ is a type parameter and $S$ is the upper bound of $T$.
 \item $T$ is a type parameter and $S$ is \cd{Object}.
@@ -7409,7 +7402,7 @@
 \commentary{The supertypes of an interface are its direct supertypes and their supertypes. }
 
 \LMHash{}
-An interface type $T$ may be assigned to a type $S$, written  $T \Longleftrightarrow S$, iff either $T <: S$ or $S <: T$.
+An interface type $T$ may be assigned to a type $S$, written  $T \Longleftrightarrow S$, iff either $T <: S$, $S <: T$, or either $T$ or $S$ is the \code{Null} type.
 
 \rationale{This rule may surprise readers accustomed to conventional typechecking. The intent of the $\Longleftrightarrow$ relation is not to ensure that an assignment is correct. Instead, it aims to only flag assignments that are almost certain to be erroneous, without precluding assignments that may work.
 
diff --git a/pkg/analysis_server/BUILD.gn b/pkg/analysis_server/BUILD.gn
index 9e65d54..fae5d08 100644
--- a/pkg/analysis_server/BUILD.gn
+++ b/pkg/analysis_server/BUILD.gn
@@ -11,10 +11,10 @@
 
   deps = [
     "//dart/pkg/analyzer",
+    "//dart/third_party/pkg/linter",
     "//third_party/dart-pkg/pub/args",
     "//third_party/dart-pkg/pub/dart_style",
     "//third_party/dart-pkg/pub/isolate",
-    "//third_party/dart-pkg/pub/linter",
     "//third_party/dart-pkg/pub/logging",
     "//third_party/dart-pkg/pub/package_config",
     "//third_party/dart-pkg/pub/path",
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 8f22907..a241918 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -26,7 +26,9 @@
 import 'package:analysis_server/src/services/search/search_engine_internal.dart';
 import 'package:analysis_server/src/services/search/search_engine_internal2.dart';
 import 'package:analysis_server/src/single_context_manager.dart';
+import 'package:analysis_server/src/utilities/null_string_sink.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/file_system/file_system.dart';
@@ -370,7 +372,7 @@
 
     {
       String name = options.newAnalysisDriverLog;
-      StringSink sink = new _NullStringSink();
+      StringSink sink = new NullStringSink();
       if (name != null) {
         if (name == 'stdout') {
           sink = io.stdout;
@@ -1269,7 +1271,9 @@
                 sendAnalysisNotificationHighlights(this, file, dartUnit);
                 break;
               case AnalysisService.OUTLINE:
-                AnalysisContext context = dartUnit.element.context;
+                AnalysisContext context = resolutionMap
+                    .elementDeclaredByCompilationUnit(dartUnit)
+                    .context;
                 LineInfo lineInfo = context.getLineInfo(source);
                 SourceKind kind = context.getKindOf(source);
                 sendAnalysisNotificationOutline(
@@ -2110,10 +2114,3 @@
    */
   static PerformanceTag splitStore = new PerformanceTag('splitStore');
 }
-
-class _NullStringSink implements StringSink {
-  void write(Object obj) {}
-  void writeAll(Iterable objects, [String separator = ""]) {}
-  void writeCharCode(int charCode) {}
-  void writeln([Object obj = ""]) {}
-}
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights2.dart b/pkg/analysis_server/lib/src/computer/computer_highlights2.dart
index 7d67c26..630b41f 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights2.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights2.dart
@@ -6,6 +6,7 @@
 
 import 'package:analysis_server/plugin/protocol/protocol.dart' hide Element;
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -428,7 +429,7 @@
     if (e is SimpleIdentifier && e.staticElement is PrefixElement) {
       return false;
     }
-    return e.bestType.isDynamic;
+    return resolutionMap.bestTypeForExpression(e).isDynamic;
   }
 }
 
diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index 4333b45..8bbadcc 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -10,10 +10,8 @@
 import 'dart:core';
 
 import 'package:analysis_server/src/analysis_server.dart';
-import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
-import 'package:analyzer/plugin/options.dart';
 import 'package:analyzer/plugin/resolver_provider.dart';
 import 'package:analyzer/source/analysis_options_provider.dart';
 import 'package:analyzer/source/package_map_provider.dart';
@@ -34,9 +32,6 @@
 import 'package:analyzer/src/util/absolute_path.dart';
 import 'package:analyzer/src/util/glob.dart';
 import 'package:analyzer/src/util/yaml.dart';
-import 'package:linter/src/config.dart';
-import 'package:linter/src/linter.dart';
-import 'package:linter/src/rules.dart';
 import 'package:package_config/packages.dart';
 import 'package:package_config/packages_file.dart' as pkgfile show parse;
 import 'package:package_config/src/packages_impl.dart' show MapPackages;
@@ -295,6 +290,13 @@
   AnalysisContext getContextFor(String path);
 
   /**
+   * Return a list of all of the analysis drivers reachable from the given
+   * [analysisRoot] (the driver associated with [analysisRoot] and all of its
+   * descendants).
+   */
+  List<AnalysisDriver> getDriversInAnalysisRoot(Folder analysisRoot);
+
+  /**
    * Return `true` if the given [path] is ignored by a [ContextInfo] whose
    * folder contains it.
    */
@@ -346,11 +348,6 @@
   AnalysisContext addContext(Folder folder, AnalysisOptions options);
 
   /**
-   * The given [file] was removed from the folder analyzed in the [driver].
-   */
-  void applyFileRemoved(AnalysisDriver driver, String file);
-
-  /**
    * Called when the set of files associated with a context have changed (or
    * some of those files have been modified).  [changeSet] is the set of
    * changes that need to be applied to the context.
@@ -358,6 +355,11 @@
   void applyChangesToContext(Folder contextFolder, ChangeSet changeSet);
 
   /**
+   * The given [file] was removed from the folder analyzed in the [driver].
+   */
+  void applyFileRemoved(AnalysisDriver driver, String file);
+
+  /**
    * Signals that the context manager has started to compute a package map (if
    * [computing] is `true`) or has finished (if [computing] is `false`).
    */
@@ -597,6 +599,30 @@
   }
 
   @override
+  List<AnalysisDriver> getDriversInAnalysisRoot(Folder analysisRoot) {
+    List<AnalysisDriver> drivers = <AnalysisDriver>[];
+    void addContextAndDescendants(ContextInfo info) {
+      drivers.add(info.analysisDriver);
+      info.children.forEach(addContextAndDescendants);
+    }
+
+    ContextInfo innermostContainingInfo =
+        _getInnermostContextInfoFor(analysisRoot.path);
+    if (innermostContainingInfo != null) {
+      if (analysisRoot == innermostContainingInfo.folder) {
+        addContextAndDescendants(innermostContainingInfo);
+      } else {
+        for (ContextInfo info in innermostContainingInfo.children) {
+          if (analysisRoot.isOrContains(info.folder.path)) {
+            addContextAndDescendants(info);
+          }
+        }
+      }
+    }
+    return drivers;
+  }
+
+  @override
   bool isIgnored(String path) {
     ContextInfo info = rootInfo;
     do {
@@ -635,37 +661,25 @@
       return;
     }
 
-    // In case options files are removed, revert to defaults.
+    AnalysisOptionsImpl analysisOptions;
     if (optionsRemoved) {
-      // Start with defaults.
-      info.context.analysisOptions = new AnalysisOptionsImpl();
-
+      // In case options files are removed, revert to defaults.
+      analysisOptions = new AnalysisOptionsImpl.from(defaultContextOptions);
       // Apply inherited options.
       options = _toStringMap(_getEmbeddedOptions(info));
-      if (options != null) {
-        configureContextOptions(info.context, options);
-      }
     } else {
+      analysisOptions =
+          new AnalysisOptionsImpl.from(info.context.analysisOptions);
       // Check for embedded options.
       Map embeddedOptions = _getEmbeddedOptions(info);
       if (embeddedOptions != null) {
         options = _toStringMap(new Merger().merge(embeddedOptions, options));
       }
     }
-
-    // Notify options processors.
-    AnalysisEngine.instance.optionsPlugin.optionsProcessors
-        .forEach((OptionsProcessor p) {
-      try {
-        p.optionsProcessed(info.context, options);
-      } catch (e, stacktrace) {
-        AnalysisEngine.instance.logger.logError(
-            'Error processing analysis options',
-            new CaughtException(e, stacktrace));
-      }
-    });
-
-    configureContextOptions(info.context, options);
+    if (options != null) {
+      applyToAnalysisOptions(analysisOptions, options);
+    }
+    info.context.analysisOptions = analysisOptions;
 
     // Nothing more to do.
     if (options == null) {
@@ -711,16 +725,6 @@
       }
     }
 
-    var lintOptions = options['linter'];
-    if (lintOptions != null) {
-      LintConfig config = new LintConfig.parseMap(lintOptions);
-      Iterable<LintRule> lintRules = ruleRegistry.enabled(config);
-      if (lintRules.isNotEmpty) {
-        analysisOptions.lint = true;
-        analysisOptions.lintRules = lintRules.toList();
-      }
-    }
-
     applyToAnalysisOptions(analysisOptions, options);
 
     // Nothing more to do.
@@ -983,15 +987,27 @@
   void _checkForAnalysisOptionsUpdate(
       String path, ContextInfo info, ChangeType changeType) {
     if (AnalysisEngine.isAnalysisOptionsFileName(path, pathContext)) {
-      var analysisContext = info.context;
-      if (analysisContext is context.AnalysisContextImpl) {
-        Map<String, Object> options =
-            readOptions(info.folder, info.disposition.packages);
-        processOptionsForContext(info, options,
-            optionsRemoved: changeType == ChangeType.REMOVE);
-        analysisContext.sourceFactory = _createSourceFactory(
-            analysisContext, analysisContext.analysisOptions, info.folder);
-        callbacks.applyChangesToContext(info.folder, new ChangeSet());
+      if (enableNewAnalysisDriver) {
+        // TODO(brianwilkerson) Implement this.
+//        AnalysisDriver driver = info.analysisDriver;
+//        String contextRoot = info.folder.path;
+//        ContextBuilder builder =
+//        callbacks.createContextBuilder(info.folder, defaultContextOptions);
+//        AnalysisOptions options = builder.getAnalysisOptions(contextRoot);
+//        driver.analysisOptions = options;
+//        driver.sourceFactory = builder.createSourceFactory(contextRoot, options);
+        // TODO(brianwilkerson) Set exclusion patterns.
+      } else {
+        var analysisContext = info.context;
+        if (analysisContext is context.AnalysisContextImpl) {
+          Map<String, Object> options =
+              readOptions(info.folder, info.disposition.packages);
+          processOptionsForContext(info, options,
+              optionsRemoved: changeType == ChangeType.REMOVE);
+          analysisContext.sourceFactory = _createSourceFactory(
+              analysisContext, analysisContext.analysisOptions, info.folder);
+          callbacks.applyChangesToContext(info.folder, new ChangeSet());
+        }
       }
     }
   }
@@ -1004,8 +1020,7 @@
       String contextRoot = info.folder.path;
       ContextBuilder builder =
           callbacks.createContextBuilder(info.folder, defaultContextOptions);
-      AnalysisOptions options =
-          builder.getAnalysisOptions(info.context, contextRoot);
+      AnalysisOptions options = builder.getAnalysisOptions(contextRoot);
       SourceFactory factory = builder.createSourceFactory(contextRoot, options);
       info.context.analysisOptions = options;
       info.context.sourceFactory = factory;
@@ -1020,11 +1035,11 @@
    */
   List<String> _computeFlushedFiles(ContextInfo info) {
     if (enableNewAnalysisDriver) {
-      Set<String> flushedFiles = info.analysisDriver.knownFiles.toSet();
+      Set<String> flushedFiles = info.analysisDriver.addedFiles.toSet();
       for (ContextInfo contextInfo in rootInfo.descendants) {
         AnalysisDriver other = contextInfo.analysisDriver;
         if (other != info.analysisDriver) {
-          flushedFiles.removeAll(other.knownFiles);
+          flushedFiles.removeAll(other.addedFiles);
         }
       }
       return flushedFiles.toList(growable: false);
diff --git a/pkg/analysis_server/lib/src/domain_analysis.dart b/pkg/analysis_server/lib/src/domain_analysis.dart
index 499fd99..5066533 100644
--- a/pkg/analysis_server/lib/src/domain_analysis.dart
+++ b/pkg/analysis_server/lib/src/domain_analysis.dart
@@ -21,6 +21,7 @@
 import 'package:analysis_server/src/services/dependencies/reachable_source_collector.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/error/error.dart' as engine;
 import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
@@ -48,39 +49,49 @@
   /**
    * Implement the `analysis.getErrors` request.
    */
-  Response getErrors(Request request) {
+  Future<Null> getErrors(Request request) async {
     String file = new AnalysisGetErrorsParams.fromRequest(request).file;
+
+    void send(engine.AnalysisOptions analysisOptions, LineInfo lineInfo,
+        List<engine.AnalysisError> errors) {
+      if (lineInfo == null) {
+        server.sendResponse(new Response.getErrorsInvalidFile(request));
+      } else {
+        List<AnalysisError> protocolErrors =
+            doAnalysisError_listFromEngine(analysisOptions, lineInfo, errors);
+        server.sendResponse(
+            new AnalysisGetErrorsResult(protocolErrors).toResponse(request.id));
+      }
+    }
+
+    if (server.options.enableNewAnalysisDriver) {
+      var result = await server.getAnalysisResult(file);
+      send(result?.driver?.analysisOptions, result?.lineInfo, result?.errors);
+      return;
+    }
+
     Future<AnalysisDoneReason> completionFuture =
         server.onFileAnalysisComplete(file);
     if (completionFuture == null) {
-      return new Response.getErrorsInvalidFile(request);
+      server.sendResponse(new Response.getErrorsInvalidFile(request));
     }
-    completionFuture.then((AnalysisDoneReason reason) {
+    completionFuture.then((AnalysisDoneReason reason) async {
       switch (reason) {
         case AnalysisDoneReason.COMPLETE:
           engine.AnalysisErrorInfo errorInfo = server.getErrors(file);
-          List<AnalysisError> errors;
           if (errorInfo == null) {
             server.sendResponse(new Response.getErrorsInvalidFile(request));
           } else {
             engine.AnalysisContext context = server.getAnalysisContext(file);
-            errors = doAnalysisError_listFromEngine(
-                context, errorInfo.lineInfo, errorInfo.errors);
-            server.sendResponse(
-                new AnalysisGetErrorsResult(errors).toResponse(request.id));
+            send(context.analysisOptions, errorInfo.lineInfo, errorInfo.errors);
           }
           break;
         case AnalysisDoneReason.CONTEXT_REMOVED:
           // The active contexts have changed, so try again.
-          Response response = getErrors(request);
-          if (response != Response.DELAYED_RESPONSE) {
-            server.sendResponse(response);
-          }
+          await getErrors(request);
           break;
       }
     });
-    // delay response
-    return Response.DELAYED_RESPONSE;
   }
 
   /**
@@ -132,48 +143,50 @@
   /**
    * Implement the `analysis.getNavigation` request.
    */
-  Response getNavigation(Request request) {
-    if (server.options.enableNewAnalysisDriver) {
-      // TODO(scheglov) implement for the new analysis driver
-      return new Response.getNavigationInvalidFile(request);
-    }
+  Future<Null> getNavigation(Request request) async {
     var params = new AnalysisGetNavigationParams.fromRequest(request);
     String file = params.file;
+
+    void send(CompilationUnit unit) {
+      if (unit == null) {
+        server.sendResponse(new Response.getNavigationInvalidFile(request));
+      } else {
+        CompilationUnitElement unitElement = unit.element;
+        NavigationCollectorImpl collector = computeNavigation(
+            server,
+            unitElement.context,
+            unitElement.source,
+            params.offset,
+            params.length);
+        server.sendResponse(new AnalysisGetNavigationResult(
+                collector.files, collector.targets, collector.regions)
+            .toResponse(request.id));
+      }
+    }
+
+    if (server.options.enableNewAnalysisDriver) {
+      AnalysisResult result = await server.getAnalysisResult(file);
+      send(result?.unit);
+      return;
+    }
+
     Future<AnalysisDoneReason> analysisFuture =
         server.onFileAnalysisComplete(file);
     if (analysisFuture == null) {
-      return new Response.getNavigationInvalidFile(request);
+      server.sendResponse(new Response.getNavigationInvalidFile(request));
     }
     analysisFuture.then((AnalysisDoneReason reason) async {
       switch (reason) {
         case AnalysisDoneReason.COMPLETE:
           CompilationUnit unit = await server.getResolvedCompilationUnit(file);
-          if (unit == null) {
-            server.sendResponse(new Response.getNavigationInvalidFile(request));
-          } else {
-            CompilationUnitElement unitElement = unit.element;
-            NavigationCollectorImpl collector = computeNavigation(
-                server,
-                unitElement.context,
-                unitElement.source,
-                params.offset,
-                params.length);
-            server.sendResponse(new AnalysisGetNavigationResult(
-                    collector.files, collector.targets, collector.regions)
-                .toResponse(request.id));
-          }
+          send(unit);
           break;
         case AnalysisDoneReason.CONTEXT_REMOVED:
           // The active contexts have changed, so try again.
-          Response response = getNavigation(request);
-          if (response != Response.DELAYED_RESPONSE) {
-            server.sendResponse(response);
-          }
+          await getNavigation(request);
           break;
       }
     });
-    // delay response
-    return Response.DELAYED_RESPONSE;
   }
 
   /**
@@ -198,14 +211,16 @@
     try {
       String requestName = request.method;
       if (requestName == ANALYSIS_GET_ERRORS) {
-        return getErrors(request);
+        getErrors(request);
+        return Response.DELAYED_RESPONSE;
       } else if (requestName == ANALYSIS_GET_HOVER) {
         getHover(request);
         return Response.DELAYED_RESPONSE;
       } else if (requestName == ANALYSIS_GET_LIBRARY_DEPENDENCIES) {
         return getLibraryDependencies(request);
       } else if (requestName == ANALYSIS_GET_NAVIGATION) {
-        return getNavigation(request);
+        getNavigation(request);
+        return Response.DELAYED_RESPONSE;
       } else if (requestName == ANALYSIS_GET_REACHABLE_SOURCES) {
         return getReachableSources(request);
       } else if (requestName == ANALYSIS_REANALYZE) {
diff --git a/pkg/analysis_server/lib/src/domains/analysis/implemented_dart.dart b/pkg/analysis_server/lib/src/domains/analysis/implemented_dart.dart
index 42e7213..c284ee8 100644
--- a/pkg/analysis_server/lib/src/domains/analysis/implemented_dart.dart
+++ b/pkg/analysis_server/lib/src/domains/analysis/implemented_dart.dart
@@ -5,7 +5,6 @@
 library domains.analysis.implemented_dart;
 
 import 'package:analysis_server/src/protocol_server.dart' as protocol;
-import 'package:analysis_server/src/services/search/hierarchy.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analyzer/dart/element/element.dart';
 
@@ -31,7 +30,7 @@
         continue;
       }
       // analyze ancestors
-      subtypes = await getSubClasses(searchEngine, type);
+      subtypes = await searchEngine.searchAllSubtypes(type);
       if (subtypes.isNotEmpty) {
         _addImplementedClass(type);
       }
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index d7714fe..608d9fe0 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -24,6 +24,7 @@
 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/error.dart' as engine;
 import 'package:analyzer/file_system/file_system.dart';
@@ -143,11 +144,13 @@
       AnalysisResult result = await server.getAnalysisResult(params.file);
       if (result != null) {
         CompilationUnit unit = result.unit;
+        CompilationUnitElement compilationUnitElement =
+            resolutionMap.elementDeclaredByCompilationUnit(unit);
         DartAssistContext dartAssistContext = new _DartAssistContextForValues(
-            unit.element.source,
+            compilationUnitElement.source,
             params.offset,
             params.length,
-            unit.element.context,
+            compilationUnitElement.context,
             unit);
         try {
           AssistProcessor processor = new AssistProcessor(dartAssistContext);
@@ -191,7 +194,7 @@
             var context = new _DartFixContextImpl(
                 server.resourceProvider,
                 result.driver.getTopLevelNameDeclarations,
-                unit.element.context,
+                resolutionMap.elementDeclaredByCompilationUnit(unit).context,
                 unit,
                 error);
             List<Fix> fixes =
@@ -218,8 +221,11 @@
         for (engine.AnalysisError error in errorInfo.errors) {
           int errorLine = lineInfo.getLocation(error.offset).lineNumber;
           if (errorLine == requestLine) {
-            List<Fix> fixes = await computeFixes(server.serverPlugin,
-                server.resourceProvider, unit.element.context, error);
+            List<Fix> fixes = await computeFixes(
+                server.serverPlugin,
+                server.resourceProvider,
+                resolutionMap.elementDeclaredByCompilationUnit(unit).context,
+                error);
             if (fixes.isNotEmpty) {
               AnalysisError serverError =
                   newAnalysisError_fromEngine(lineInfo, error);
@@ -300,8 +306,10 @@
         return;
       }
       // prepare context
-      engine.AnalysisContext context = unit.element.context;
-      Source source = unit.element.source;
+      CompilationUnitElement compilationUnitElement =
+          resolutionMap.elementDeclaredByCompilationUnit(unit);
+      engine.AnalysisContext context = compilationUnitElement.context;
+      Source source = compilationUnitElement.source;
       errors = context.computeErrors(source);
       // prepare code
       fileStamp = context.getModificationStamp(source);
diff --git a/pkg/analysis_server/lib/src/operation/operation_analysis.dart b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
index 0c4c85f..c95f09a 100644
--- a/pkg/analysis_server/lib/src/operation/operation_analysis.dart
+++ b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
@@ -17,6 +17,7 @@
 import 'package:analysis_server/src/services/dependencies/library_dependencies.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/generated/engine.dart';
@@ -71,7 +72,8 @@
 void scheduleIndexOperation(
     AnalysisServer server, String file, CompilationUnit dartUnit) {
   if (server.index != null) {
-    AnalysisContext context = dartUnit.element.context;
+    AnalysisContext context =
+        resolutionMap.elementDeclaredByCompilationUnit(dartUnit).context;
     server.addOperation(new _DartIndexOperation(context, file, dartUnit));
   }
 }
@@ -165,8 +167,9 @@
     if (errors == null) {
       errors = <AnalysisError>[];
     }
-    var serverErrors =
-        protocol.doAnalysisError_listFromEngine(context, lineInfo, errors);
+    AnalysisOptions analysisOptions = context.analysisOptions;
+    var serverErrors = protocol.doAnalysisError_listFromEngine(
+        analysisOptions, lineInfo, errors);
     var params = new protocol.AnalysisErrorsParams(file, serverErrors);
     server.sendNotification(params.toNotification());
   });
diff --git a/pkg/analysis_server/lib/src/plugin/linter_plugin.dart b/pkg/analysis_server/lib/src/plugin/linter_plugin.dart
deleted file mode 100644
index 07fb54e..0000000
--- a/pkg/analysis_server/lib/src/plugin/linter_plugin.dart
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library analysis_server.src.plugin.linter_plugin;
-
-import 'package:analysis_server/src/services/linter/linter.dart';
-import 'package:analyzer/plugin/options.dart';
-import 'package:plugin/plugin.dart';
-
-/// The shared linter server plugin instance.
-final LinterServerPlugin linterServerPlugin = new LinterServerPlugin();
-
-/// A plugin that defines the extension points and extensions that enhance
-/// linting in the server.
-class LinterServerPlugin implements Plugin {
-  /// The unique identifier of this plugin.
-  static const String UNIQUE_IDENTIFIER = 'linter.server';
-
-  @override
-  String get uniqueIdentifier => UNIQUE_IDENTIFIER;
-
-  @override
-  void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) {
-    // None.
-  }
-
-  @override
-  void registerExtensions(RegisterExtension registerExtension) {
-    //
-    // Register options validators.
-    //
-    registerExtension(
-        OPTIONS_VALIDATOR_EXTENSION_POINT_ID, new LinterRuleOptionsValidator());
-  }
-}
diff --git a/pkg/analysis_server/lib/src/protocol_server.dart b/pkg/analysis_server/lib/src/protocol_server.dart
index 3b61ade..596b873 100644
--- a/pkg/analysis_server/lib/src/protocol_server.dart
+++ b/pkg/analysis_server/lib/src/protocol_server.dart
@@ -30,12 +30,13 @@
  * errors.
  */
 List<AnalysisError> doAnalysisError_listFromEngine(
-    engine.AnalysisContext context,
+    engine.AnalysisOptions analysisOptions,
     engine.LineInfo lineInfo,
     List<engine.AnalysisError> errors) {
   List<AnalysisError> serverErrors = <AnalysisError>[];
   for (engine.AnalysisError error in errors) {
-    ErrorProcessor processor = ErrorProcessor.getProcessor(context, error);
+    ErrorProcessor processor =
+        ErrorProcessor.getProcessor(analysisOptions, error);
     if (processor != null) {
       engine.ErrorSeverity severity = processor.severity;
       // Errors with null severity are filtered out.
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index 2f180ee..072fa75 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -9,7 +9,6 @@
 import 'dart:math';
 
 import 'package:analysis_server/src/analysis_server.dart';
-import 'package:analysis_server/src/plugin/linter_plugin.dart';
 import 'package:analysis_server/src/plugin/server_plugin.dart';
 import 'package:analysis_server/src/provisional/completion/dart/completion_plugin.dart';
 import 'package:analysis_server/src/server/http_server.dart';
@@ -25,7 +24,7 @@
 import 'package:analyzer/src/generated/incremental_logger.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:args/args.dart';
-import 'package:linter/src/plugin/linter_plugin.dart';
+import 'package:linter/src/rules.dart' as linter;
 import 'package:plugin/manager.dart';
 import 'package:plugin/plugin.dart';
 
@@ -415,15 +414,12 @@
     ServerPlugin serverPlugin = new ServerPlugin();
     List<Plugin> plugins = <Plugin>[];
     plugins.addAll(AnalysisEngine.instance.requiredPlugins);
-    plugins.add(AnalysisEngine.instance.commandLinePlugin);
-    plugins.add(AnalysisEngine.instance.optionsPlugin);
     plugins.add(serverPlugin);
-    plugins.add(linterPlugin);
-    plugins.add(linterServerPlugin);
     plugins.add(dartCompletionPlugin);
     plugins.addAll(_userDefinedPlugins);
     ExtensionManager manager = new ExtensionManager();
     manager.processPlugins(plugins);
+    linter.registerLintRules();
 
     String defaultSdkPath;
     if (results[SDK_OPTION] != null) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
index 26a9af5..1290f70 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
@@ -20,6 +20,7 @@
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/standard_ast_factory.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -179,7 +180,8 @@
   @override
   LibraryElement get coreLib {
     if (result != null) {
-      AnalysisContext context = result.unit.element.context;
+      AnalysisContext context =
+          resolutionMap.elementDeclaredByCompilationUnit(result.unit).context;
       _coreLib = context.typeProvider.objectType.element.library;
     } else {
       Source coreUri = sourceFactory.forUri('dart:core');
@@ -306,14 +308,18 @@
     if (libElem == null) {
       return null;
     }
-    _resolvedImports = <ImportElement>[];
-    for (ImportElement importElem in libElem.imports) {
-      if (importElem.importedLibrary?.exportNamespace == null) {
-        await _computeAsync(this, importElem.importedLibrary.source,
-            LIBRARY_ELEMENT4, performance, 'resolve imported library');
-        checkAborted();
+    if (result != null) {
+      _resolvedImports = libElem.imports;
+    } else {
+      _resolvedImports = <ImportElement>[];
+      for (ImportElement importElem in libElem.imports) {
+        if (importElem.importedLibrary?.exportNamespace == null) {
+          await _computeAsync(this, importElem.importedLibrary.source,
+              LIBRARY_ELEMENT4, performance, 'resolve imported library');
+          checkAborted();
+        }
+        _resolvedImports.add(importElem);
       }
-      _resolvedImports.add(importElem);
     }
     return _resolvedImports;
   }
@@ -325,7 +331,10 @@
       return _resolvedUnits;
     }
     if (result != null) {
-      _resolvedUnits = result.unit.element.library.units;
+      _resolvedUnits = resolutionMap
+          .elementDeclaredByCompilationUnit(result.unit)
+          .library
+          .units;
       return _resolvedUnits;
     }
     LibraryElement libElem = libraryElement;
@@ -396,7 +405,7 @@
     if (request.context == null) {
       unit = request.result.unit;
       // TODO(scheglov) support for parts
-      libSource = unit.element.source;
+      libSource = resolutionMap.elementDeclaredByCompilationUnit(unit).source;
     } else {
       Source source = request.source;
       AnalysisContext context = request.context;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/inherited_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/inherited_reference_contributor.dart
index fed6a7b..9553dba 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/inherited_reference_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/inherited_reference_contributor.dart
@@ -12,6 +12,7 @@
 import 'package:analysis_server/src/services/completion/dart/optype.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 
@@ -72,7 +73,9 @@
         ? CompletionSuggestionKind.IDENTIFIER
         : CompletionSuggestionKind.INVOCATION;
     OpType optype = (request as DartCompletionRequestImpl).opType;
-    for (InterfaceType type in classDecl.element.allSupertypes) {
+    for (InterfaceType type in resolutionMap
+        .elementDeclaredByClassDeclaration(classDecl)
+        .allSupertypes) {
       if (!isFunctionalArgument) {
         for (PropertyAccessorElement elem in type.accessors) {
           if (elem.isGetter) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_constructor_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_constructor_contributor.dart
index cef91de..ad8e2b4 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_constructor_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_constructor_contributor.dart
@@ -16,6 +16,7 @@
 import 'package:analysis_server/src/services/completion/dart/optype.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/standard_ast_factory.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -248,8 +249,10 @@
     String completion = classDecl.name.name;
     SimpleIdentifier elemId;
 
+    ClassElement classElement =
+        resolutionMap.elementDeclaredByClassDeclaration(classDecl);
     int relevance = optype.constructorSuggestionsFilter(
-        classDecl.element?.type, DART_RELEVANCE_DEFAULT);
+        classElement?.type, DART_RELEVANCE_DEFAULT);
     if (relevance == null) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
index 01298f8..2d3bdd1 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
@@ -17,6 +17,7 @@
 import 'package:analysis_server/src/services/correction/strings.dart';
 import 'package:analysis_server/src/utilities/documentation.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/standard_ast_factory.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -520,8 +521,10 @@
       {bool isAbstract: false,
       bool isDeprecated: false,
       int relevance: DART_RELEVANCE_DEFAULT}) {
-    relevance = optype.returnValueSuggestionsFilter(
-        enumDeclaration.element?.type, relevance);
+    ClassElement classElement =
+        resolutionMap.elementDeclaredByEnumDeclaration(enumDeclaration);
+    relevance =
+        optype.returnValueSuggestionsFilter(classElement?.type, relevance);
     if (relevance != null) {
       _addLocalSuggestion_enumConstant(constantDeclaration, enumDeclaration,
           isAbstract: isAbstract,
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/optype.dart b/pkg/analysis_server/lib/src/services/completion/dart/optype.dart
index 132c823..0591ae2 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/optype.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/optype.dart
@@ -8,6 +8,7 @@
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
 import 'package:analysis_server/src/provisional/completion/dart/completion_target.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -567,7 +568,9 @@
         if (node.parent is VariableDeclaration) {
           VariableDeclaration varDeclaration =
               node.parent as VariableDeclaration;
-          localTypeAssertion = varDeclaration.element?.type;
+          localTypeAssertion = resolutionMap
+              .elementDeclaredByVariableDeclaration(varDeclaration)
+              ?.type;
         } else if (node.parent is AssignmentExpression) {
           AssignmentExpression assignmentExpression =
               node.parent as AssignmentExpression;
@@ -653,7 +656,7 @@
     if (identical(entity, node.expression)) {
       optype.includeReturnValueSuggestions = true;
       optype.returnValueSuggestionsFilter = (DartType dartType, int relevance) {
-        DartType type = node.element?.type;
+        DartType type = resolutionMap.elementForNamedExpression(node)?.type;
         bool isEnum = type != null &&
             type.element is ClassElement &&
             (type.element as ClassElement).isEnum;
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index 73a4bee..ebd7ca3 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -18,6 +18,7 @@
 import 'package:analysis_server/src/services/correction/util.dart';
 import 'package:analysis_server/src/services/search/hierarchy.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -72,7 +73,9 @@
     unit = dartContext.unit;
     unitElement = dartContext.unit.element;
     // library
-    unitLibraryElement = dartContext.unit.element.library;
+    unitLibraryElement = resolutionMap
+        .elementDeclaredByCompilationUnit(dartContext.unit)
+        .library;
     unitLibraryFile = unitLibraryElement.source.fullName;
     unitLibraryFolder = dirname(unitLibraryFile);
     // selection
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 0b1c40e..16ac99c 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -25,6 +25,7 @@
 import 'package:analysis_server/src/services/correction/util.dart';
 import 'package:analysis_server/src/services/search/hierarchy.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -605,7 +606,7 @@
                 utils.getTypeSource(newType, librariesToImport);
             _addReplaceEdit(rf.rangeNode(typeNode), newTypeSource);
             _addFix(DartFixKind.CHANGE_TYPE_ANNOTATION,
-                [typeNode.type.displayName, newTypeSource]);
+                [resolutionMap.typeForTypeName(typeNode), newTypeSource]);
           }
         }
       }
@@ -2071,7 +2072,9 @@
         targetClassNode = targetTypeNode;
         // maybe static
         if (target is Identifier) {
-          staticModifier = target.bestElement.kind == ElementKind.CLASS;
+          staticModifier =
+              resolutionMap.bestElementForIdentifier(target).kind ==
+                  ElementKind.CLASS;
         }
         // use different utils
         CompilationUnitElement targetUnitElement =
diff --git a/pkg/analysis_server/lib/src/services/correction/namespace.dart b/pkg/analysis_server/lib/src/services/correction/namespace.dart
index 87c38dd..7519679 100644
--- a/pkg/analysis_server/lib/src/services/correction/namespace.dart
+++ b/pkg/analysis_server/lib/src/services/correction/namespace.dart
@@ -5,6 +5,7 @@
 library services.src.correction.namespace;
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/resolver/scope.dart';
 
@@ -141,7 +142,8 @@
   AstNode parent = prefixNode.parent;
   CompilationUnit unit =
       prefixNode.getAncestor((node) => node is CompilationUnit);
-  LibraryElement libraryElement = unit.element.library;
+  LibraryElement libraryElement =
+      resolutionMap.elementDeclaredByCompilationUnit(unit).library;
   // prepare used element
   Element usedElement = null;
   if (parent is PrefixedIdentifier) {
diff --git a/pkg/analysis_server/lib/src/services/index/index.dart b/pkg/analysis_server/lib/src/services/index/index.dart
index dcf8ea3..e45be24 100644
--- a/pkg/analysis_server/lib/src/services/index/index.dart
+++ b/pkg/analysis_server/lib/src/services/index/index.dart
@@ -6,6 +6,7 @@
 
 import 'package:analysis_server/src/services/index/index_unit.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
 import 'package:analyzer/src/generated/source.dart';
@@ -80,10 +81,15 @@
    * Index declarations in the given partially resolved [unit].
    */
   void indexDeclarations(CompilationUnit unit) {
-    if (unit?.element?.library == null) {
+    if (unit == null) {
       return;
     }
-    AnalysisContext context = unit.element.context;
+    CompilationUnitElement compilationUnitElement =
+        resolutionMap.elementDeclaredByCompilationUnit(unit);
+    if (compilationUnitElement?.library == null) {
+      return;
+    }
+    AnalysisContext context = compilationUnitElement.context;
     _getContextIndex(context).indexDeclarations(unit);
   }
 
@@ -91,10 +97,15 @@
    * Index the given fully resolved [unit].
    */
   void indexUnit(CompilationUnit unit) {
-    if (unit?.element?.library == null) {
+    if (unit == null) {
       return;
     }
-    AnalysisContext context = unit.element.context;
+    CompilationUnitElement compilationUnitElement =
+        resolutionMap.elementDeclaredByCompilationUnit(unit);
+    if (compilationUnitElement?.library == null) {
+      return;
+    }
+    AnalysisContext context = compilationUnitElement.context;
     _getContextIndex(context).indexUnit(unit);
   }
 
diff --git a/pkg/analysis_server/lib/src/services/index/index_unit.dart b/pkg/analysis_server/lib/src/services/index/index_unit.dart
index 5a9cb47..8f1ce08 100644
--- a/pkg/analysis_server/lib/src/services/index/index_unit.dart
+++ b/pkg/analysis_server/lib/src/services/index/index_unit.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -489,7 +490,10 @@
   @override
   visitClassDeclaration(ClassDeclaration node) {
     if (node.extendsClause == null) {
-      ClassElement objectElement = node.element.supertype?.element;
+      ClassElement objectElement = resolutionMap
+          .elementDeclaredByClassDeclaration(node)
+          .supertype
+          ?.element;
       recordRelationOffset(objectElement, IndexRelationKind.IS_EXTENDED_BY,
           node.name.offset, 0, true);
     }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
index 107abf3..119b89e 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
@@ -21,6 +21,7 @@
 import 'package:analysis_server/src/services/search/element_visitors.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -411,7 +412,8 @@
     AstNode parent = _parentMember.parent;
     // top-level function
     if (parent is CompilationUnit) {
-      LibraryElement libraryElement = parent.element.library;
+      LibraryElement libraryElement =
+          resolutionMap.elementDeclaredByCompilationUnit(parent).library;
       return validateCreateFunction(searchEngine, libraryElement, name);
     }
     // method of class
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
index 5c9e12f..0e802d6 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
@@ -164,7 +164,7 @@
     Set<ClassElement> superClasses = getSuperClasses(elementClass);
     await _prepareReferences();
     Set<ClassElement> subClasses =
-        await getSubClasses(searchEngine, elementClass);
+        await searchEngine.searchAllSubtypes(elementClass);
     // check shadowing of class names
     if (element != null) {
       for (Element element in elements) {
diff --git a/pkg/analysis_server/lib/src/services/search/hierarchy.dart b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
index 1822f1b..92aca41 100644
--- a/pkg/analysis_server/lib/src/services/search/hierarchy.dart
+++ b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
@@ -87,7 +87,7 @@
     }
     // check all sub- classes
     Set<ClassElement> subClasses =
-        await getSubClasses(searchEngine, superClass);
+        await searchEngine.searchAllSubtypes(superClass);
     subClasses.add(superClass);
     for (ClassElement subClass in subClasses) {
       List<Element> subClassMembers = getChildren(subClass, name);
@@ -119,15 +119,6 @@
 }
 
 /**
- * Returns a [Set] with all direct and indirect subclasses of [seed].
- */
-Future<Set<ClassElement>> getSubClasses(
-    SearchEngine searchEngine, ClassElement seed) async {
-  List<SearchMatch> matches = await searchEngine.searchAllSubtypes(seed);
-  return matches.map((match) => match.element).toSet();
-}
-
-/**
  * Returns a [Set] with all direct and indirect superclasses of [seed].
  */
 Set<ClassElement> getSuperClasses(ClassElement seed) {
diff --git a/pkg/analysis_server/lib/src/services/search/search_engine.dart b/pkg/analysis_server/lib/src/services/search/search_engine.dart
index 6ea3395..b739b95 100644
--- a/pkg/analysis_server/lib/src/services/search/search_engine.dart
+++ b/pkg/analysis_server/lib/src/services/search/search_engine.dart
@@ -62,7 +62,7 @@
    *
    * [type] - the [ClassElement] being subtyped by the found matches.
    */
-  Future<List<SearchMatch>> searchAllSubtypes(ClassElement type);
+  Future<Set<ClassElement>> searchAllSubtypes(ClassElement type);
 
   /**
    * Returns declarations of class members with the given name.
diff --git a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
index cdd6a91..63a6996 100644
--- a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
+++ b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
@@ -30,11 +30,11 @@
   SearchEngineImpl(this._index);
 
   @override
-  Future<List<SearchMatch>> searchAllSubtypes(ClassElement type) async {
+  Future<Set<ClassElement>> searchAllSubtypes(ClassElement type) async {
     List<SearchMatch> matches = <SearchMatch>[];
     await _addMatches(
         matches, type, IndexRelationKind.IS_ANCESTOR_OF, MatchKind.DECLARATION);
-    return matches;
+    return matches.map((match) => match.element as ClassElement).toSet();
   }
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/search/search_engine_internal2.dart b/pkg/analysis_server/lib/src/services/search/search_engine_internal2.dart
index 04dd6c5..71b1f297 100644
--- a/pkg/analysis_server/lib/src/services/search/search_engine_internal2.dart
+++ b/pkg/analysis_server/lib/src/services/search/search_engine_internal2.dart
@@ -19,9 +19,21 @@
   SearchEngineImpl2(this._drivers);
 
   @override
-  Future<List<SearchMatch>> searchAllSubtypes(ClassElement type) async {
-    // TODO(scheglov) implement
-    return [];
+  Future<Set<ClassElement>> searchAllSubtypes(ClassElement type) async {
+    Set<ClassElement> allSubtypes = new Set<ClassElement>();
+
+    Future<Null> addSubtypes(ClassElement type) async {
+      List<SearchResult> directResults = await _searchDirectSubtypes(type);
+      for (SearchResult directResult in directResults) {
+        var directSubtype = directResult.enclosingElement as ClassElement;
+        if (allSubtypes.add(directSubtype)) {
+          await addSubtypes(directSubtype);
+        }
+      }
+    }
+
+    await addSubtypes(type);
+    return allSubtypes;
   }
 
   @override
@@ -48,12 +60,8 @@
 
   @override
   Future<List<SearchMatch>> searchSubtypes(ClassElement type) async {
-    List<SearchResult> allResults = [];
-    for (AnalysisDriver driver in _drivers) {
-      List<SearchResult> results = await driver.search.subTypes(type);
-      allResults.addAll(results);
-    }
-    return allResults.map(_SearchMatch.forSearchResult).toList();
+    List<SearchResult> results = await _searchDirectSubtypes(type);
+    return results.map(_SearchMatch.forSearchResult).toList();
   }
 
   @override
@@ -61,6 +69,15 @@
     // TODO(scheglov) implement
     return [];
   }
+
+  Future<List<SearchResult>> _searchDirectSubtypes(ClassElement type) async {
+    List<SearchResult> allResults = [];
+    for (AnalysisDriver driver in _drivers) {
+      List<SearchResult> results = await driver.search.subTypes(type);
+      allResults.addAll(results);
+    }
+    return allResults;
+  }
 }
 
 class _SearchMatch implements SearchMatch {
diff --git a/pkg/analysis_server/lib/src/single_context_manager.dart b/pkg/analysis_server/lib/src/single_context_manager.dart
index fa99c96..5c28cae 100644
--- a/pkg/analysis_server/lib/src/single_context_manager.dart
+++ b/pkg/analysis_server/lib/src/single_context_manager.dart
@@ -147,6 +147,12 @@
   }
 
   @override
+  List<AnalysisDriver> getDriversInAnalysisRoot(Folder analysisRoot) {
+    throw new UnimplementedError(
+        'Unexpected invocation of getDriversInAnalysisRoot in SingleContextManager');
+  }
+
+  @override
   bool isIgnored(String path) {
     return !_isContainedIn(includedPaths, path) || _isExcludedPath(path);
   }
diff --git a/pkg/analysis_server/lib/src/utilities/null_string_sink.dart b/pkg/analysis_server/lib/src/utilities/null_string_sink.dart
new file mode 100644
index 0000000..27fef3a
--- /dev/null
+++ b/pkg/analysis_server/lib/src/utilities/null_string_sink.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/**
+ * A string sink that ignores everything written to it.
+ */
+class NullStringSink implements StringSink {
+  void write(Object obj) {}
+  void writeAll(Iterable objects, [String separator = ""]) {}
+  void writeCharCode(int charCode) {}
+  void writeln([Object obj = ""]) {}
+}
diff --git a/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart b/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
index 7d08f0f..7384a54 100644
--- a/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
@@ -4,11 +4,12 @@
 
 library test.analysis.notification_analysis_options_test;
 
-import 'package:analysis_server/plugin/protocol/protocol.dart';
+import 'package:analysis_server/plugin/protocol/protocol.dart'
+    hide AnalysisOptions;
 import 'package:analysis_server/src/constants.dart';
 import 'package:analysis_server/src/domain_analysis.dart';
 import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/services/lint.dart';
+import 'package:linter/src/rules.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -19,6 +20,11 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(NewAnalysisOptionsFileNotificationTest);
     defineReflectiveTests(OldAnalysisOptionsFileNotificationTest);
+    // These tests all fail, presumably because we are not updating the analysis
+    // options when the file changes and because we are not analyzing the
+    // analysis options file.
+//    defineReflectiveTests(NewAnalysisOptionsFileNotificationTest_Driver);
+//    defineReflectiveTests(OldAnalysisOptionsFileNotificationTest_Driver);
   });
 }
 
@@ -39,8 +45,6 @@
 
   String get optionsFilePath;
 
-  AnalysisContext get testContext => server.getContainingContext(testFile);
-
   List<AnalysisError> get testFileErrors => filesErrors[testFile];
 
   void addOptionsFile(String contents) {
@@ -74,6 +78,7 @@
 
   @override
   void setUp() {
+    registerLintRules();
     super.setUp();
     server.handlers = [new AnalysisDomainHandler(server)];
   }
@@ -103,9 +108,11 @@
     await waitForTasksFinished();
 
     // Verify options file.
+    expect(optionsFileErrors, isNotNull);
     expect(optionsFileErrors, isEmpty);
 
     // Verify test file.
+    expect(testFileErrors, isNotNull);
     expect(testFileErrors, isEmpty);
   }
 
@@ -127,9 +134,11 @@
     await waitForTasksFinished();
 
     // Verify options file.
+    expect(optionsFileErrors, isNotNull);
     expect(optionsFileErrors, isEmpty);
 
     // Verify test file.
+    expect(testFileErrors, isNotNull);
     expect(testFileErrors, isEmpty);
 
     addOptionsFile('''
@@ -287,14 +296,15 @@
   }
 
   void verifyLintsEnabled(List<String> lints) {
-    expect(testContext.analysisOptions.lint, true);
-    var rules = getLints(testContext).map((rule) => rule.name);
+    AnalysisOptions options = analysisOptions;
+    expect(options.lint, true);
+    var rules = options.lintRules.map((rule) => rule.name);
     expect(rules, unorderedEquals(lints));
   }
 
   verifyStrongMode({bool enabled}) {
     // Verify strong-mode enabled.
-    expect(testContext.analysisOptions.strongMode, enabled);
+    expect(analysisOptions.strongMode, enabled);
 
     if (enabled) {
       // Should produce a type warning.
@@ -311,11 +321,35 @@
 @reflectiveTest
 class NewAnalysisOptionsFileNotificationTest
     extends AnalysisOptionsFileNotificationTest {
+  @override
   String get optionsFilePath => '$projectPath/analysis_options.yaml';
 }
 
 @reflectiveTest
+class NewAnalysisOptionsFileNotificationTest_Driver
+    extends NewAnalysisOptionsFileNotificationTest {
+  @override
+  void setUp() {
+    enableNewAnalysisDriver = true;
+    generateSummaryFiles = true;
+    super.setUp();
+  }
+}
+
+@reflectiveTest
 class OldAnalysisOptionsFileNotificationTest
     extends AnalysisOptionsFileNotificationTest {
+  @override
   String get optionsFilePath => '$projectPath/.analysis_options';
 }
+
+@reflectiveTest
+class OldAnalysisOptionsFileNotificationTest_Driver
+    extends OldAnalysisOptionsFileNotificationTest {
+  @override
+  void setUp() {
+    enableNewAnalysisDriver = true;
+    generateSummaryFiles = true;
+    super.setUp();
+  }
+}
diff --git a/pkg/analysis_server/test/analysis/notification_errors_test.dart b/pkg/analysis_server/test/analysis/notification_errors_test.dart
index 6dfc501..9baa09f 100644
--- a/pkg/analysis_server/test/analysis/notification_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_errors_test.dart
@@ -10,8 +10,9 @@
 import 'package:analysis_server/src/domain_analysis.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/lint/linter.dart';
 import 'package:analyzer/src/services/lint.dart';
-import 'package:linter/src/linter.dart';
+import 'package:linter/src/rules.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -38,6 +39,7 @@
 
   @override
   void setUp() {
+    registerLintRules();
     super.setUp();
     server.handlers = [
       new AnalysisDomainHandler(server),
diff --git a/pkg/analysis_server/test/analysis/update_content_test.dart b/pkg/analysis_server/test/analysis/update_content_test.dart
index 788088f..005528e 100644
--- a/pkg/analysis_server/test/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/analysis/update_content_test.dart
@@ -9,6 +9,7 @@
 import 'package:analysis_server/src/constants.dart';
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
@@ -293,7 +294,9 @@
 
   @override
   bool matches(arg) {
-    return arg is CompilationUnit && arg.element.source.fullName == file;
+    return arg is CompilationUnit &&
+        resolutionMap.elementDeclaredByCompilationUnit(arg).source.fullName ==
+            file;
   }
 }
 
diff --git a/pkg/analysis_server/test/analysis_abstract.dart b/pkg/analysis_server/test/analysis_abstract.dart
index 43afb7b..ac463bb 100644
--- a/pkg/analysis_server/test/analysis_abstract.dart
+++ b/pkg/analysis_server/test/analysis_abstract.dart
@@ -6,20 +6,20 @@
 
 import 'dart:async';
 
-import 'package:analysis_server/plugin/protocol/protocol.dart';
+import 'package:analysis_server/plugin/protocol/protocol.dart'
+    hide AnalysisOptions;
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/constants.dart';
 import 'package:analysis_server/src/domain_analysis.dart';
-import 'package:analysis_server/src/plugin/linter_plugin.dart';
 import 'package:analysis_server/src/plugin/server_plugin.dart';
 import 'package:analysis_server/src/provisional/completion/dart/completion_plugin.dart';
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
+import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/sdk.dart';
-import 'package:linter/src/plugin/linter_plugin.dart';
 import 'package:plugin/manager.dart';
 import 'package:plugin/plugin.dart';
 import 'package:test/test.dart';
@@ -69,8 +69,14 @@
   AnalysisDomainHandler get analysisHandler => server.handlers
       .singleWhere((handler) => handler is AnalysisDomainHandler);
 
+  AnalysisOptions get analysisOptions => enableNewAnalysisDriver
+      ? testDiver.analysisOptions
+      : testContext.analysisOptions;
+
   AnalysisContext get testContext => server.getAnalysisContext(testFile);
 
+  AnalysisDriver get testDiver => server.getAnalysisDriver(testFile);
+
   void addAnalysisSubscription(AnalysisService service, String file) {
     // add file to subscription
     var files = analysisSubscriptions[service];
@@ -113,12 +119,8 @@
     ServerPlugin serverPlugin = new ServerPlugin();
     List<Plugin> plugins = <Plugin>[];
     plugins.addAll(AnalysisEngine.instance.requiredPlugins);
-    plugins.add(AnalysisEngine.instance.commandLinePlugin);
-    plugins.add(AnalysisEngine.instance.optionsPlugin);
     plugins.add(serverPlugin);
     plugins.add(dartCompletionPlugin);
-    plugins.add(linterPlugin);
-    plugins.add(linterServerPlugin);
     addServerPlugins(plugins);
     //
     // Process plugins
diff --git a/pkg/analysis_server/test/analysis_server_test.dart b/pkg/analysis_server/test/analysis_server_test.dart
index b6a9475..d4df528 100644
--- a/pkg/analysis_server/test/analysis_server_test.dart
+++ b/pkg/analysis_server/test/analysis_server_test.dart
@@ -124,7 +124,6 @@
   void processRequiredPlugins(ServerPlugin serverPlugin) {
     List<Plugin> plugins = <Plugin>[];
     plugins.addAll(AnalysisEngine.instance.requiredPlugins);
-    plugins.add(AnalysisEngine.instance.optionsPlugin);
     plugins.add(serverPlugin);
 
     ExtensionManager manager = new ExtensionManager();
diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart
index c95252b..094da54 100644
--- a/pkg/analysis_server/test/context_manager_test.dart
+++ b/pkg/analysis_server/test/context_manager_test.dart
@@ -7,21 +7,25 @@
 import 'dart:collection';
 
 import 'package:analysis_server/src/context_manager.dart';
+import 'package:analysis_server/src/utilities/null_string_sink.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
 import 'package:analyzer/source/error_processor.dart';
 import 'package:analyzer/src/context/builder.dart';
+import 'package:analyzer/src/dart/analysis/byte_store.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
+import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/engine.dart' hide AnalysisResult;
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/source_io.dart';
 import 'package:analyzer/src/services/lint.dart';
+import 'package:analyzer/src/summary/summary_file_builder.dart';
 import 'package:analyzer/src/util/glob.dart';
-import 'package:linter/src/plugin/linter_plugin.dart';
+import 'package:linter/src/rules.dart';
 import 'package:linter/src/rules/avoid_as.dart';
 import 'package:path/path.dart' as path;
 import 'package:plugin/manager.dart';
@@ -36,7 +40,9 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(AbstractContextManagerTest);
     defineReflectiveTests(ContextManagerWithNewOptionsTest);
+    defineReflectiveTests(ContextManagerWithNewOptionsTest_Driver);
     defineReflectiveTests(ContextManagerWithOldOptionsTest);
+    defineReflectiveTests(ContextManagerWithOldOptionsTest_Driver);
   });
 }
 
@@ -151,16 +157,15 @@
         manager.contextsInAnalysisRoot(resourceProvider.newFolder(projPath));
     expect(contexts, isNotNull);
     expect(contexts.length, equals(1));
-    var context = contexts[0];
-    var source = context.sourceFactory.forUri('dart:foobar');
+    var source = sourceFactory.forUri('dart:foobar');
     expect(source, isNotNull);
     expect(source.fullName, '/my/proj/sdk_ext/entry.dart');
     // We can't find dart:core because we didn't list it in our
     // embedded_libs map.
-    expect(context.sourceFactory.forUri('dart:core'), isNull);
+    expect(sourceFactory.forUri('dart:core'), isNull);
     // We can find dart:typed_data because we listed it in our
     // embedded_libs map.
-    expect(context.sourceFactory.forUri('dart:typed_data'), isNotNull);
+    expect(sourceFactory.forUri('dart:typed_data'), isNotNull);
   }
 
   test_ignoreFilesInPackagesFolder() {
@@ -388,8 +393,7 @@
         manager.contextsInAnalysisRoot(resourceProvider.newFolder(projPath));
     expect(contexts, isNotNull);
     expect(contexts.length, equals(1));
-    var context = contexts[0];
-    var source = context.sourceFactory.forUri('dart:foobar');
+    var source = sourceFactory.forUri('dart:foobar');
     expect(source.fullName, equals('/my/proj/sdk_ext/entry.dart'));
   }
 
@@ -406,7 +410,7 @@
     expect(contextsInAnalysisRoot, hasLength(1));
     AnalysisContext context = contextsInAnalysisRoot[0];
     expect(context, isNotNull);
-    Source result = context.sourceFactory.forUri('package:foo/foo.dart');
+    Source result = sourceFactory.forUri('package:foo/foo.dart');
     expect(result, isNotNull);
     expect(result.exists(), isFalse);
   }
@@ -959,7 +963,7 @@
     expect(contextsInAnalysisRoot, hasLength(1));
     AnalysisContext context = contextsInAnalysisRoot[0];
     expect(context, isNotNull);
-    Source result = context.sourceFactory.forUri('package:foo/foo.dart');
+    Source result = sourceFactory.forUri('package:foo/foo.dart');
     expect(result.fullName, filePath);
   }
 
@@ -1745,12 +1749,15 @@
         .toList();
   }
 
-  List<ErrorProcessor> get errorProcessors =>
-      callbacks.currentContext.analysisOptions.errorProcessors;
+  AnalysisOptions get analysisOptions => callbacks.analysisOptions;
 
-  List<Linter> get lints => getLints(callbacks.currentContext);
+  bool get enableAnalysisDriver => false;
 
-  AnalysisOptions get options => callbacks.currentContext.analysisOptions;
+  List<ErrorProcessor> get errorProcessors => analysisOptions.errorProcessors;
+
+  List<Linter> get lints => analysisOptions.lintRules;
+
+  SourceFactory get sourceFactory => callbacks.sourceFactory;
 
   Map<String, List<Folder>> get _currentPackageMap => _packageMap(projPath);
 
@@ -1759,8 +1766,16 @@
     resourceProvider.deleteFile(filePath);
   }
 
+  /**
+   * TODO(brianwilkerson) This doesn't add the strong mode processor when using
+   * the new analysis driver.
+   */
   ErrorProcessor getProcessor(AnalysisError error) =>
-      ErrorProcessor.getProcessor(callbacks.currentContext, error);
+      callbacks.currentDriver == null
+          ? ErrorProcessor.getProcessor(
+              callbacks.currentContext.analysisOptions, error)
+          : errorProcessors.firstWhere((ErrorProcessor p) => p.appliesTo(error),
+              orElse: () => null);
 
   String newFile(List<String> pathComponents, [String content = '']) {
     String filePath = path.posix.joinAll(pathComponents);
@@ -1768,6 +1783,12 @@
     return filePath;
   }
 
+  String newFileFromBytes(List<String> pathComponents, List<int> bytes) {
+    String filePath = path.posix.joinAll(pathComponents);
+    resourceProvider.newFileWithBytes(filePath, bytes);
+    return filePath;
+  }
+
   String newFolder(List<String> pathComponents) {
     String folderPath = path.posix.joinAll(pathComponents);
     resourceProvider.newFolder(folderPath);
@@ -1777,11 +1798,10 @@
   void processRequiredPlugins() {
     List<Plugin> plugins = <Plugin>[];
     plugins.addAll(AnalysisEngine.instance.requiredPlugins);
-    plugins.add(AnalysisEngine.instance.commandLinePlugin);
-    plugins.add(AnalysisEngine.instance.optionsPlugin);
-    plugins.add(linterPlugin);
     ExtensionManager manager = new ExtensionManager();
     manager.processPlugins(plugins);
+
+    registerLintRules();
   }
 
   UriResolver providePackageResolver(Folder folder) => packageResolver;
@@ -1789,9 +1809,10 @@
   void setUp() {
     processRequiredPlugins();
     resourceProvider = new MemoryResourceProvider();
+    resourceProvider.newFolder(projPath);
     packageMapProvider = new MockPackageMapProvider();
     // Create an SDK in the mock file system.
-    new MockSdk(resourceProvider: resourceProvider);
+    new MockSdk(generateSummaryFiles: true, resourceProvider: resourceProvider);
     DartSdkManager sdkManager = new DartSdkManager('/', false);
     manager = new ContextManagerImpl(
         resourceProvider,
@@ -1801,10 +1822,12 @@
         analysisFilesGlobs,
         InstrumentationService.NULL_SERVICE,
         new AnalysisOptionsImpl(),
-        false);
-    callbacks = new TestContextManagerCallbacks(resourceProvider);
+        enableAnalysisDriver);
+    PerformanceLog logger = new PerformanceLog(new NullStringSink());
+    AnalysisDriverScheduler scheduler = new AnalysisDriverScheduler(logger);
+    callbacks =
+        new TestContextManagerCallbacks(resourceProvider, logger, scheduler);
     manager.callbacks = callbacks;
-    resourceProvider.newFolder(projPath);
   }
 
   /**
@@ -1833,10 +1856,96 @@
 }
 
 @reflectiveTest
+class ContextManagerWithNewOptionsTest_Driver
+    extends ContextManagerWithNewOptionsTest {
+  bool get enableAnalysisDriver => true;
+
+  @failingTest
+  test_analysis_options_file_delete() async {
+    // It appears that this fails because we are not correctly updating the
+    // analysis options in the driver when the file is removed.
+    return super.test_analysis_options_file_delete();
+  }
+
+  @failingTest
+  test_analysis_options_file_delete_with_embedder() async {
+    // This fails because the ContextBuilder doesn't pick up the strongMode
+    // flag from the embedder.yaml file.
+    return super.test_analysis_options_file_delete_with_embedder();
+  }
+
+  @failingTest
+  test_embedder_options() async {
+    // This fails because the ContextBuilder doesn't pick up the strongMode
+    // flag from the embedder.yaml file.
+    return super.test_embedder_options();
+  }
+
+  @failingTest
+  test_optionsFile_update_strongMode() async {
+    // It appears that this fails because we are not correctly updating the
+    // analysis options in the driver when the file is modified.
+    //return super.test_optionsFile_update_strongMode();
+    // After a few other changes, the test now times out on my machine, so I'm
+    // disabling it in order to prevent it from being flaky.
+    fail('Test times out');
+  }
+
+  @failingTest
+  test_path_filter_analysis_option() async {
+    // This fails because we're not analyzing the analyis options file.
+    return super.test_path_filter_analysis_option();
+  }
+}
+
+@reflectiveTest
 class ContextManagerWithOldOptionsTest extends ContextManagerWithOptionsTest {
   String get optionsFileName => AnalysisEngine.ANALYSIS_OPTIONS_FILE;
 }
 
+@reflectiveTest
+class ContextManagerWithOldOptionsTest_Driver
+    extends ContextManagerWithOldOptionsTest {
+  bool get enableAnalysisDriver => true;
+
+  @failingTest
+  test_analysis_options_file_delete() async {
+    // It appears that this fails because we are not correctly updating the
+    // analysis options in the driver when the file is removed.
+    return super.test_analysis_options_file_delete();
+  }
+
+  @failingTest
+  test_analysis_options_file_delete_with_embedder() async {
+    // This fails because the ContextBuilder doesn't pick up the strongMode
+    // flag from the embedder.yaml file.
+    return super.test_analysis_options_file_delete_with_embedder();
+  }
+
+  @failingTest
+  test_embedder_options() async {
+    // This fails because the ContextBuilder doesn't pick up the strongMode
+    // flag from the embedder.yaml file.
+    return super.test_embedder_options();
+  }
+
+  @failingTest
+  test_optionsFile_update_strongMode() async {
+    // It appears that this fails because we are not correctly updating the
+    // analysis options in the driver when the file is modified.
+    //return super.test_optionsFile_update_strongMode();
+    // After a few other changes, the test now times out on my machine, so I'm
+    // disabling it in order to prevent it from being flaky.
+    fail('Test times out');
+  }
+
+  @failingTest
+  test_path_filter_analysis_option() async {
+    // This fails because we're not analyzing the analyis options file.
+    return super.test_path_filter_analysis_option();
+  }
+}
+
 abstract class ContextManagerWithOptionsTest extends ContextManagerTest {
   String get optionsFileName;
 
@@ -1864,7 +1973,7 @@
     // Verify options were set.
     expect(errorProcessors, hasLength(1));
     expect(lints, hasLength(1));
-    expect(options.enableStrictCallChecks, isTrue);
+    expect(analysisOptions.enableStrictCallChecks, isTrue);
 
     // Remove options.
     deleteFile([projPath, optionsFileName]);
@@ -1873,7 +1982,7 @@
     // Verify defaults restored.
     expect(errorProcessors, isEmpty);
     expect(lints, isEmpty);
-    expect(options.enableStrictCallChecks, isFalse);
+    expect(analysisOptions.enableStrictCallChecks, isFalse);
   }
 
   test_analysis_options_file_delete_with_embedder() async {
@@ -1916,8 +2025,8 @@
     await pumpEventQueue();
 
     // Verify options were set.
-    expect(options.enableStrictCallChecks, isTrue);
-    expect(options.strongMode, isTrue);
+    expect(analysisOptions.enableStrictCallChecks, isTrue);
+    expect(analysisOptions.strongMode, isTrue);
     expect(errorProcessors, hasLength(2));
     expect(lints, hasLength(2));
 
@@ -1926,7 +2035,7 @@
     await pumpEventQueue();
 
     // Verify defaults restored.
-    expect(options.enableStrictCallChecks, isFalse);
+    expect(analysisOptions.enableStrictCallChecks, isFalse);
     expect(lints, hasLength(1));
     expect(lints.first, new isInstanceOf<AvoidAs>());
     expect(errorProcessors, hasLength(1));
@@ -1963,7 +2072,7 @@
     manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     await pumpEventQueue();
     // Verify options were set.
-    expect(options.enableStrictCallChecks, isTrue);
+    expect(analysisOptions.enableStrictCallChecks, isTrue);
     expect(errorProcessors, hasLength(1));
     expect(lints, hasLength(1));
     expect(lints[0].name, 'camel_case_types');
@@ -1995,6 +2104,8 @@
     String sdkExtPath = newFolder([projPath, 'sdk_ext']);
     newFile([projPath, 'test', 'test.dart']);
     newFile([sdkExtPath, 'entry.dart']);
+    List<int> bytes = new SummaryBuilder([], null, true).build();
+    newFileFromBytes([projPath, 'sdk.ds'], bytes);
     // Setup _embedder.yaml.
     newFile(
         [libPath, '_embedder.yaml'],
@@ -2042,14 +2153,13 @@
         manager.contextsInAnalysisRoot(resourceProvider.newFolder(projPath));
     expect(contexts, isNotNull);
     expect(contexts, hasLength(1));
-    var context = contexts[0];
 
     // Verify options.
     // * from `_embedder.yaml`:
-    expect(context.analysisOptions.strongMode, isTrue);
-    expect(context.analysisOptions.enableSuperMixins, isTrue);
+    expect(analysisOptions.strongMode, isTrue);
+    expect(analysisOptions.enableSuperMixins, isTrue);
     // * from analysis options:
-    expect(context.analysisOptions.enableStrictCallChecks, isTrue);
+    expect(analysisOptions.enableStrictCallChecks, isTrue);
 
     // * verify tests are excluded
     expect(
@@ -2075,7 +2185,7 @@
             ['avoid_as' /* embedder */, 'camel_case_types' /* options */]));
 
     // Sanity check embedder libs.
-    var source = context.sourceFactory.forUri('dart:foobar');
+    var source = sourceFactory.forUri('dart:foobar');
     expect(source, isNotNull);
     expect(source.fullName, '/my/proj/sdk_ext/entry.dart');
   }
@@ -2171,13 +2281,22 @@
     manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     await pumpEventQueue();
 
-    AnalysisContext context = manager.getContextFor(projPath);
-    Source testSource = context.getSourcesWithFullName(file.path).single;
+    if (enableAnalysisDriver) {
+      AnalysisResult result =
+          await callbacks.currentDriver.getResult(file.path);
 
-    // Not strong mode - both in the context and the SDK context.
-    {
-      AnalysisContext sdkContext = context.sourceFactory.dartSdk.context;
-      expect(context.analysisOptions.strongMode, isFalse);
+      // Not strong mode - both in the context and the SDK context.
+      AnalysisContext sdkContext = sourceFactory.dartSdk.context;
+      expect(analysisOptions.strongMode, isFalse);
+      expect(sdkContext.analysisOptions.strongMode, isFalse);
+      expect(result.errors, isEmpty);
+    } else {
+      AnalysisContext context = manager.getContextFor(projPath);
+      Source testSource = context.getSourcesWithFullName(file.path).single;
+
+      // Not strong mode - both in the context and the SDK context.
+      AnalysisContext sdkContext = sourceFactory.dartSdk.context;
+      expect(analysisOptions.strongMode, isFalse);
       expect(sdkContext.analysisOptions.strongMode, isFalse);
       expect(context.computeErrors(testSource), isEmpty);
     }
@@ -2192,10 +2311,22 @@
     await pumpEventQueue();
 
     // Strong mode - both in the context and the SDK context.
-    {
+    if (enableAnalysisDriver) {
+      AnalysisResult result =
+          await callbacks.currentDriver.getResult(file.path);
+
+      // Not strong mode - both in the context and the SDK context.
+      AnalysisContext sdkContext = sourceFactory.dartSdk.context;
+      expect(analysisOptions.strongMode, isTrue);
+      expect(sdkContext.analysisOptions.strongMode, isTrue);
+      // The code is strong-mode clean.
+      // Verify that TypeSystem was reset.
+      expect(result.errors, isEmpty);
+    } else {
       AnalysisContext context = manager.getContextFor(projPath);
-      AnalysisContext sdkContext = context.sourceFactory.dartSdk.context;
-      expect(context.analysisOptions.strongMode, isTrue);
+      Source testSource = context.getSourcesWithFullName(file.path).single;
+      AnalysisContext sdkContext = sourceFactory.dartSdk.context;
+      expect(analysisOptions.strongMode, isTrue);
       expect(sdkContext.analysisOptions.strongMode, isTrue);
       // The code is strong-mode clean.
       // Verify that TypeSystem was reset.
@@ -2223,15 +2354,27 @@
 ''');
     // Setup context.
     manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+
     // Verify that analysis options was parsed and the ignore patterns applied.
-    Map<String, int> fileTimestamps =
-        callbacks.currentContextFilePaths[projPath];
-    expect(fileTimestamps, isNotEmpty);
-    List<String> files = fileTimestamps.keys.toList();
-    expect(
-        files,
-        unorderedEquals(
-            ['/my/proj/lib/main.dart', '/my/proj/$optionsFileName']));
+    Folder projectFolder = resourceProvider.newFolder(projPath);
+    if (enableAnalysisDriver) {
+      var drivers = manager.getDriversInAnalysisRoot(projectFolder);
+      expect(drivers, hasLength(1));
+      AnalysisDriver driver = drivers[0];
+      expect(
+          driver.addedFiles,
+          unorderedEquals(
+              ['/my/proj/lib/main.dart', '/my/proj/$optionsFileName']));
+    } else {
+      Map<String, int> fileTimestamps =
+          callbacks.currentContextFilePaths[projPath];
+      expect(fileTimestamps, isNotEmpty);
+      List<String> files = fileTimestamps.keys.toList();
+      expect(
+          files,
+          unorderedEquals(
+              ['/my/proj/lib/main.dart', '/my/proj/$optionsFileName']));
+    }
   }
 
   test_path_filter_child_contexts_option() async {
@@ -2263,11 +2406,19 @@
     manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     // Verify that the context in other_lib wasn't created and that the
     // context in lib was created.
-    var contexts =
-        manager.contextsInAnalysisRoot(resourceProvider.newFolder(projPath));
-    expect(contexts.length, 2);
-    expect(contexts[0].name, equals('/my/proj'));
-    expect(contexts[1].name, equals('/my/proj/lib'));
+    Folder projectFolder = resourceProvider.newFolder(projPath);
+    if (enableAnalysisDriver) {
+      var drivers = manager.getDriversInAnalysisRoot(projectFolder);
+      expect(drivers, hasLength(2));
+      expect(drivers[0].name, equals('proj'));
+      expect(drivers[1].name, equals('lib'));
+    } else {
+      var contexts =
+          manager.contextsInAnalysisRoot(resourceProvider.newFolder(projPath));
+      expect(contexts.length, 2);
+      expect(contexts[0].name, equals('/my/proj'));
+      expect(contexts[1].name, equals('/my/proj/lib'));
+    }
   }
 
   test_path_filter_recursive_wildcard_child_contexts_option() async {
@@ -2297,13 +2448,21 @@
   ''');
     // Setup context.
     manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+
     // Verify that the context in other_lib wasn't created and that the
     // context in lib was created.
-    var contexts =
-        manager.contextsInAnalysisRoot(resourceProvider.newFolder(projPath));
-    expect(contexts.length, 2);
-    expect(contexts[0].name, equals('/my/proj'));
-    expect(contexts[1].name, equals('/my/proj/lib'));
+    Folder projectFolder = resourceProvider.newFolder(projPath);
+    if (enableAnalysisDriver) {
+      var drivers = manager.getDriversInAnalysisRoot(projectFolder);
+      expect(drivers, hasLength(2));
+      expect(drivers[0].name, equals('proj'));
+      expect(drivers[1].name, equals('lib'));
+    } else {
+      var contexts = manager.contextsInAnalysisRoot(projectFolder);
+      expect(contexts.length, 2);
+      expect(contexts[0].name, equals('/my/proj'));
+      expect(contexts[1].name, equals('/my/proj/lib'));
+    }
   }
 
   test_path_filter_wildcard_child_contexts_option() async {
@@ -2331,15 +2490,23 @@
   exclude:
     - 'other_lib/*'
 ''');
-    // Setup context.
+    // Setup context / driver.
     manager.setRoots(<String>[projPath], <String>[], <String, String>{});
-    // Verify that the context in other_lib wasn't created and that the
-    // context in lib was created.
-    var contexts =
-        manager.contextsInAnalysisRoot(resourceProvider.newFolder(projPath));
-    expect(contexts.length, 2);
-    expect(contexts[0].name, equals('/my/proj'));
-    expect(contexts[1].name, equals('/my/proj/lib'));
+
+    Folder projectFolder = resourceProvider.newFolder(projPath);
+    if (enableAnalysisDriver) {
+      var drivers = manager.getDriversInAnalysisRoot(projectFolder);
+      expect(drivers, hasLength(2));
+      expect(drivers[0].name, equals('proj'));
+      expect(drivers[1].name, equals('lib'));
+    } else {
+      // Verify that the context in other_lib wasn't created and that the
+      // context in lib was created.
+      var contexts = manager.contextsInAnalysisRoot(projectFolder);
+      expect(contexts, hasLength(2));
+      expect(contexts[0].name, equals('/my/proj'));
+      expect(contexts[1].name, equals('/my/proj/lib'));
+    }
   }
 
   void test_setRoots_nested_excludedByOuter() {
@@ -2426,10 +2593,7 @@
     // Setup context.
     manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     // Verify that analysis options was parsed and strong-mode set.
-    Map<String, int> fileTimestamps =
-        callbacks.currentContextFilePaths[projPath];
-    expect(fileTimestamps, isNotEmpty);
-    expect(callbacks.currentContext.analysisOptions.strongMode, true);
+    expect(analysisOptions.strongMode, true);
   }
 }
 
@@ -2445,6 +2609,11 @@
   AnalysisContext currentContext;
 
   /**
+   * The analysis driver that was created.
+   */
+  AnalysisDriver currentDriver;
+
+  /**
    * Map from context to the timestamp when the context was created.
    */
   Map<String, int> currentContextTimestamps = <String, int>{};
@@ -2468,21 +2637,69 @@
   final ResourceProvider resourceProvider;
 
   /**
+   * The logger used by the scheduler and the driver.
+   */
+  final PerformanceLog logger;
+
+  /**
+   * The scheduler used by the driver.
+   */
+  final AnalysisDriverScheduler scheduler;
+
+  /**
    * The list of `flushedFiles` in the last [removeContext] invocation.
    */
   List<String> lastFlushedFiles;
 
-  TestContextManagerCallbacks(this.resourceProvider);
+  TestContextManagerCallbacks(
+      this.resourceProvider, this.logger, this.scheduler);
+
+  /**
+   * Return the current set of analysis options.
+   */
+  AnalysisOptions get analysisOptions => currentDriver == null
+      ? currentContext.analysisOptions
+      : currentDriver.analysisOptions;
 
   /**
    * Iterable of the paths to contexts that currently exist.
    */
   Iterable<String> get currentContextPaths => currentContextTimestamps.keys;
 
+  /**
+   * Return the current source factory.
+   */
+  SourceFactory get sourceFactory => currentDriver == null
+      ? currentContext.sourceFactory
+      : currentDriver.sourceFactory;
+
   @override
   AnalysisDriver addAnalysisDriver(Folder folder, AnalysisOptions options) {
-    // TODO: implement addAnalysisDriver
-    throw new UnimplementedError();
+    String path = folder.path;
+    expect(currentContextPaths, isNot(contains(path)));
+    currentContextTimestamps[path] = now;
+
+    ContextBuilder builder =
+        createContextBuilder(folder, options, useSummaries: true);
+    AnalysisContext context = builder.buildContext(folder.path);
+    SourceFactory sourceFactory = context.sourceFactory;
+    AnalysisOptions analysisOptions = context.analysisOptions;
+    context.dispose();
+
+    currentDriver = new AnalysisDriver(
+        scheduler,
+        logger,
+        resourceProvider,
+        new MemoryByteStore(),
+        new FileContentOverlay(),
+        sourceFactory,
+        analysisOptions);
+    currentDriver.name = folder.shortName;
+    currentDriver.exceptions.listen((ExceptionResult result) {
+      AnalysisEngine.instance.logger
+          .logError('Analysis failed: ${result.path}', result.exception);
+    });
+    return currentDriver;
   }
 
   @override
@@ -2500,30 +2717,42 @@
 
   @override
   void applyChangesToContext(Folder contextFolder, ChangeSet changeSet) {
-    Map<String, int> filePaths = currentContextFilePaths[contextFolder.path];
-    Set<Source> sources = currentContextSources[contextFolder.path];
+    if (currentDriver != null) {
+      changeSet.addedSources.forEach((source) {
+        currentDriver.addFile(source.fullName);
+      });
+      changeSet.changedSources.forEach((source) {
+        currentDriver.changeFile(source.fullName);
+      });
+      changeSet.removedSources.forEach((source) {
+        currentDriver.removeFile(source.fullName);
+      });
+    } else {
+      Map<String, int> filePaths = currentContextFilePaths[contextFolder.path];
+      Set<Source> sources = currentContextSources[contextFolder.path];
 
-    for (Source source in changeSet.addedSources) {
-      expect(filePaths, isNot(contains(source.fullName)));
-      filePaths[source.fullName] = now;
-      sources.add(source);
-    }
-    for (Source source in changeSet.removedSources) {
-      expect(filePaths, contains(source.fullName));
-      filePaths.remove(source.fullName);
-      sources.remove(source);
-    }
-    for (Source source in changeSet.changedSources) {
-      expect(filePaths, contains(source.fullName));
-      filePaths[source.fullName] = now;
-    }
+      for (Source source in changeSet.addedSources) {
+        expect(filePaths, isNot(contains(source.fullName)));
+        filePaths[source.fullName] = now;
+        sources.add(source);
+      }
+      for (Source source in changeSet.removedSources) {
+        expect(filePaths, contains(source.fullName));
+        filePaths.remove(source.fullName);
+        sources.remove(source);
+      }
+      for (Source source in changeSet.changedSources) {
+        expect(filePaths, contains(source.fullName));
+        filePaths[source.fullName] = now;
+      }
 
-    currentContext.applyChanges(changeSet);
+      currentContext.applyChanges(changeSet);
+    }
   }
 
   @override
   void applyFileRemoved(AnalysisDriver driver, String file) {
-    throw new StateError('Unexpected invocation of applyFileRemoved');
+    driver.removeFile(file);
   }
 
   void assertContextFiles(String contextPath, List<String> expectedFiles) {
@@ -2541,8 +2770,9 @@
   }
 
   @override
-  ContextBuilder createContextBuilder(Folder folder, AnalysisOptions options) {
-    DartSdkManager sdkManager = new DartSdkManager('/', false);
+  ContextBuilder createContextBuilder(Folder folder, AnalysisOptions options,
+      {bool useSummaries = false}) {
+    DartSdkManager sdkManager = new DartSdkManager('/', useSummaries);
     ContextBuilderOptions builderOptions = new ContextBuilderOptions();
     builderOptions.defaultOptions = options;
     ContextBuilder builder = new ContextBuilder(
diff --git a/pkg/analysis_server/test/domain_analysis_test.dart b/pkg/analysis_server/test/domain_analysis_test.dart
index 0a8fd1c..24c5788 100644
--- a/pkg/analysis_server/test/domain_analysis_test.dart
+++ b/pkg/analysis_server/test/domain_analysis_test.dart
@@ -38,7 +38,6 @@
   void processRequiredPlugins(ServerPlugin serverPlugin) {
     List<Plugin> plugins = <Plugin>[];
     plugins.addAll(AnalysisEngine.instance.requiredPlugins);
-    plugins.add(AnalysisEngine.instance.optionsPlugin);
     plugins.add(serverPlugin);
 
     ExtensionManager manager = new ExtensionManager();
@@ -610,7 +609,6 @@
   void processRequiredPlugins(ServerPlugin serverPlugin) {
     List<Plugin> plugins = <Plugin>[];
     plugins.addAll(AnalysisEngine.instance.requiredPlugins);
-    plugins.add(AnalysisEngine.instance.optionsPlugin);
     plugins.add(serverPlugin);
 
     ExtensionManager manager = new ExtensionManager();
diff --git a/pkg/analysis_server/test/domain_diagnostic_test.dart b/pkg/analysis_server/test/domain_diagnostic_test.dart
index d24dea7..1842045 100644
--- a/pkg/analysis_server/test/domain_diagnostic_test.dart
+++ b/pkg/analysis_server/test/domain_diagnostic_test.dart
@@ -27,8 +27,6 @@
   void processRequiredPlugins(ServerPlugin serverPlugin) {
     List<Plugin> plugins = <Plugin>[];
     plugins.addAll(AnalysisEngine.instance.requiredPlugins);
-    plugins.add(AnalysisEngine.instance.commandLinePlugin);
-    plugins.add(AnalysisEngine.instance.optionsPlugin);
     plugins.add(serverPlugin);
 
     ExtensionManager manager = new ExtensionManager();
diff --git a/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart b/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart
index a2ea8e7..3216977 100644
--- a/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.analysis.analysis_options_test;
-
 import 'package:analysis_server/plugin/protocol/protocol.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:test/test.dart';
@@ -14,11 +12,12 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OptionsIntegrationTest);
+    defineReflectiveTests(OptionsIntegrationTest_Driver);
   });
 }
 
-@reflectiveTest
-class OptionsIntegrationTest extends AbstractAnalysisServerIntegrationTest {
+class AbstractOptionsIntegrationTest
+    extends AbstractAnalysisServerIntegrationTest {
   test_option_warning_newOptionFile() async {
     String options = sourcePath(AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE);
     writeFile(
@@ -73,3 +72,26 @@
     expect(error.location.startColumn, 7);
   }
 }
+
+@reflectiveTest
+class OptionsIntegrationTest extends AbstractOptionsIntegrationTest {}
+
+@reflectiveTest
+class OptionsIntegrationTest_Driver extends AbstractOptionsIntegrationTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+
+  @failingTest
+  test_option_warning_newOptionFile() async {
+    //   TimeoutException after 0:00:30.000000: Test timed out after 30 seconds.
+    //return super.test_option_warning_newOptionFile();
+    fail('Test timed out');
+  }
+
+  @failingTest
+  test_option_warning_oldOptionFile() async {
+    //   TimeoutException after 0:00:30.000000: Test timed out after 30 seconds.
+    //return super.test_option_warning_oldOptionFile();
+    fail('Test timed out');
+  }
+}
diff --git a/pkg/analysis_server/test/integration/analysis/error_test.dart b/pkg/analysis_server/test/integration/analysis/error_test.dart
index f2abb51..2a86499 100644
--- a/pkg/analysis_server/test/integration/analysis/error_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/error_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.analysis.error;
-
 import 'package:analysis_server/plugin/protocol/protocol.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -13,11 +11,11 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisErrorIntegrationTest);
+    defineReflectiveTests(AnalysisErrorIntegrationTest_Driver);
   });
 }
 
-@reflectiveTest
-class AnalysisErrorIntegrationTest
+class AbstractAnalysisErrorIntegrationTest
     extends AbstractAnalysisServerIntegrationTest {
   test_detect_simple_error() {
     String pathname = sourcePath('test.dart');
@@ -96,3 +94,24 @@
     expect(errors, isEmpty);
   }
 }
+
+@reflectiveTest
+class AnalysisErrorIntegrationTest
+    extends AbstractAnalysisErrorIntegrationTest {}
+
+@reflectiveTest
+class AnalysisErrorIntegrationTest_Driver
+    extends AbstractAnalysisErrorIntegrationTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+
+  @failingTest
+  test_super_mixins_enabled() async {
+    //  Expected: empty
+    //    Actual: [
+    //    AnalysisError:{"severity":"ERROR","type":"COMPILE_TIME_ERROR","location":{"file":"/var/folders/00/0w95r000h01000cxqpysvccm003j4q/T/analysisServerfbuOQb/test.dart","offset":31,"length":1,"startLine":1,"startColumn":32},"message":"The class 'C' can't be used as a mixin because it extends a class other than Object.","correction":"","code":"mixin_inherits_from_not_object","hasFix":false},
+    //    AnalysisError:{"severity":"ERROR","type":"COMPILE_TIME_ERROR","location":{"file":"/var/folders/00/0w95r000h01000cxqpysvccm003j4q/T/analysisServerfbuOQb/test.dart","offset":31,"length":1,"startLine":1,"startColumn":32},"message":"The class 'C' can't be used as a mixin because it references 'super'.","correction":"","code":"mixin_references_super","hasFix":false}
+    //  ]
+    return super.test_super_mixins_enabled();
+  }
+}
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_after_analysis_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_after_analysis_test.dart
index 37caf81..81ab905 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_after_analysis_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_after_analysis_test.dart
@@ -2,19 +2,26 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.analysis.get.errors.after.analysis;
-
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'get_errors.dart';
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(Test);
+    defineReflectiveTests(GetErrorsAfterTest);
+    defineReflectiveTests(GetErrorsAfterTest_Driver);
   });
 }
 
+class AbstractGetErrorsAfterTest extends AnalysisDomainGetErrorsTest {
+  AbstractGetErrorsAfterTest() : super(true);
+}
+
 @reflectiveTest
-class Test extends AnalysisDomainGetErrorsTest {
-  Test() : super(true);
+class GetErrorsAfterTest extends AbstractGetErrorsAfterTest {}
+
+@reflectiveTest
+class GetErrorsAfterTest_Driver extends AbstractGetErrorsAfterTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
 }
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_before_analysis_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_before_analysis_test.dart
index 4863a8d..c2b6c20 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_before_analysis_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_before_analysis_test.dart
@@ -2,19 +2,49 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.analysis.get.errors.before.analysis;
-
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'get_errors.dart';
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(Test);
+    defineReflectiveTests(GetErrorsBeforeTest);
+    defineReflectiveTests(GetErrorsBeforeTest_Driver);
   });
 }
 
+class AbstractGetErrorsBeforeTest extends AnalysisDomainGetErrorsTest {
+  AbstractGetErrorsBeforeTest() : super(false);
+}
+
 @reflectiveTest
-class Test extends AnalysisDomainGetErrorsTest {
-  Test() : super(false);
+class GetErrorsBeforeTest extends AbstractGetErrorsBeforeTest {}
+
+@reflectiveTest
+class GetErrorsBeforeTest_Driver extends AbstractGetErrorsBeforeTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+
+  @failingTest
+  test_getErrors() {
+    //   UnimplementedError: Server responded with an error:
+    // {"error":{"code":"SERVER_ERROR","message":"Bad state: Should not be used with the new analysis driver","stackTrace":"
+    // #0      ContextManagerImpl.folderMap (package:analysis_server/src/context_manager.dart:550:7)
+    // #1      ContextManagerImpl.analysisContexts (package:analysis_server/src/context_manager.dart:546:53)
+    // #2      AnalysisServer.analysisContexts (package:analysis_server/src/analysis_server.dart:453:22)
+    // #3      AnalysisServer.getContextSourcePair (package:analysis_server/src/analysis_server.dart:722:37)
+    // #4      AnalysisServer.getAnalysisContext (package:analysis_server/src/analysis_server.dart:590:12)
+    // #5      AnalysisServer.onFileAnalysisComplete (package:analysis_server/src/analysis_server.dart:948:31)
+    // #6      AnalysisDomainHandler.getErrors (package:analysis_server/src/domain_analysis.dart:54:16)
+    // #7      AnalysisDomainHandler.handleRequest (package:analysis_server/src/domain_analysis.dart:201:16)
+    // #8      AnalysisServer.handleRequest.<anonymous closure>.<anonymous closure> (package:analysis_server/src/analysis_server.dart:873:45)
+    // #9      _PerformanceTagImpl.makeCurrentWhile (package:analyzer/src/generated/utilities_general.dart:189:15)
+    // #10     AnalysisServer.handleRequest.<anonymous closure> (package:analysis_server/src/analysis_server.dart:869:50)
+    // #11     _rootRun (dart:async/zone.dart:1150)
+    // #12     _CustomZone.run (dart:async/zone.dart:1026)
+    // #13     _CustomZone.runGuarded (dart:async/zone.dart:924)
+    // #14     runZoned (dart:async/zone.dart:1501)
+    // #15     AnalysisServer.handleRequest (package:analysis_server/src/analysis_server.dart:868:5)
+    return super.test_getErrors();
+  }
 }
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_nonStandard_sdk.dart b/pkg/analysis_server/test/integration/analysis/get_errors_nonStandard_sdk.dart
index 9d34855..6c91c80 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_nonStandard_sdk.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_nonStandard_sdk.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.analysis.get.errors;
-
 import 'dart:async';
 import 'dart:io';
 
@@ -19,6 +17,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisDomainGetErrorsTest);
+    defineReflectiveTests(AnalysisDomainGetErrorsTest_Driver);
   });
 }
 
@@ -26,11 +25,8 @@
  * Tests that when an SDK path is specified on the command-line (via the `--sdk`
  * argument) that the specified SDK is used.
  */
-@reflectiveTest
-class AnalysisDomainGetErrorsTest
+class AbstractAnalysisDomainGetErrorsTest
     extends AbstractAnalysisServerIntegrationTest {
-  AnalysisDomainGetErrorsTest();
-
   String createNonStandardSdk() {
     MockSdkLibrary fakeLibrary =
         new MockSdkLibrary('dart:fake', '/lib/fake/fake.dart', '');
@@ -97,3 +93,13 @@
     expect(errors[0].code, 'unused_import');
   }
 }
+
+@reflectiveTest
+class AnalysisDomainGetErrorsTest extends AbstractAnalysisDomainGetErrorsTest {}
+
+@reflectiveTest
+class AnalysisDomainGetErrorsTest_Driver
+    extends AbstractAnalysisDomainGetErrorsTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
index 7c6a742..cf293bf 100644
--- a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.analysis.get.hover;
-
 import 'dart:async';
 
 import 'package:analysis_server/plugin/protocol/protocol.dart';
@@ -16,11 +14,11 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisGetHoverIntegrationTest);
+    defineReflectiveTests(AnalysisGetHoverIntegrationTest_Driver);
   });
 }
 
-@reflectiveTest
-class AnalysisGetHoverIntegrationTest
+class AbstractAnalysisGetHoverIntegrationTest
     extends AbstractAnalysisServerIntegrationTest {
   /**
    * Pathname of the file containing Dart code.
@@ -189,3 +187,14 @@
     });
   }
 }
+
+@reflectiveTest
+class AnalysisGetHoverIntegrationTest
+    extends AbstractAnalysisGetHoverIntegrationTest {}
+
+@reflectiveTest
+class AnalysisGetHoverIntegrationTest_Driver
+    extends AbstractAnalysisGetHoverIntegrationTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test.dart b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
index bc20497..ca6e425 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.analysis.highlights;
-
 import 'package:analysis_server/plugin/protocol/protocol.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -13,11 +11,12 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisHighlightsTest);
+    defineReflectiveTests(AnalysisHighlightsTest_Driver);
   });
 }
 
-@reflectiveTest
-class AnalysisHighlightsTest extends AbstractAnalysisServerIntegrationTest {
+class AbstractAnalysisHighlightsTest
+    extends AbstractAnalysisServerIntegrationTest {
   test_highlights() {
     String pathname = sourcePath('test.dart');
     String text = r'''
@@ -145,3 +144,12 @@
     });
   }
 }
+
+@reflectiveTest
+class AnalysisHighlightsTest extends AbstractAnalysisHighlightsTest {}
+
+@reflectiveTest
+class AnalysisHighlightsTest_Driver extends AbstractAnalysisHighlightsTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test2.dart b/pkg/analysis_server/test/integration/analysis/highlights_test2.dart
index b1a70c5..b05aa1f 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights_test2.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights_test2.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.analysis.highlights2;
-
 import 'dart:async';
 
 import 'package:analysis_server/plugin/protocol/protocol.dart';
@@ -15,11 +13,12 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisHighlightsTest);
+    defineReflectiveTests(AnalysisHighlightsTest_Driver);
   });
 }
 
-@reflectiveTest
-class AnalysisHighlightsTest extends AbstractAnalysisServerIntegrationTest {
+class AbstractAnalysisHighlightsTest
+    extends AbstractAnalysisServerIntegrationTest {
   Future startServer(
       {bool checked: true, int diagnosticPort, int servicesPort}) {
     return server.start(
@@ -160,3 +159,12 @@
     });
   }
 }
+
+@reflectiveTest
+class AnalysisHighlightsTest extends AbstractAnalysisHighlightsTest {}
+
+@reflectiveTest
+class AnalysisHighlightsTest_Driver extends AbstractAnalysisHighlightsTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analysis_server/test/integration/analysis/lint_test.dart b/pkg/analysis_server/test/integration/analysis/lint_test.dart
index b8d212e..0a41fbf 100644
--- a/pkg/analysis_server/test/integration/analysis/lint_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/lint_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.analysis.lint;
-
 import 'package:analysis_server/plugin/protocol/protocol.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:test/test.dart';
@@ -14,11 +12,12 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LintIntegrationTest);
+    defineReflectiveTests(LintIntegrationTest_Driver);
   });
 }
 
-@reflectiveTest
-class LintIntegrationTest extends AbstractAnalysisServerIntegrationTest {
+class AbstractLintIntegrationTest
+    extends AbstractAnalysisServerIntegrationTest {
   test_no_lints_when_not_specified() async {
     String source = sourcePath('test.dart');
     writeFile(
@@ -93,3 +92,12 @@
     expect(error.type, AnalysisErrorType.LINT);
   }
 }
+
+@reflectiveTest
+class LintIntegrationTest extends AbstractLintIntegrationTest {}
+
+@reflectiveTest
+class LintIntegrationTest_Driver extends AbstractLintIntegrationTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analysis_server/test/integration/analysis/navigation_test.dart b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
index d6ea41c..2dcb074 100644
--- a/pkg/analysis_server/test/integration/analysis/navigation_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.analysis.navigation;
-
 import 'package:analysis_server/plugin/protocol/protocol.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -13,11 +11,12 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNavigationTest);
+    defineReflectiveTests(AnalysisNavigationTest_Driver);
   });
 }
 
-@reflectiveTest
-class AnalysisNavigationTest extends AbstractAnalysisServerIntegrationTest {
+class AbstractAnalysisNavigationTest
+    extends AbstractAnalysisServerIntegrationTest {
   test_navigation() {
     String pathname1 = sourcePath('test1.dart');
     String text1 = r'''
@@ -135,3 +134,12 @@
     });
   }
 }
+
+@reflectiveTest
+class AnalysisNavigationTest extends AbstractAnalysisNavigationTest {}
+
+@reflectiveTest
+class AnalysisNavigationTest_Driver extends AbstractAnalysisNavigationTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
index 2234205..69bd7e6 100644
--- a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.analysis.occurrences;
-
 import 'package:analysis_server/plugin/protocol/protocol.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -12,12 +10,12 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(Test);
+    defineReflectiveTests(OccurrencesTest);
+    defineReflectiveTests(OccurrencesTest_Driver);
   });
 }
 
-@reflectiveTest
-class Test extends AbstractAnalysisServerIntegrationTest {
+class AbstractOccurrencesTest extends AbstractAnalysisServerIntegrationTest {
   test_occurrences() {
     String pathname = sourcePath('test.dart');
     String text = r'''
@@ -67,3 +65,18 @@
     });
   }
 }
+
+@reflectiveTest
+class OccurrencesTest extends AbstractOccurrencesTest {}
+
+@reflectiveTest
+class OccurrencesTest_Driver extends AbstractOccurrencesTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+
+  @failingTest
+  test_occurrences() {
+    //  NoSuchMethodError: The getter 'iterator' was called on null.
+    return super.test_occurrences();
+  }
+}
diff --git a/pkg/analysis_server/test/integration/analysis/outline_test.dart b/pkg/analysis_server/test/integration/analysis/outline_test.dart
index 23f2cbd..3e2e5a4 100644
--- a/pkg/analysis_server/test/integration/analysis/outline_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/outline_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.analysis.outline;
-
 import 'package:analysis_server/plugin/protocol/protocol.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -12,12 +10,12 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(Test);
+    defineReflectiveTests(OutlineTest);
+    defineReflectiveTests(OutlineTest_Driver);
   });
 }
 
-@reflectiveTest
-class Test extends AbstractAnalysisServerIntegrationTest {
+class AbstractOutlineTest extends AbstractAnalysisServerIntegrationTest {
   /**
    * Verify that the range of source text covered by the given outline objects
    * is connected (the end of each object in the list corresponds to the start
@@ -83,3 +81,18 @@
     });
   }
 }
+
+@reflectiveTest
+class OutlineTest extends AbstractOutlineTest {}
+
+@reflectiveTest
+class OutlineTest_Driver extends AbstractOutlineTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+
+  @failingTest
+  test_outline() {
+    //  NoSuchMethodError: The getter 'element' was called on null.
+    return super.test_outline();
+  }
+}
diff --git a/pkg/analysis_server/test/integration/analysis/overrides_test.dart b/pkg/analysis_server/test/integration/analysis/overrides_test.dart
index 74c179f..595d24d 100644
--- a/pkg/analysis_server/test/integration/analysis/overrides_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/overrides_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.analysis.overrides;
-
 import 'package:analysis_server/plugin/protocol/protocol.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -12,12 +10,12 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(Test);
+    defineReflectiveTests(OverridesTest);
+    defineReflectiveTests(OverridesTest_Driver);
   });
 }
 
-@reflectiveTest
-class Test extends AbstractAnalysisServerIntegrationTest {
+class AbstractOverridesTest extends AbstractAnalysisServerIntegrationTest {
   test_overrides() {
     String pathname = sourcePath('test.dart');
     String text = r'''
@@ -122,3 +120,12 @@
     });
   }
 }
+
+@reflectiveTest
+class OverridesTest extends AbstractOverridesTest {}
+
+@reflectiveTest
+class OverridesTest_Driver extends AbstractOverridesTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analysis_server/test/integration/analysis/package_root_test.dart b/pkg/analysis_server/test/integration/analysis/package_root_test.dart
index 5ad9c38..142d50b 100644
--- a/pkg/analysis_server/test/integration/analysis/package_root_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/package_root_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.analysis.packageRoot;
-
 import 'package:analysis_server/plugin/protocol/protocol.dart';
 import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
@@ -13,12 +11,13 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(Test);
+    defineReflectiveTests(SetAnalysisRootsTest);
+    defineReflectiveTests(SetAnalysisRootsTest_Driver);
   });
 }
 
-@reflectiveTest
-class Test extends AbstractAnalysisServerIntegrationTest {
+class AbstractSetAnalysisRootsTest
+    extends AbstractAnalysisServerIntegrationTest {
   test_package_root() {
     String projPath = sourcePath('project');
     String mainPath = path.join(projPath, 'main.dart');
@@ -77,3 +76,18 @@
     });
   }
 }
+
+@reflectiveTest
+class SetAnalysisRootsTest extends AbstractSetAnalysisRootsTest {}
+
+@reflectiveTest
+class SetAnalysisRootsTest_Driver extends AbstractSetAnalysisRootsTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+
+  @failingTest
+  test_package_root() {
+    //  NoSuchMethodError: The getter 'iterator' was called on null.
+    return super.test_package_root();
+  }
+}
diff --git a/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart b/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
index abf05cf..adc6984 100644
--- a/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
@@ -8,8 +8,6 @@
  *
  * See dartbug.com/21448.
  */
-library test.integration.analysis.reanalyze_concurrent;
-
 import 'dart:async';
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -18,12 +16,12 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(Test);
+    defineReflectiveTests(ReanalyzeTest);
+    defineReflectiveTests(ReanalyzeTest_Driver);
   });
 }
 
-@reflectiveTest
-class Test extends AbstractAnalysisServerIntegrationTest {
+class AbstractReanalyzeTest extends AbstractAnalysisServerIntegrationTest {
   test_reanalyze_concurrent() {
     String pathname = sourcePath('test.dart');
     String text = '''
@@ -49,3 +47,12 @@
     });
   }
 }
+
+@reflectiveTest
+class ReanalyzeTest extends AbstractReanalyzeTest {}
+
+@reflectiveTest
+class ReanalyzeTest_Driver extends AbstractReanalyzeTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart b/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
index ac5b889..fbd17ab 100644
--- a/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.analysis.reanalyze;
-
 import 'package:analysis_server/plugin/protocol/protocol.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -12,12 +10,12 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(Test);
+    defineReflectiveTests(ReanalyzeTest);
+    defineReflectiveTests(ReanalyzeTest_Driver);
   });
 }
 
-@reflectiveTest
-class Test extends AbstractAnalysisServerIntegrationTest {
+class AbstractReanalyzeTest extends AbstractAnalysisServerIntegrationTest {
   test_reanalyze() {
     String pathname = sourcePath('test.dart');
     String text = 'main() {}';
@@ -40,3 +38,12 @@
     });
   }
 }
+
+@reflectiveTest
+class ReanalyzeTest extends AbstractReanalyzeTest {}
+
+@reflectiveTest
+class ReanalyzeTest_Driver extends AbstractReanalyzeTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
index b235a39..5ca5c08 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.analysis.update.content.list;
-
 import 'package:analysis_server/plugin/protocol/protocol.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -12,12 +10,12 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(Test);
+    defineReflectiveTests(UpdateContentTest);
+    defineReflectiveTests(UpdateContentTest_Driver);
   });
 }
 
-@reflectiveTest
-class Test extends AbstractAnalysisServerIntegrationTest {
+class AbstractUpdateContentTest extends AbstractAnalysisServerIntegrationTest {
   test_updateContent_list() {
     String pathname = sourcePath('test.dart');
     String goodText = r'''
@@ -52,3 +50,12 @@
     });
   }
 }
+
+@reflectiveTest
+class UpdateContentTest extends AbstractUpdateContentTest {}
+
+@reflectiveTest
+class UpdateContentTest_Driver extends AbstractUpdateContentTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analysis_server/test/integration/analysis/update_content_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
index 1d275ce2..77338ef 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.analysis.update.content;
-
 import 'package:analysis_server/plugin/protocol/protocol.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -12,12 +10,12 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(Test);
+    defineReflectiveTests(UpdateContentTest);
+    defineReflectiveTests(UpdateContentTest_Driver);
   });
 }
 
-@reflectiveTest
-class Test extends AbstractAnalysisServerIntegrationTest {
+class AbstractUpdateContentTest extends AbstractAnalysisServerIntegrationTest {
   test_updateContent() {
     String pathname = sourcePath('test.dart');
     String goodText = r'''
@@ -68,3 +66,19 @@
         });
   }
 }
+
+@reflectiveTest
+class UpdateContentTest extends AbstractUpdateContentTest {}
+
+@reflectiveTest
+class UpdateContentTest_Driver extends AbstractUpdateContentTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+
+  @failingTest
+  test_updateContent() {
+    //  Expected: non-empty
+    //    Actual: []
+    return super.test_updateContent();
+  }
+}
diff --git a/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart b/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
index 653711f..34b455b 100644
--- a/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
+++ b/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.completion.get.suggestions;
-
 import 'package:analysis_server/plugin/protocol/protocol.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -12,12 +10,12 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(Test);
+    defineReflectiveTests(GetSuggestionsTest);
+    defineReflectiveTests(GetSuggestionsTest_Driver);
   });
 }
 
-@reflectiveTest
-class Test extends AbstractAnalysisServerIntegrationTest {
+class AbstractGetSuggestionsTest extends AbstractAnalysisServerIntegrationTest {
   String path;
   String content;
   int completionOffset;
@@ -123,3 +121,26 @@
     });
   }
 }
+
+@reflectiveTest
+class GetSuggestionsTest extends AbstractGetSuggestionsTest {}
+
+@reflectiveTest
+class GetSuggestionsTest_Driver extends AbstractGetSuggestionsTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+
+  @failingTest
+  test_getSuggestions_onlyOverlay() async {
+    // TimeoutException after 0:00:30.000000: Test timed out after 30 seconds.
+    //return super.test_getSuggestions_onlyOverlay();
+    fail('Test timed out');
+  }
+
+  @failingTest
+  test_getSuggestions_sourceMissing_noWait() {
+    //  Expected: same instance as 'exception from server'
+    //    Actual: CompletionGetSuggestionsResult:<{"id":"0"}>
+    return super.test_getSuggestions_sourceMissing_noWait();
+  }
+}
diff --git a/pkg/analysis_server/test/integration/integration_tests.dart b/pkg/analysis_server/test/integration/integration_tests.dart
index 71b5378..b278c96 100644
--- a/pkg/analysis_server/test/integration/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/integration_tests.dart
@@ -154,6 +154,11 @@
   }
 
   /**
+   * Return `true` if the new analysis driver should be used by these tests.
+   */
+  bool get enableNewAnalysisDriver => false;
+
+  /**
    * Print out any messages exchanged with the server.  If some messages have
    * already been exchanged with the server, they are printed out immediately.
    */
@@ -242,6 +247,7 @@
       server.start(
           checked: checked,
           diagnosticPort: diagnosticPort,
+          enableNewAnalysisDriver: enableNewAnalysisDriver,
           servicesPort: servicesPort);
 
   /**
@@ -636,6 +642,7 @@
       {bool checked: true,
       bool debugServer: false,
       int diagnosticPort,
+      bool enableNewAnalysisDriver: false,
       bool profileServer: false,
       String sdkPath,
       int servicesPort,
@@ -691,6 +698,9 @@
     if (useAnalysisHighlight2) {
       arguments.add('--useAnalysisHighlight2');
     }
+    if (enableNewAnalysisDriver) {
+      arguments.add('--enable-new-analysis-driver');
+    }
 //    print('Launching $serverPath');
 //    print('$dartBinary ${arguments.join(' ')}');
     return Process.start(dartBinary, arguments).then((Process process) {
diff --git a/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart b/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
index bcfa73e..2e1e778 100644
--- a/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.search.domain;
-
 import 'dart:async';
 
 import 'package:analysis_server/plugin/protocol/protocol.dart';
@@ -14,57 +12,13 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(Test);
+    defineReflectiveTests(GetTypeHierarchyTest);
+    defineReflectiveTests(GetTypeHierarchyTest_Driver);
   });
 }
 
-/**
- * Results of a getTypeHierarchy request, processed for easier testing.
- */
-class HierarchyResults {
-  /**
-   * The list of hierarchy items from the result.
-   */
-  List<TypeHierarchyItem> items;
-
-  /**
-   * The first hierarchy item from the result, which represents the pivot
-   * class.
-   */
-  TypeHierarchyItem pivot;
-
-  /**
-   * A map from element name to item index.
-   */
-  Map<String, int> nameToIndex;
-
-  /**
-   * Create a [HierarchyResults] object based on the result from a
-   * getTypeHierarchy request.
-   */
-  HierarchyResults(this.items) {
-    pivot = items[0];
-    nameToIndex = <String, int>{};
-    for (int i = 0; i < items.length; i++) {
-      nameToIndex[items[i].classElement.name] = i;
-    }
-  }
-
-  /**
-   * Get an item by class name.
-   */
-  TypeHierarchyItem getItem(String name) {
-    if (nameToIndex.containsKey(name)) {
-      return items[nameToIndex[name]];
-    } else {
-      fail('Class $name not found in hierarchy results');
-      return null;
-    }
-  }
-}
-
-@reflectiveTest
-class Test extends AbstractAnalysisServerIntegrationTest {
+class AbstractGetTypeHierarchyTest
+    extends AbstractAnalysisServerIntegrationTest {
   /**
    * Pathname of the main file to run tests in.
    */
@@ -274,3 +228,57 @@
     }
   }
 }
+
+@reflectiveTest
+class GetTypeHierarchyTest extends AbstractGetTypeHierarchyTest {}
+
+@reflectiveTest
+class GetTypeHierarchyTest_Driver extends AbstractGetTypeHierarchyTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
+
+/**
+ * Results of a getTypeHierarchy request, processed for easier testing.
+ */
+class HierarchyResults {
+  /**
+   * The list of hierarchy items from the result.
+   */
+  List<TypeHierarchyItem> items;
+
+  /**
+   * The first hierarchy item from the result, which represents the pivot
+   * class.
+   */
+  TypeHierarchyItem pivot;
+
+  /**
+   * A map from element name to item index.
+   */
+  Map<String, int> nameToIndex;
+
+  /**
+   * Create a [HierarchyResults] object based on the result from a
+   * getTypeHierarchy request.
+   */
+  HierarchyResults(this.items) {
+    pivot = items[0];
+    nameToIndex = <String, int>{};
+    for (int i = 0; i < items.length; i++) {
+      nameToIndex[items[i].classElement.name] = i;
+    }
+  }
+
+  /**
+   * Get an item by class name.
+   */
+  TypeHierarchyItem getItem(String name) {
+    if (nameToIndex.containsKey(name)) {
+      return items[nameToIndex[name]];
+    } else {
+      fail('Class $name not found in hierarchy results');
+      return null;
+    }
+  }
+}
diff --git a/pkg/analysis_server/test/integration/server/get_version_test.dart b/pkg/analysis_server/test/integration/server/get_version_test.dart
index 223957b..4da351c 100644
--- a/pkg/analysis_server/test/integration/server/get_version_test.dart
+++ b/pkg/analysis_server/test/integration/server/get_version_test.dart
@@ -2,21 +2,28 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.server.get.version;
-
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../integration_tests.dart';
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(Test);
+    defineReflectiveTests(GetVersionTest);
+    defineReflectiveTests(GetVersionTest_Driver);
   });
 }
 
-@reflectiveTest
-class Test extends AbstractAnalysisServerIntegrationTest {
+class AbstractGetVersionTest extends AbstractAnalysisServerIntegrationTest {
   test_getVersion() {
     return sendServerGetVersion();
   }
 }
+
+@reflectiveTest
+class GetVersionTest extends AbstractGetVersionTest {}
+
+@reflectiveTest
+class GetVersionTest_Driver extends AbstractGetVersionTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart b/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart
index 2460ad9..d2a996d 100644
--- a/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart
+++ b/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.server.set.subscriptions.invalid.service;
-
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -11,12 +9,13 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(Test);
+    defineReflectiveTests(SetSubscriptionsTest);
+    defineReflectiveTests(SetSubscriptionsTest_Driver);
   });
 }
 
-@reflectiveTest
-class Test extends AbstractAnalysisServerIntegrationTest {
+class AbstractSetSubscriptionsTest
+    extends AbstractAnalysisServerIntegrationTest {
   test_setSubscriptions_invalidService() {
     // TODO(paulberry): verify that if an invalid service is specified, the
     // current subscriptions are unchanged.
@@ -29,3 +28,12 @@
     });
   }
 }
+
+@reflectiveTest
+class SetSubscriptionsTest extends AbstractSetSubscriptionsTest {}
+
+@reflectiveTest
+class SetSubscriptionsTest_Driver extends AbstractSetSubscriptionsTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart b/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart
index b88618c..3316ddf 100644
--- a/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.server.set.subscriptions;
-
 import 'dart:async';
 
 import 'package:analysis_server/plugin/protocol/protocol.dart';
@@ -14,12 +12,13 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(Test);
+    defineReflectiveTests(SetSubscriptionsTest);
+    defineReflectiveTests(SetSubscriptionsTest_Driver);
   });
 }
 
-@reflectiveTest
-class Test extends AbstractAnalysisServerIntegrationTest {
+class AbstractSetSubscriptionsTest
+    extends AbstractAnalysisServerIntegrationTest {
   test_setSubscriptions() {
     bool statusReceived = false;
     Completer analysisBegun = new Completer();
@@ -60,3 +59,12 @@
     });
   }
 }
+
+@reflectiveTest
+class SetSubscriptionsTest extends AbstractSetSubscriptionsTest {}
+
+@reflectiveTest
+class SetSubscriptionsTest_Driver extends AbstractSetSubscriptionsTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analysis_server/test/integration/server/shutdown_test.dart b/pkg/analysis_server/test/integration/server/shutdown_test.dart
index c919d4e..53a01a9 100644
--- a/pkg/analysis_server/test/integration/server/shutdown_test.dart
+++ b/pkg/analysis_server/test/integration/server/shutdown_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.server.shutdown;
-
 import 'dart:async';
 
 import 'package:test/test.dart';
@@ -13,12 +11,12 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(Test);
+    defineReflectiveTests(ShutdownTest);
+    defineReflectiveTests(ShutdownTest_Driver);
   });
 }
 
-@reflectiveTest
-class Test extends AbstractAnalysisServerIntegrationTest {
+class AbstractShutdownTest extends AbstractAnalysisServerIntegrationTest {
   test_shutdown() {
     return sendServerShutdown().then((_) {
       return new Future.delayed(new Duration(seconds: 1)).then((_) {
@@ -31,3 +29,12 @@
     });
   }
 }
+
+@reflectiveTest
+class ShutdownTest extends AbstractShutdownTest {}
+
+@reflectiveTest
+class ShutdownTest_Driver extends AbstractShutdownTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analysis_server/test/integration/server/status_test.dart b/pkg/analysis_server/test/integration/server/status_test.dart
index 9222934..6f33a10 100644
--- a/pkg/analysis_server/test/integration/server/status_test.dart
+++ b/pkg/analysis_server/test/integration/server/status_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library test.integration.server.status;
-
 import 'dart:async';
 
 import 'package:analysis_server/plugin/protocol/protocol.dart';
@@ -14,12 +12,12 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(Test);
+    defineReflectiveTests(StatusTest);
+    defineReflectiveTests(StatusTest_Driver);
   });
 }
 
-@reflectiveTest
-class Test extends AbstractAnalysisServerIntegrationTest {
+class AbstractStatusTest extends AbstractAnalysisServerIntegrationTest {
   test_status() {
     // After we kick off analysis, we should get one server.status message with
     // analyzing=true, and another server.status message after that with
@@ -52,3 +50,12 @@
     });
   }
 }
+
+@reflectiveTest
+class StatusTest extends AbstractStatusTest {}
+
+@reflectiveTest
+class StatusTest_Driver extends AbstractStatusTest {
+  @override
+  bool get enableNewAnalysisDriver => true;
+}
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 67e691a..d212a5f 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
@@ -11,6 +11,7 @@
 import 'package:analysis_server/src/services/completion/completion_performance.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/imported_reference_contributor.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/task/dart.dart';
 import 'package:test/test.dart';
@@ -76,7 +77,8 @@
     var directives = request.target.unit.directives;
 
     // Assert that the import does not have an export namespace
-    expect(directives[0].element?.library?.exportNamespace, isNull);
+    Element element = resolutionMap.elementDeclaredByDirective(directives[0]);
+    expect(element?.library?.exportNamespace, isNull);
 
     // Resolve directives
     var importCompleter = new Completer<List<ImportElement>>();
diff --git a/pkg/analysis_server/test/services/correction/assist_test.dart b/pkg/analysis_server/test/services/correction/assist_test.dart
index a2abeee..13d40c2 100644
--- a/pkg/analysis_server/test/services/correction/assist_test.dart
+++ b/pkg/analysis_server/test/services/correction/assist_test.dart
@@ -10,6 +10,7 @@
 import 'package:analysis_server/plugin/protocol/protocol.dart';
 import 'package:analysis_server/src/plugin/server_plugin.dart';
 import 'package:analysis_server/src/services/correction/assist.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:plugin/manager.dart';
@@ -65,7 +66,11 @@
    */
   assertNoAssist(AssistKind kind) async {
     List<Assist> assists = await computeAssists(
-        plugin, context, testUnit.element.source, offset, length);
+        plugin,
+        context,
+        resolutionMap.elementDeclaredByCompilationUnit(testUnit).source,
+        offset,
+        length);
     for (Assist assist in assists) {
       if (assist.kind == kind) {
         throw fail('Unexpected assist $kind in\n${assists.join('\n')}');
@@ -2683,8 +2688,8 @@
 
   test_invalidSelection() async {
     resolveTestUnit('');
-    List<Assist> assists =
-        await computeAssists(plugin, context, testUnit.element.source, -1, 0);
+    List<Assist> assists = await computeAssists(plugin, context,
+        resolutionMap.elementDeclaredByCompilationUnit(testUnit).source, -1, 0);
     expect(assists, isEmpty);
   }
 
@@ -4158,7 +4163,11 @@
    */
   Future<Assist> _assertHasAssist(AssistKind kind) async {
     List<Assist> assists = await computeAssists(
-        plugin, context, testUnit.element.source, offset, length);
+        plugin,
+        context,
+        resolutionMap.elementDeclaredByCompilationUnit(testUnit).source,
+        offset,
+        length);
     for (Assist assist in assists) {
       if (assist.kind == kind) {
         return assist;
diff --git a/pkg/analysis_server/test/services/correction/fix_test.dart b/pkg/analysis_server/test/services/correction/fix_test.dart
index 1aa9b1c..26f4178 100644
--- a/pkg/analysis_server/test/services/correction/fix_test.dart
+++ b/pkg/analysis_server/test/services/correction/fix_test.dart
@@ -11,6 +11,7 @@
     hide AnalysisError;
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analysis_server/src/services/correction/fix_internal.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/source/package_map_resolver.dart';
@@ -5301,7 +5302,10 @@
   void findLint(String src, String lintCode, {int length: 1}) {
     int errorOffset = src.indexOf('/*LINT*/');
     resolveTestUnit(src.replaceAll('/*LINT*/', ''));
-    error = new AnalysisError(testUnit.element.source, errorOffset, length,
+    error = new AnalysisError(
+        resolutionMap.elementDeclaredByCompilationUnit(testUnit).source,
+        errorOffset,
+        length,
         new LintCode(lintCode, '<ignored>'));
   }
 
diff --git a/pkg/analysis_server/test/services/linter/linter_test.dart b/pkg/analysis_server/test/services/linter/linter_test.dart
index 5ac13392..f0dd92d 100644
--- a/pkg/analysis_server/test/services/linter/linter_test.dart
+++ b/pkg/analysis_server/test/services/linter/linter_test.dart
@@ -4,11 +4,12 @@
 
 library test.services.linter;
 
-import 'package:analysis_server/src/services/linter/linter.dart';
 import 'package:analyzer/analyzer.dart';
 import 'package:analyzer/source/analysis_options_provider.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/lint/options_rule_validator.dart';
+import 'package:linter/src/rules.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -29,6 +30,7 @@
   List<AnalysisError> get errors => recorder.errors;
 
   setUp() {
+    registerLintRules();
     recorder = new RecordingErrorListener();
     reporter = new ErrorReporter(recorder, new _TestSource());
   }
diff --git a/pkg/analysis_server/test/services/search/hierarchy_test.dart b/pkg/analysis_server/test/services/search/hierarchy_test.dart
index 618b868..136d12e 100644
--- a/pkg/analysis_server/test/services/search/hierarchy_test.dart
+++ b/pkg/analysis_server/test/services/search/hierarchy_test.dart
@@ -289,36 +289,6 @@
     }
   }
 
-  Future test_getSubClasses() {
-    _indexTestUnit('''
-class A {}
-class B extends A {}
-class C extends B {}
-class D extends B implements A {}
-class M {}
-class E extends A with M {}
-''');
-    ClassElement classA = findElement("A");
-    ClassElement classB = findElement("B");
-    ClassElement classC = findElement("C");
-    ClassElement classD = findElement("D");
-    ClassElement classM = findElement("M");
-    ClassElement classE = findElement("E");
-    var futureA = getSubClasses(searchEngine, classA).then((subs) {
-      expect(subs, unorderedEquals([classB, classC, classD, classE]));
-    });
-    var futureB = getSubClasses(searchEngine, classB).then((subs) {
-      expect(subs, unorderedEquals([classC, classD]));
-    });
-    var futureC = getSubClasses(searchEngine, classC).then((subs) {
-      expect(subs, isEmpty);
-    });
-    var futureM = getSubClasses(searchEngine, classM).then((subs) {
-      expect(subs, unorderedEquals([classE]));
-    });
-    return Future.wait([futureA, futureB, futureC, futureM]);
-  }
-
   void test_getSuperClasses() {
     _indexTestUnit('''
 class A {}
diff --git a/pkg/analysis_server/test/services/search/search_engine2_test.dart b/pkg/analysis_server/test/services/search/search_engine2_test.dart
new file mode 100644
index 0000000..13a3c2e
--- /dev/null
+++ b/pkg/analysis_server/test/services/search/search_engine2_test.dart
@@ -0,0 +1,154 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analysis_server/src/services/search/search_engine.dart';
+import 'package:analysis_server/src/services/search/search_engine_internal2.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/src/dart/analysis/byte_store.dart';
+import 'package:analyzer/src/dart/analysis/driver.dart';
+import 'package:analyzer/src/dart/analysis/file_state.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../mock_sdk.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(SearchEngineImpl2Test);
+  });
+}
+
+@reflectiveTest
+class SearchEngineImpl2Test {
+  static final MockSdk sdk = new MockSdk();
+
+  final MemoryResourceProvider provider = new MemoryResourceProvider();
+  final ByteStore byteStore = new MemoryByteStore();
+  final FileContentOverlay contentOverlay = new FileContentOverlay();
+
+  final StringBuffer logBuffer = new StringBuffer();
+  PerformanceLog logger;
+
+  AnalysisDriverScheduler scheduler;
+
+  void setUp() {
+    logger = new PerformanceLog(logBuffer);
+    scheduler = new AnalysisDriverScheduler(logger);
+    scheduler.start();
+  }
+
+  test_searchAllSubtypes() async {
+    var p = _p('/test.dart');
+
+    provider.newFile(
+        p,
+        '''
+class T {}
+class A extends T {}
+class B extends A {}
+class C implements B {}
+''');
+
+    var driver = _newDriver();
+    driver.addFile(p);
+
+    var resultA = await driver.getResult(p);
+    ClassElement element = resultA.unit.element.types[0];
+
+    var searchEngine = new SearchEngineImpl2([driver]);
+    Set<ClassElement> subtypes = await searchEngine.searchAllSubtypes(element);
+    expect(subtypes, hasLength(3));
+    expect(subtypes, contains(predicate((ClassElement e) => e.name == 'A')));
+    expect(subtypes, contains(predicate((ClassElement e) => e.name == 'B')));
+    expect(subtypes, contains(predicate((ClassElement e) => e.name == 'C')));
+  }
+
+  test_searchAllSubtypes_acrossDrivers() async {
+    var a = _p('/test/a.dart');
+    var b = _p('/test/b.dart');
+
+    provider.newFile(
+        a,
+        '''
+class T {}
+class A extends T {}
+''');
+    provider.newFile(
+        b,
+        '''
+import 'a.dart';
+class B extends A {}
+class C extends B {}
+''');
+
+    var driver1 = _newDriver();
+    var driver2 = _newDriver();
+
+    driver1.addFile(a);
+    driver2.addFile(b);
+
+    var resultA = await driver1.getResult(a);
+    ClassElement element = resultA.unit.element.types[0];
+
+    var searchEngine = new SearchEngineImpl2([driver1, driver2]);
+    Set<ClassElement> subtypes = await searchEngine.searchAllSubtypes(element);
+    expect(subtypes, hasLength(3));
+    expect(subtypes, contains(predicate((ClassElement e) => e.name == 'A')));
+    expect(subtypes, contains(predicate((ClassElement e) => e.name == 'B')));
+    expect(subtypes, contains(predicate((ClassElement e) => e.name == 'C')));
+  }
+
+  test_searchReferences() async {
+    var a = _p('/test/a.dart');
+    var b = _p('/test/b.dart');
+
+    provider.newFile(
+        a,
+        '''
+class T {}
+T a;
+''');
+    provider.newFile(
+        b,
+        '''
+import 'a.dart';
+T b;
+''');
+
+    var driver1 = _newDriver();
+    var driver2 = _newDriver();
+
+    driver1.addFile(a);
+    driver2.addFile(b);
+
+    var resultA = await driver1.getResult(a);
+    ClassElement element = resultA.unit.element.types[0];
+
+    var searchEngine = new SearchEngineImpl2([driver1, driver2]);
+    List<SearchMatch> matches = await searchEngine.searchReferences(element);
+    expect(matches, hasLength(2));
+    expect(
+        matches, contains(predicate((SearchMatch m) => m.element.name == 'a')));
+    expect(
+        matches, contains(predicate((SearchMatch m) => m.element.name == 'b')));
+  }
+
+  AnalysisDriver _newDriver() => new AnalysisDriver(
+      scheduler,
+      logger,
+      provider,
+      byteStore,
+      contentOverlay,
+      new SourceFactory(
+          [new DartUriResolver(sdk), new ResourceUriResolver(provider)],
+          null,
+          provider),
+      new AnalysisOptionsImpl()..strongMode = true);
+
+  String _p(String path) => provider.convertPath(path);
+}
diff --git a/pkg/analysis_server/test/services/search/search_engine_test.dart b/pkg/analysis_server/test/services/search/search_engine_test.dart
index 8072301..24c0a9f 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -82,16 +82,11 @@
 class C implements B {}
 ''');
     ClassElement element = findElement('T');
-    ClassElement elementA = findElement('A');
-    ClassElement elementB = findElement('B');
-    ClassElement elementC = findElement('C');
-    var expected = [
-      _expectId(elementA, MatchKind.DECLARATION, 'A extends T'),
-      _expectId(elementB, MatchKind.DECLARATION, 'B extends A'),
-      _expectId(elementC, MatchKind.DECLARATION, 'C implements B')
-    ];
-    List<SearchMatch> matches = await searchEngine.searchAllSubtypes(element);
-    _assertMatches(matches, expected);
+    Set<ClassElement> subtypes = await searchEngine.searchAllSubtypes(element);
+    expect(subtypes, hasLength(3));
+    expect(subtypes, contains(predicate((ClassElement e) => e.name == 'A')));
+    expect(subtypes, contains(predicate((ClassElement e) => e.name == 'B')));
+    expect(subtypes, contains(predicate((ClassElement e) => e.name == 'C')));
   }
 
   test_searchMemberDeclarations() async {
diff --git a/pkg/analysis_server/test/services/search/test_all.dart b/pkg/analysis_server/test/services/search/test_all.dart
index 39251a5..c12c736 100644
--- a/pkg/analysis_server/test/services/search/test_all.dart
+++ b/pkg/analysis_server/test/services/search/test_all.dart
@@ -7,6 +7,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'hierarchy_test.dart' as hierarchy_test;
+import 'search_engine2_test.dart' as search_engine2_test;
 import 'search_engine_test.dart' as search_engine_test;
 
 /**
@@ -15,6 +16,7 @@
 main() {
   defineReflectiveSuite(() {
     hierarchy_test.main();
+    search_engine2_test.main();
     search_engine_test.main();
   }, name: 'search');
 }
diff --git a/pkg/analysis_server/test/single_context_manager_test.dart b/pkg/analysis_server/test/single_context_manager_test.dart
index eafa488..3e5bdb2 100644
--- a/pkg/analysis_server/test/single_context_manager_test.dart
+++ b/pkg/analysis_server/test/single_context_manager_test.dart
@@ -7,13 +7,14 @@
 import 'dart:core';
 
 import 'package:analysis_server/src/single_context_manager.dart';
+import 'package:analysis_server/src/utilities/null_string_sink.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/source_io.dart';
 import 'package:analyzer/src/util/glob.dart';
-import 'package:linter/src/plugin/linter_plugin.dart';
 import 'package:path/path.dart' as path;
 import 'package:plugin/manager.dart';
 import 'package:plugin/plugin.dart';
@@ -66,7 +67,10 @@
     DartSdkManager sdkManager = new DartSdkManager('', false);
     manager = new SingleContextManager(resourceProvider, sdkManager,
         (_) => packageResolver, analysisFilesGlobs, new AnalysisOptionsImpl());
-    callbacks = new TestContextManagerCallbacks(resourceProvider);
+    PerformanceLog logger = new PerformanceLog(new NullStringSink());
+    AnalysisDriverScheduler scheduler = new AnalysisDriverScheduler(logger);
+    callbacks =
+        new TestContextManagerCallbacks(resourceProvider, logger, scheduler);
     manager.callbacks = callbacks;
   }
 
@@ -532,9 +536,6 @@
   void _processRequiredPlugins() {
     List<Plugin> plugins = <Plugin>[];
     plugins.addAll(AnalysisEngine.instance.requiredPlugins);
-    plugins.add(AnalysisEngine.instance.commandLinePlugin);
-    plugins.add(AnalysisEngine.instance.optionsPlugin);
-    plugins.add(linterPlugin);
     ExtensionManager manager = new ExtensionManager();
     manager.processPlugins(plugins);
   }
diff --git a/pkg/analysis_server/test/src/utilities/change_builder_dart_test.dart b/pkg/analysis_server/test/src/utilities/change_builder_dart_test.dart
index a221d9b..2849493 100644
--- a/pkg/analysis_server/test/src/utilities/change_builder_dart_test.dart
+++ b/pkg/analysis_server/test/src/utilities/change_builder_dart_test.dart
@@ -9,6 +9,7 @@
 import 'package:analysis_server/src/provisional/edit/utilities/change_builder_dart.dart';
 import 'package:analysis_server/src/utilities/change_builder_dart.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:test/test.dart';
@@ -62,8 +63,9 @@
     DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context);
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
       builder.addInsertion(0, (EditBuilder builder) {
-        (builder as DartEditBuilder)
-            .writeClassDeclaration('C', interfaces: [declaration.element.type]);
+        (builder as DartEditBuilder).writeClassDeclaration('C', interfaces: [
+          resolutionMap.elementDeclaredByClassDeclaration(declaration).type
+        ]);
       });
     });
     SourceEdit edit = getEdit(builder);
@@ -111,8 +113,9 @@
     DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context);
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
       builder.addInsertion(0, (EditBuilder builder) {
-        (builder as DartEditBuilder)
-            .writeClassDeclaration('C', mixins: [classA.element.type]);
+        (builder as DartEditBuilder).writeClassDeclaration('C', mixins: [
+          resolutionMap.elementDeclaredByClassDeclaration(classA).type
+        ]);
       });
     });
     SourceEdit edit = getEdit(builder);
@@ -130,7 +133,11 @@
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
       builder.addInsertion(0, (EditBuilder builder) {
         (builder as DartEditBuilder).writeClassDeclaration('C',
-            mixins: [classB.element.type], superclass: classA.element.type);
+            mixins: [
+              resolutionMap.elementDeclaredByClassDeclaration(classB).type
+            ],
+            superclass:
+                resolutionMap.elementDeclaredByClassDeclaration(classA).type);
       });
     });
     SourceEdit edit = getEdit(builder);
@@ -168,8 +175,10 @@
     DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context);
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
       builder.addInsertion(0, (EditBuilder builder) {
-        (builder as DartEditBuilder)
-            .writeClassDeclaration('C', superclass: declaration.element.type);
+        (builder as DartEditBuilder).writeClassDeclaration('C',
+            superclass: resolutionMap
+                .elementDeclaredByClassDeclaration(declaration)
+                .type);
       });
     });
     SourceEdit edit = getEdit(builder);
@@ -290,7 +299,10 @@
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
       builder.addInsertion(content.length - 1, (EditBuilder builder) {
         (builder as DartEditBuilder).writeFieldDeclaration('f',
-            type: declaration.element.type, typeGroupName: 'type');
+            type: resolutionMap
+                .elementDeclaredByClassDeclaration(declaration)
+                .type,
+            typeGroupName: 'type');
       });
     });
     SourceEdit edit = getEdit(builder);
@@ -375,7 +387,9 @@
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
       builder.addInsertion(content.length - 1, (EditBuilder builder) {
         (builder as DartEditBuilder).writeGetterDeclaration('g',
-            returnType: classA.element.type, returnTypeGroupName: 'returnType');
+            returnType:
+                resolutionMap.elementDeclaredByClassDeclaration(classA).type,
+            returnTypeGroupName: 'returnType');
       });
     });
     SourceEdit edit = getEdit(builder);
@@ -405,8 +419,10 @@
     DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context);
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
       builder.addInsertion(content.length - 1, (EditBuilder builder) {
-        (builder as DartEditBuilder)
-            .writeOverrideOfInheritedMember(declaration.element.methods[0]);
+        (builder as DartEditBuilder).writeOverrideOfInheritedMember(
+            resolutionMap
+                .elementDeclaredByClassDeclaration(declaration)
+                .methods[0]);
       });
     });
     SourceEdit edit = getEdit(builder);
@@ -425,7 +441,7 @@
     FunctionDeclaration f = unit.declarations[0];
     FormalParameterList parameters = f.functionExpression.parameters;
     Iterable<ParameterElement> elements = parameters.parameters
-        .map((FormalParameter parameter) => parameter.element);
+        .map(resolutionMap.elementDeclaredByFormalParameter);
 
     DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context);
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
@@ -444,7 +460,7 @@
     FunctionDeclaration f = unit.declarations[0];
     FormalParameterList parameters = f.functionExpression.parameters;
     Iterable<ParameterElement> elements = parameters.parameters
-        .map((FormalParameter parameter) => parameter.element);
+        .map(resolutionMap.elementDeclaredByFormalParameter);
 
     DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context);
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
@@ -463,7 +479,7 @@
     FunctionDeclaration f = unit.declarations[0];
     FormalParameterList parameters = f.functionExpression.parameters;
     Iterable<ParameterElement> elements = parameters.parameters
-        .map((FormalParameter parameter) => parameter.element);
+        .map(resolutionMap.elementDeclaredByFormalParameter);
 
     DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context);
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
@@ -531,8 +547,8 @@
     DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context);
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
       builder.addInsertion(content.length - 1, (EditBuilder builder) {
-        (builder as DartEditBuilder)
-            .writeParameterSource(classA.element.type, 'a');
+        (builder as DartEditBuilder).writeParameterSource(
+            resolutionMap.elementDeclaredByClassDeclaration(classA).type, 'a');
       });
     });
     SourceEdit edit = getEdit(builder);
@@ -547,8 +563,11 @@
     DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context);
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
       builder.addInsertion(content.length - 1, (EditBuilder builder) {
-        (builder as DartEditBuilder)
-            .writeType(unit.element.context.typeProvider.dynamicType);
+        (builder as DartEditBuilder).writeType(resolutionMap
+            .elementDeclaredByCompilationUnit(unit)
+            .context
+            .typeProvider
+            .dynamicType);
       });
     });
     SourceEdit edit = getEdit(builder);
@@ -565,8 +584,12 @@
     DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context);
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
       builder.addInsertion(content.length - 1, (EditBuilder builder) {
-        (builder as DartEditBuilder)
-            .writeType(classB.element.type.instantiate([classA.element.type]));
+        (builder as DartEditBuilder).writeType(resolutionMap
+            .elementDeclaredByClassDeclaration(classB)
+            .type
+            .instantiate([
+          resolutionMap.elementDeclaredByClassDeclaration(classA).type
+        ]));
       });
     });
     SourceEdit edit = getEdit(builder);
@@ -582,8 +605,9 @@
     DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context);
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
       builder.addInsertion(content.length - 1, (EditBuilder builder) {
-        (builder as DartEditBuilder)
-            .writeType(classC.element.type, groupName: 'type');
+        (builder as DartEditBuilder).writeType(
+            resolutionMap.elementDeclaredByClassDeclaration(classC).type,
+            groupName: 'type');
       });
     });
     SourceEdit edit = getEdit(builder);
@@ -605,8 +629,10 @@
     DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context);
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
       builder.addInsertion(content.length - 1, (EditBuilder builder) {
-        (builder as DartEditBuilder).writeType(classC.element.type,
-            addSupertypeProposals: true, groupName: 'type');
+        (builder as DartEditBuilder).writeType(
+            resolutionMap.elementDeclaredByClassDeclaration(classC).type,
+            addSupertypeProposals: true,
+            groupName: 'type');
       });
     });
     SourceEdit edit = getEdit(builder);
@@ -653,7 +679,11 @@
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
       builder.addInsertion(content.length - 1, (EditBuilder builder) {
         (builder as DartEditBuilder).writeType(
-            unit.element.context.typeProvider.dynamicType,
+            resolutionMap
+                .elementDeclaredByCompilationUnit(unit)
+                .context
+                .typeProvider
+                .dynamicType,
             required: true);
       });
     });
@@ -670,8 +700,9 @@
     DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context);
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
       builder.addInsertion(content.length - 1, (EditBuilder builder) {
-        (builder as DartEditBuilder)
-            .writeType(classA.element.type, required: true);
+        (builder as DartEditBuilder).writeType(
+            resolutionMap.elementDeclaredByClassDeclaration(classA).type,
+            required: true);
       });
     });
     SourceEdit edit = getEdit(builder);
@@ -702,7 +733,8 @@
     DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context);
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
       builder.addInsertion(content.length - 1, (EditBuilder builder) {
-        (builder as DartEditBuilder).writeType(classA.element.type);
+        (builder as DartEditBuilder).writeType(
+            resolutionMap.elementDeclaredByClassDeclaration(classA).type);
       });
     });
     SourceEdit edit = getEdit(builder);
@@ -734,8 +766,10 @@
     DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context);
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
       builder.addInsertion(content.length - 1, (EditBuilder builder) {
-        (builder as DartEditBuilderImpl)
-            .writeTypes([classA.element.type, classB.element.type]);
+        (builder as DartEditBuilderImpl).writeTypes([
+          resolutionMap.elementDeclaredByClassDeclaration(classA).type,
+          resolutionMap.elementDeclaredByClassDeclaration(classB).type
+        ]);
       });
     });
     SourceEdit edit = getEdit(builder);
@@ -767,9 +801,10 @@
     DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context);
     builder.addFileEdit(source, 1, (FileEditBuilder builder) {
       builder.addInsertion(content.length - 1, (EditBuilder builder) {
-        (builder as DartEditBuilderImpl).writeTypes(
-            [classA.element.type, classB.element.type],
-            prefix: 'implements ');
+        (builder as DartEditBuilderImpl).writeTypes([
+          resolutionMap.elementDeclaredByClassDeclaration(classA).type,
+          resolutionMap.elementDeclaredByClassDeclaration(classB).type
+        ], prefix: 'implements ');
       });
     });
     SourceEdit edit = getEdit(builder);
diff --git a/pkg/analyzer/benchmark/errors_in_all_libraries.dart b/pkg/analyzer/benchmark/errors_in_all_libraries.dart
index ad004bf..d46edba 100644
--- a/pkg/analyzer/benchmark/errors_in_all_libraries.dart
+++ b/pkg/analyzer/benchmark/errors_in_all_libraries.dart
@@ -9,6 +9,7 @@
 /// it easier to connect to this with observatory.
 import 'dart:io';
 
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
@@ -61,7 +62,8 @@
 
     // Walk all of the transitively referenced libraries and compute errors.
     var errorCount = 0;
-    var allLibraries = _reachableLibraries(initialLibrary.element.library);
+    var allLibraries = _reachableLibraries(
+        resolutionMap.elementDeclaredByCompilationUnit(initialLibrary).library);
     for (var lib in allLibraries) {
       for (var unit in lib.units) {
         var source = unit.source;
diff --git a/pkg/analyzer/lib/dart/ast/resolution_base_classes.dart b/pkg/analyzer/lib/dart/ast/resolution_base_classes.dart
new file mode 100644
index 0000000..54ca0d8
--- /dev/null
+++ b/pkg/analyzer/lib/dart/ast/resolution_base_classes.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/**
+ * Abstract base class for a resolved element maintained in an AST data
+ * structure.
+ *
+ * This abstract type decouples the AST representation from depending on the
+ * element model.
+ */
+abstract class ResolutionTarget {}
+
+/**
+ * Abstract base class for a resolved type maintained in AST data structure.
+ *
+ * This abstract type decouples the AST representation from depending on the
+ * type model.
+ */
+abstract class ResolutionType {}
diff --git a/pkg/analyzer/lib/dart/ast/resolution_map.dart b/pkg/analyzer/lib/dart/ast/resolution_map.dart
new file mode 100644
index 0000000..37ee054
--- /dev/null
+++ b/pkg/analyzer/lib/dart/ast/resolution_map.dart
@@ -0,0 +1,291 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+
+/**
+ * A collection of methods which may be used to map from nodes in a resolved AST
+ * to elements and types in the element model.
+ *
+ * Clients should not extend, implement or mix-in this class.
+ */
+abstract class ResolutionMap {
+  /**
+   * Return the best element available for the function being invoked at [node].
+   * If resolution was able to find a better element based on type propagation,
+   * that element will be returned. Otherwise, the element found using the
+   * result of static analysis will be returned. If resolution has not been
+   * performed, then `null` will be returned.
+   */
+  ExecutableElement bestElementForFunctionExpressionInvocation(
+      FunctionExpressionInvocation node);
+
+  /**
+   * Return the best element available for the identifier [node]. If resolution
+   * was able to find a better element based on type propagation, that element
+   * will be returned. Otherwise, the element found using the result of static
+   * analysis will be returned. If resolution has not been performed, then
+   * `null` will be returned.
+   */
+  Element bestElementForIdentifier(Identifier node);
+
+  /**
+   * Return the best element available for the expression [node]. If resolution
+   * was able to find a better element based on type propagation, that element
+   * will be returned. Otherwise, the element found using the result of static
+   * analysis will be returned. If resolution has not been performed, then
+   * `null` will be returned.
+   */
+  MethodElement bestElementForMethodReference(MethodReferenceExpression node);
+
+  /**
+   * Return the best parameter element information available for the expression
+   * [node]. If type propagation was able to find a better parameter element
+   * than static analysis, that type will be returned. Otherwise, the result of
+   * static analysis will be returned.
+   */
+  ParameterElement bestParameterElementForExpression(Expression node);
+
+  /**
+   * Return the best type information available for the expression [node]. If
+   * type propagation was able to find a better type than static analysis, that
+   * type will be returned. Otherwise, the result of static analysis will be
+   * returned. If no type analysis has been performed, then the type 'dynamic'
+   * will be returned.
+   */
+  DartType bestTypeForExpression(Expression node);
+
+  /**
+   * Return the element annotation representing the annotation [node] in the
+   * element model.
+   */
+  ElementAnnotation elementAnnotationForAnnotation(Annotation node);
+
+  /**
+   * Return the element associated with the declaration [node], or `null` if
+   * either this node corresponds to a list of declarations or if the AST
+   * structure has not been resolved.
+   */
+  ClassElement elementDeclaredByClassDeclaration(ClassDeclaration node);
+
+  /**
+   * Return the element associated with the compilation unit [node], or `null`
+   * if the AST structure has not been resolved.
+   */
+  CompilationUnitElement elementDeclaredByCompilationUnit(CompilationUnit node);
+
+  /**
+   * Return the element associated with the declaration [node], or `null` if
+   * either this node corresponds to a list of declarations or if the AST
+   * structure has not been resolved.
+   */
+  ConstructorElement elementDeclaredByConstructorDeclaration(
+      ConstructorDeclaration node);
+
+  /**
+   * Return the element associated with the declaration [node], or `null` if
+   * either this node corresponds to a list of declarations or if the AST
+   * structure has not been resolved.
+   */
+  Element elementDeclaredByDeclaration(Declaration node);
+
+  /**
+   * Return the element associated with the declaration [node], or `null` if
+   * either this node corresponds to a list of declarations or if the AST
+   * structure has not been resolved.
+   */
+  LocalVariableElement elementDeclaredByDeclaredIdentifier(
+      DeclaredIdentifier node);
+
+  /**
+   * Return the element associated with the directive [node], or `null` if the
+   * AST structure has not been resolved or if this directive could not be
+   * resolved.
+   */
+  Element elementDeclaredByDirective(Directive node);
+
+  /**
+   * Return the element associated with the declaration [node], or `null` if
+   * either this node corresponds to a list of declarations or if the AST
+   * structure has not been resolved.
+   */
+  ClassElement elementDeclaredByEnumDeclaration(EnumDeclaration node);
+
+  /**
+   * Return the element representing the parameter [node], or `null` if this
+   * parameter has not been resolved.
+   */
+  ParameterElement elementDeclaredByFormalParameter(FormalParameter node);
+
+  /**
+   * Return the element associated with the declaration [node], or `null` if
+   * either this node corresponds to a list of declarations or if the AST
+   * structure has not been resolved.
+   */
+  ExecutableElement elementDeclaredByFunctionDeclaration(
+      FunctionDeclaration node);
+
+  /**
+   * Return the element associated with the function expression [node], or
+   * `null` if the AST structure has not been resolved.
+   */
+  ExecutableElement elementDeclaredByFunctionExpression(
+      FunctionExpression node);
+
+  /**
+   * Return the element associated with the declaration [node], or `null` if
+   * either this node corresponds to a list of declarations or if the AST
+   * structure has not been resolved.
+   */
+  ExecutableElement elementDeclaredByMethodDeclaration(MethodDeclaration node);
+
+  /**
+   * Return the element associated with the declaration [node], or `null` if
+   * either this node corresponds to a list of declarations or if the AST
+   * structure has not been resolved.
+   */
+  VariableElement elementDeclaredByVariableDeclaration(
+      VariableDeclaration node);
+
+  /**
+   * Return the element associated with the annotation [node], or `null` if the
+   * AST structure has not been resolved or if this annotation could not be
+   * resolved.
+   */
+  Element elementForAnnotation(Annotation node);
+
+  /**
+   * Return the element representing the parameter being named by the
+   * expression [node], or `null` if the AST structure has not been resolved or
+   * if there is no parameter with the same name as this expression.
+   */
+  ParameterElement elementForNamedExpression(NamedExpression node);
+
+  /**
+   * Return a list containing the elements representing the parameters in the
+   * list [node]. The list will contain `null`s if the parameters in this list
+   * have not been resolved.
+   */
+  List<ParameterElement> parameterElementsForFormalParameterList(
+      FormalParameterList node);
+
+  /**
+   * Return the element associated with the function being invoked at [node]
+   * based on propagated type information, or `null` if the AST structure has
+   * not been resolved or the function could not be resolved.
+   */
+  ExecutableElement propagatedElementForFunctionExpressionInvocation(
+      FunctionExpressionInvocation node);
+
+  /**
+   * Return the element associated with the identifier [node] based on
+   * propagated type information, or `null` if the AST structure has not been
+   * resolved or if this identifier could not be resolved. One example of the
+   * latter case is an identifier that is not defined within the scope in which
+   * it appears.
+   */
+  Element propagatedElementForIdentifier(Identifier node);
+
+  /**
+   * Return the element associated with the expression [node] based on
+   * propagated types, or `null` if the AST structure has not been resolved, or
+   * there is no meaningful propagated element to return (e.g. because this is a
+   * non-compound assignment expression, or because the method referred to could
+   * not be resolved).
+   */
+  MethodElement propagatedElementForMethodReference(
+      MethodReferenceExpression node);
+
+  /**
+   * If the expression [node] is an argument to an invocation, and the AST
+   * structure has been resolved, and the function being invoked is known based
+   * on propagated type information, and [node] corresponds to one of the
+   * parameters of the function being invoked, then return the parameter element
+   * representing the parameter to which the value of [node] will be
+   * bound. Otherwise, return `null`.
+   */
+  ParameterElement propagatedParameterElementForExpression(Expression node);
+
+  /**
+   * Return the propagated type of the expression [node], or `null` if type
+   * propagation has not been performed on the AST structure.
+   */
+  DartType propagatedTypeForExpression(Expression node);
+
+  /**
+   * Return the element associated with the constructor referenced by [node]
+   * based on static type information, or `null` if the AST structure has not
+   * been resolved or if the constructor could not be resolved.
+   */
+  ConstructorElement staticElementForConstructorReference(
+      ConstructorReferenceNode node);
+
+  /**
+   * Return the element associated with the function being invoked at [node]
+   * based on static type information, or `null` if the AST structure has not
+   * been resolved or the function could not be resolved.
+   */
+  ExecutableElement staticElementForFunctionExpressionInvocation(
+      FunctionExpressionInvocation node);
+
+  /**
+   * Return the element associated with the identifier [node] based on static
+   * type information, or `null` if the AST structure has not been resolved or
+   * if this identifier could not be resolved. One example of the latter case is
+   * an identifier that is not defined within the scope in which it appears
+   */
+  Element staticElementForIdentifier(Identifier node);
+
+  /**
+   * Return the element associated with the expression [node] based on the
+   * static types, or `null` if the AST structure has not been resolved, or
+   * there is no meaningful static element to return (e.g. because this is a
+   * non-compound assignment expression, or because the method referred to could
+   * not be resolved).
+   */
+  MethodElement staticElementForMethodReference(MethodReferenceExpression node);
+
+  /**
+   * Return the function type of the invocation [node] based on the static type
+   * information, or `null` if the AST structure has not been resolved, or if
+   * the invoke could not be resolved.
+   *
+   * This will usually be a [FunctionType], but it can also be an
+   * [InterfaceType] with a `call` method, `dynamic`, `Function`, or a `@proxy`
+   * interface type that implements `Function`.
+   */
+  DartType staticInvokeTypeForInvocationExpression(InvocationExpression node);
+
+  /**
+   * If the expression [node] is an argument to an invocation, and the AST
+   * structure has been resolved, and the function being invoked is known based
+   * on static type information, and [node] corresponds to one of the parameters
+   * of the function being invoked, then return the parameter element
+   * representing the parameter to which the value of [node] will be
+   * bound. Otherwise, return `null`.
+   */
+  ParameterElement staticParameterElementForExpression(Expression node);
+
+  /**
+   * Return the static type of the expression [node], or `null` if the AST
+   * structure has not been resolved.
+   */
+  DartType staticTypeForExpression(Expression node);
+
+  /**
+   * Return the type being named by [node], or `null` if the AST structure has
+   * not been resolved.
+   */
+  DartType typeForTypeName(TypeName node);
+
+  /**
+   * Return the element associated with the uri of the directive [node], or
+   * `null` if the AST structure has not been resolved or if the URI could not
+   * be resolved. Examples of the latter case include a directive that contains
+   * an invalid URL or a URL that does not exist.
+   */
+  Element uriElementForDirective(UriBasedDirective node);
+}
diff --git a/pkg/analyzer/lib/dart/ast/standard_resolution_map.dart b/pkg/analyzer/lib/dart/ast/standard_resolution_map.dart
new file mode 100644
index 0000000..c778063
--- /dev/null
+++ b/pkg/analyzer/lib/dart/ast/standard_resolution_map.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/ast/resolution_map.dart';
+import 'package:analyzer/src/dart/ast/resolution_map.dart';
+
+/**
+ * Gets an instance of [ResolutionMap] based on the standard AST implementation.
+ */
+final ResolutionMap resolutionMap = new ResolutionMapImpl();
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index a31f506..c235ea3 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -37,6 +37,7 @@
 library analyzer.dart.element.element;
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/resolution_base_classes.dart';
 import 'package:analyzer/dart/constant/value.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
@@ -563,7 +564,7 @@
  *
  * Clients may not extend, implement or mix-in this class.
  */
-abstract class Element implements AnalysisTarget {
+abstract class Element implements AnalysisTarget, ResolutionTarget {
   /**
    * A comparator that can be used to sort elements by their name offset.
    * Elements with a smaller offset will be sorted to be before elements with a
@@ -787,7 +788,8 @@
  *
  * Clients may not extend, implement or mix-in this class.
  */
-abstract class ElementAnnotation implements ConstantEvaluationTarget {
+abstract class ElementAnnotation
+    implements ConstantEvaluationTarget, ResolutionTarget {
   /**
    * An empty list of annotations.
    */
diff --git a/pkg/analyzer/lib/dart/element/type.dart b/pkg/analyzer/lib/dart/element/type.dart
index b6923a0..2ff00f0 100644
--- a/pkg/analyzer/lib/dart/element/type.dart
+++ b/pkg/analyzer/lib/dart/element/type.dart
@@ -22,6 +22,7 @@
  */
 library analyzer.dart.element.type;
 
+import 'package:analyzer/dart/ast/resolution_base_classes.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart' show InterfaceTypeImpl;
 import 'package:analyzer/src/generated/type_system.dart' show TypeSystem;
@@ -31,7 +32,7 @@
  *
  * Clients may not extend, implement or mix-in this class.
  */
-abstract class DartType {
+abstract class DartType implements ResolutionType {
   /**
    * An empty list of types.
    */
@@ -698,9 +699,6 @@
    */
   static const List<TypeParameterType> EMPTY_LIST = const <TypeParameterType>[];
 
-  @override
-  TypeParameterElement get element;
-
   /**
    * Return the type representing the bound associated with this parameter,
    * or `dynamic` if there was no explicit bound.
@@ -715,4 +713,7 @@
    * Always consult the bound if that could be relevant.
    */
   ElementLocation get definition;
+
+  @override
+  TypeParameterElement get element;
 }
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 31fa75b..07ebae2 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -112,7 +112,6 @@
   CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
   CompileTimeErrorCode.EXTENDS_ENUM,
   CompileTimeErrorCode.EXTENDS_NON_CLASS,
-  CompileTimeErrorCode.EXTRA_ARGUMENT_TO_ASSERT,
   CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS,
   CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS,
   CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER,
diff --git a/pkg/analyzer/lib/plugin/command_line.dart b/pkg/analyzer/lib/plugin/command_line.dart
deleted file mode 100644
index 7a6fbd8..0000000
--- a/pkg/analyzer/lib/plugin/command_line.dart
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) 2015, 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.
-
-/**
- * Support for client code that extends command-line tools that use the analysis
- * engine by adding new command-line arguments.
- */
-library analyzer.plugin.command_line;
-
-import 'package:analyzer/src/plugin/command_line_plugin.dart';
-import 'package:args/args.dart';
-import 'package:plugin/plugin.dart';
-
-/**
- * The identifier of the extension point that allows plugins to add new flags
- * and options to the command-line parser before the parser is used to parse
- * the command-line. The object used as an extension must be an
- * [ArgParserContributor].
- */
-final String PARSER_CONTRIBUTOR_EXTENSION_POINT_ID = Plugin.join(
-    CommandLinePlugin.UNIQUE_IDENTIFIER,
-    CommandLinePlugin.PARSER_CONTRIBUTOR_EXTENSION_POINT);
-
-/**
- * The identifier of the extension point that allows plugins to access the
- * result of parsing the command-line. The object used as an extension must be
- * an [ArgResultsProcessor].
- */
-final String RESULT_PROCESSOR_EXTENSION_POINT_ID = Plugin.join(
-    CommandLinePlugin.UNIQUE_IDENTIFIER,
-    CommandLinePlugin.RESULT_PROCESSOR_EXTENSION_POINT);
-
-/**
- * A function that will contribute flags and options to the command-line parser.
- */
-typedef void ArgParserContributor(ArgParser parser);
-
-/**
- * A function that will process the results of parsing the command-line.
- */
-typedef void ArgResultsProcessor(ArgResults results);
diff --git a/pkg/analyzer/lib/plugin/options.dart b/pkg/analyzer/lib/plugin/options.dart
index 632c4d9..f884df5 100644
--- a/pkg/analyzer/lib/plugin/options.dart
+++ b/pkg/analyzer/lib/plugin/options.dart
@@ -7,28 +7,9 @@
 library analyzer.plugin.options;
 
 import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/plugin/options_plugin.dart';
-import 'package:plugin/plugin.dart';
 import 'package:yaml/yaml.dart';
 
-/// The identifier of the extension point that allows plugins to access
-/// options defined in the analysis options file. The object used as an
-/// extension must be an [OptionsProcessor].
-final String OPTIONS_PROCESSOR_EXTENSION_POINT_ID = Plugin.join(
-    OptionsPlugin.UNIQUE_IDENTIFIER,
-    OptionsPlugin.OPTIONS_PROCESSOR_EXTENSION_POINT);
-
-/// The identifier of the extension point that allows plugins to validate
-/// options defined in the analysis options file. The object used as an
-/// extension must be an [OptionsValidator].
-final String OPTIONS_VALIDATOR_EXTENSION_POINT_ID = Plugin.join(
-    OptionsPlugin.UNIQUE_IDENTIFIER,
-    OptionsPlugin.OPTIONS_VALIDATOR_EXTENSION_POINT);
-
-/// Processes options defined in the analysis options file.
-///
-/// Clients may implement this class when implementing plugins.
+/// Validates options as defined in an analysis options file.
 ///
 /// The options file format is intentionally very open-ended, giving clients
 /// utmost flexibility in defining their own options.  The only hardfast
@@ -55,29 +36,9 @@
 ///
 ///     bool useMultiPackage =
 ///         options['compiler']['resolver']['useMultiPackage'];
-abstract class OptionsProcessor {
-  /// Called when an error occurs in processing options.
-  void onError(Exception exception);
-
-  /// Called when an options file is processed.
-  ///
-  /// The options file is processed on analyzer initialization and
-  /// subsequently when the file is changed on disk.  In the event of a
-  /// change notification, note that the notification simply indicates
-  /// a change on disk. Content in specific option scopes may or may not
-  /// be different. It is up to the implementer to check whether specific
-  /// options have changed and to handle those changes appropriately. In
-  /// addition to the [options] map, the associated analysis [context] is
-  /// provided as well to allow for context-specific configuration.
-  void optionsProcessed(AnalysisContext context, Map<String, Object> options);
-}
-
-/// Validates options as defined in an analysis options file.
 ///
 /// Clients may implement this class when implementing plugins.
 ///
-/// See [OptionsProcessor] for a description of the options file format.
-///
 abstract class OptionsValidator {
   /// Validate [options], reporting any errors to the given [reporter].
   void validate(ErrorReporter reporter, Map<String, YamlNode> options);
diff --git a/pkg/analyzer/lib/plugin/task.dart b/pkg/analyzer/lib/plugin/task.dart
index 2a242de..a9059af 100644
--- a/pkg/analyzer/lib/plugin/task.dart
+++ b/pkg/analyzer/lib/plugin/task.dart
@@ -41,20 +41,6 @@
 
 /**
  * The identifier of the extension point that allows plugins to register new
- * analysis tasks with the analysis engine. The object used as an extension must
- * be a [TaskDescriptor].
- *
- * Contributed tasks should never extract information from Dart elements or AST
- * (e.g. offsets) of a source and put it into results for targets in other
- * sources. Dart elements and ASTs are updated during incremental resolution,
- * and invalidation of results is intentionally limited by the source bounds
- * for performance reasons.
- */
-final String TASK_EXTENSION_POINT_ID = Plugin.join(
-    EnginePlugin.UNIQUE_IDENTIFIER, EnginePlugin.TASK_EXTENSION_POINT);
-
-/**
- * The identifier of the extension point that allows plugins to register new
  * work managers with the analysis engine. The object used as an extension must
  * be a [WorkManagerFactory].
  */
diff --git a/pkg/analyzer/lib/source/error_processor.dart b/pkg/analyzer/lib/source/error_processor.dart
index 9b09559..3404edc 100644
--- a/pkg/analyzer/lib/source/error_processor.dart
+++ b/pkg/analyzer/lib/source/error_processor.dart
@@ -87,19 +87,19 @@
   /// Check if this processor applies to the given [error].
   bool appliesTo(AnalysisError error) => code == error.errorCode.name;
 
-  /// Return an error processor associated with this [context] for the given
-  /// [error], or `null` if none is found.
+  /// Return an error processor associated in the [analysisOptions] for the
+  /// given [error], or `null` if none is found.
   static ErrorProcessor getProcessor(
-      AnalysisContext context, AnalysisError error) {
-    if (context == null) {
+      AnalysisOptions analysisOptions, AnalysisError error) {
+    if (analysisOptions == null) {
       return null;
     }
 
     // Let the user configure how specific errors are processed.
-    List<ErrorProcessor> processors = context.analysisOptions.errorProcessors;
+    List<ErrorProcessor> processors = analysisOptions.errorProcessors;
 
     // Give strong mode a chance to upgrade it.
-    if (context.analysisOptions.strongMode) {
+    if (analysisOptions.strongMode) {
       processors = processors.toList();
       processors.add(_StrongModeTypeErrorProcessor.instance);
     }
diff --git a/pkg/analyzer/lib/src/context/builder.dart b/pkg/analyzer/lib/src/context/builder.dart
index 5037995..95b9465 100644
--- a/pkg/analyzer/lib/src/context/builder.dart
+++ b/pkg/analyzer/lib/src/context/builder.dart
@@ -9,7 +9,6 @@
 
 import 'package:analyzer/context/declared_variables.dart';
 import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/plugin/options.dart';
 import 'package:analyzer/plugin/resolver_provider.dart';
 import 'package:analyzer/source/analysis_options_provider.dart';
 import 'package:analyzer/source/package_map_resolver.dart';
@@ -102,7 +101,7 @@
   AnalysisContext buildContext(String path) {
     InternalAnalysisContext context =
         AnalysisEngine.instance.createAnalysisContext();
-    AnalysisOptions options = getAnalysisOptions(context, path);
+    AnalysisOptions options = getAnalysisOptions(path);
     context.contentCache = contentCache;
     context.sourceFactory = createSourceFactory(path, options);
     context.analysisOptions = options;
@@ -325,15 +324,13 @@
   }
 
   /**
-   * Return the analysis options that should be used when the given [context] is
-   * used to analyze code in the directory with the given [path].
+   * Return the analysis options that should be used to analyze code in the
+   * directory with the given [path].
    */
-  AnalysisOptions getAnalysisOptions(AnalysisContext context, String path) {
+  AnalysisOptions getAnalysisOptions(String path) {
     AnalysisOptionsImpl options = createDefaultOptions();
     File optionsFile = getOptionsFile(path);
     if (optionsFile != null) {
-      List<OptionsProcessor> optionsProcessors =
-          AnalysisEngine.instance.optionsPlugin.optionsProcessors;
       // TODO(danrubel) restructure so that we don't recalculate the package map
       // more than once per path.
       Packages packages = createPackageMap(path);
@@ -348,11 +345,9 @@
         Map<String, YamlNode> optionMap =
             new AnalysisOptionsProvider(sourceFactory)
                 .getOptionsFromFile(optionsFile);
-        optionsProcessors.forEach(
-            (OptionsProcessor p) => p.optionsProcessed(context, optionMap));
         applyToAnalysisOptions(options, optionMap);
-      } on Exception catch (exception) {
-        optionsProcessors.forEach((OptionsProcessor p) => p.onError(exception));
+      } catch (_) {
+        // Ignore exceptions thrown while trying to load the options file.
       }
     }
     return options;
diff --git a/pkg/analyzer/lib/src/context/context.dart b/pkg/analyzer/lib/src/context/context.dart
index 30d48e2..132efd1 100644
--- a/pkg/analyzer/lib/src/context/context.dart
+++ b/pkg/analyzer/lib/src/context/context.dart
@@ -8,6 +8,7 @@
 import 'dart:collection';
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/exception/exception.dart';
@@ -239,6 +240,7 @@
    * Initialize a newly created analysis context.
    */
   AnalysisContextImpl() {
+    AnalysisEngine.instance.processRequiredPlugins();
     _privatePartition = new UniversalCachePartition(this);
     _cache = createCacheFromSourceFactory(null);
     _taskManager = AnalysisEngine.instance.taskManager;
@@ -282,7 +284,6 @@
         this._options.strongMode != options.strongMode ||
         this._options.enableAssertInitializer !=
             options.enableAssertInitializer ||
-        this._options.enableAssertMessage != options.enableAssertMessage ||
         this._options.enableLazyAssignmentOperators !=
             options.enableLazyAssignmentOperators ||
         ((options is AnalysisOptionsImpl)
@@ -307,7 +308,6 @@
     this._options.generateSdkErrors = options.generateSdkErrors;
     this._options.dart2jsHint = options.dart2jsHint;
     this._options.enableAssertInitializer = options.enableAssertInitializer;
-    this._options.enableAssertMessage = options.enableAssertMessage;
     this._options.enableStrictCallChecks = options.enableStrictCallChecks;
     this._options.enableLazyAssignmentOperators =
         options.enableLazyAssignmentOperators;
@@ -1944,9 +1944,12 @@
       }
       // if validation, remember the result, but throw it away
       if (analysisOptions.incrementalValidation) {
-        incrementalResolutionValidation_lastUnitSource = oldUnit.element.source;
+        CompilationUnitElement compilationUnitElement =
+            resolutionMap.elementDeclaredByCompilationUnit(oldUnit);
+        incrementalResolutionValidation_lastUnitSource =
+            compilationUnitElement.source;
         incrementalResolutionValidation_lastLibrarySource =
-            oldUnit.element.library.source;
+            compilationUnitElement.library.source;
         incrementalResolutionValidation_lastUnit = oldUnit;
         return false;
       }
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 4534661..06dc54f 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -132,14 +132,14 @@
 
   /**
    * The combined unlinked and linked package for the SDK, extracted from
-   * the given [_sourceFactory].
+   * the given [sourceFactory].
    */
   PackageBundle _sdkBundle;
 
   /**
-   * The set of explicitly analyzed files.
+   * The set of added files.
    */
-  final _explicitFiles = new LinkedHashSet<String>();
+  final _addedFiles = new LinkedHashSet<String>();
 
   /**
    * The set of priority files, that should be analyzed sooner.
@@ -166,7 +166,15 @@
    * The mapping from the files for which the index was requested using
    * [getIndex] to the [Completer]s to report the result.
    */
-  final _indexRequestedFiles = <String, List<Completer<IndexResult>>>{};
+  final _indexRequestedFiles =
+      <String, List<Completer<AnalysisDriverUnitIndex>>>{};
+
+  /**
+   * The mapping from the files for which the index was requested using
+   * [getIndex] to the [Completer]s to report the result.
+   */
+  final _unitElementRequestedFiles =
+      <String, List<Completer<CompilationUnitElement>>>{};
 
   /**
    * The set of files were reported as changed through [changeFile] and not
@@ -243,9 +251,9 @@
   }
 
   /**
-   * Return the set of files added to analysis using [addFile].
+   * Return the set of files explicitly added to analysis using [addFile].
    */
-  Set<String> get addedFiles => _explicitFiles;
+  Set<String> get addedFiles => _addedFiles;
 
   /**
    * Return the stream that produces [ExceptionResult]s.
@@ -258,7 +266,19 @@
   FileSystemState get fsState => _fsState;
 
   /**
-   * Return the set of files that are known, i.e. added or used implicitly.
+   * Return `true` if the driver has a file to analyze.
+   */
+  bool get hasFilesToAnalyze {
+    return _requestedFiles.isNotEmpty ||
+        _requestedParts.isNotEmpty ||
+        _filesToAnalyze.isNotEmpty ||
+        _partsToAnalyze.isNotEmpty;
+  }
+
+  /**
+   * Return the set of files that are known at this moment. This set does not
+   * always include all added files or all implicitly used file. If a file has
+   * not been processed yet, it might be missing.
    */
   Set<String> get knownFiles => _fsState.knownFilePaths;
 
@@ -330,6 +350,9 @@
     if (_indexRequestedFiles.isNotEmpty) {
       return AnalysisDriverPriority.interactive;
     }
+    if (_unitElementRequestedFiles.isNotEmpty) {
+      return AnalysisDriverPriority.interactive;
+    }
     if (_topLevelNameDeclarationsTasks.isNotEmpty) {
       return AnalysisDriverPriority.interactive;
     }
@@ -362,7 +385,8 @@
    */
   void addFile(String path) {
     if (AnalysisEngine.isDartFileName(path)) {
-      _explicitFiles.add(path);
+      _addedFiles.add(path);
+      _changedFiles.add(path);
       _filesToAnalyze.add(path);
     }
     _statusSupport.transitionToAnalyzing();
@@ -390,7 +414,7 @@
   void changeFile(String path) {
     if (AnalysisEngine.isDartFileName(path)) {
       _changedFiles.add(path);
-      if (_explicitFiles.contains(path)) {
+      if (_addedFiles.contains(path)) {
         _filesToAnalyze.add(path);
       }
     }
@@ -418,20 +442,20 @@
   }
 
   /**
-   * Return a [Future] that completes with the [IndexResult] for the file with
-   * the given [path].
+   * Return a [Future] that completes with the [AnalysisDriverUnitIndex] for
+   * the file with the given [path].
    */
-  Future<IndexResult> getIndex(String path) {
-    if (AnalysisEngine.isDartFileName(path)) {
-      var completer = new Completer<IndexResult>();
-      _indexRequestedFiles
-          .putIfAbsent(path, () => <Completer<IndexResult>>[])
-          .add(completer);
-      _statusSupport.transitionToAnalyzing();
-      _scheduler._notify(this);
-      return completer.future;
+  Future<AnalysisDriverUnitIndex> getIndex(String path) {
+    if (!AnalysisEngine.isDartFileName(path)) {
+      return new Future.value();
     }
-    return new Future.value();
+    var completer = new Completer<AnalysisDriverUnitIndex>();
+    _indexRequestedFiles
+        .putIfAbsent(path, () => <Completer<AnalysisDriverUnitIndex>>[])
+        .add(completer);
+    _statusSupport.transitionToAnalyzing();
+    _scheduler._notify(this);
+    return completer.future;
   }
 
   /**
@@ -476,6 +500,23 @@
   }
 
   /**
+   * Return a [Future] that completes with the [CompilationUnitElement] for the
+   * file with the given [path].
+   */
+  Future<CompilationUnitElement> getUnitElement(String path) {
+    if (!AnalysisEngine.isDartFileName(path)) {
+      return new Future.value();
+    }
+    var completer = new Completer<CompilationUnitElement>();
+    _unitElementRequestedFiles
+        .putIfAbsent(path, () => <Completer<CompilationUnitElement>>[])
+        .add(completer);
+    _statusSupport.transitionToAnalyzing();
+    _scheduler._notify(this);
+    return completer.future;
+  }
+
+  /**
    * Return a [Future] that completes with a [ParseResult] for the file
    * with the given [path].
    *
@@ -505,8 +546,12 @@
    * but does not guarantee this.
    */
   void removeFile(String path) {
-    _explicitFiles.remove(path);
+    _addedFiles.remove(path);
     _filesToAnalyze.remove(path);
+    _fsState.removeFile(path);
+    _filesToAnalyze.addAll(_addedFiles);
+    _statusSupport.transitionToAnalyzing();
+    _scheduler._notify(this);
   }
 
   /**
@@ -549,7 +594,7 @@
       String key = _getResolvedUnitKey(libraryFile, file);
       List<int> bytes = _byteStore.get(key);
       if (bytes != null) {
-        return _getAnalysisResultFromBytes(libraryFile, file, bytes);
+        return _getAnalysisResultFromBytes(file, bytes);
       }
     }
 
@@ -592,9 +637,9 @@
 
         // Return the result, full or partial.
         _logger.writeln('Computed new analysis result.');
-        return _getAnalysisResultFromBytes(libraryFile, file, bytes,
+        return _getAnalysisResultFromBytes(file, bytes,
             content: withUnit ? file.content : null,
-            withErrors: _explicitFiles.contains(path),
+            withErrors: _addedFiles.contains(path),
             resolvedUnit: withUnit ? resolvedUnit : null);
       } finally {
         analysisContext.dispose();
@@ -602,28 +647,28 @@
     });
   }
 
-  IndexResult _computeIndexResult(String path) {
+  AnalysisDriverUnitIndex _computeIndex(String path) {
     AnalysisResult analysisResult = _computeAnalysisResult(path,
         withUnit: false, asIsIfPartWithoutLibrary: true);
-    FileState libraryFile = analysisResult._libraryFile;
-    FileState file = analysisResult._file;
+    return analysisResult._index;
+  }
+
+  CompilationUnitElement _computeUnitElement(String path) {
+    FileState file = _fsState.getFileForPath(path);
+    FileState libraryFile = file.library ?? file;
 
     // Create the AnalysisContext to resynthesize elements in.
     _LibraryContext libraryContext = _createLibraryContext(libraryFile);
     AnalysisContext analysisContext = _createAnalysisContext(libraryContext);
 
     // Resynthesize the CompilationUnitElement in the context.
-    CompilationUnitElement unitElement;
     try {
-      unitElement = analysisContext.computeResult(
+      return analysisContext.computeResult(
           new LibrarySpecificUnit(libraryFile.source, file.source),
           COMPILATION_UNIT_ELEMENT);
     } finally {
       analysisContext.dispose();
     }
-
-    // Return as IndexResult.
-    return new IndexResult(unitElement, analysisResult._index);
   }
 
   AnalysisContext _createAnalysisContext(_LibraryContext libraryContext) {
@@ -735,26 +780,14 @@
    * Load the [AnalysisResult] for the given [file] from the [bytes]. Set
    * optional [content] and [resolvedUnit].
    */
-  AnalysisResult _getAnalysisResultFromBytes(
-      FileState libraryFile, FileState file, List<int> bytes,
+  AnalysisResult _getAnalysisResultFromBytes(FileState file, List<int> bytes,
       {String content, bool withErrors: true, CompilationUnit resolvedUnit}) {
     var unit = new AnalysisDriverResolvedUnit.fromBuffer(bytes);
     List<AnalysisError> errors = withErrors
         ? _getErrorsFromSerialized(file, unit.errors)
         : const <AnalysisError>[];
-    return new AnalysisResult(
-        libraryFile,
-        file,
-        this,
-        sourceFactory,
-        file.path,
-        file.uri,
-        content,
-        file.contentHash,
-        file.lineInfo,
-        resolvedUnit,
-        errors,
-        unit.index);
+    return new AnalysisResult(this, sourceFactory, file.path, file.uri, content,
+        file.contentHash, file.lineInfo, resolvedUnit, errors, unit.index);
   }
 
   /**
@@ -850,9 +883,19 @@
     // Process an index request.
     if (_indexRequestedFiles.isNotEmpty) {
       String path = _indexRequestedFiles.keys.first;
-      IndexResult result = _computeIndexResult(path);
+      AnalysisDriverUnitIndex index = _computeIndex(path);
       _indexRequestedFiles.remove(path).forEach((completer) {
-        completer.complete(result);
+        completer.complete(index);
+      });
+      return;
+    }
+
+    // Process a unit request.
+    if (_unitElementRequestedFiles.isNotEmpty) {
+      String path = _unitElementRequestedFiles.keys.first;
+      CompilationUnitElement unitElement = _computeUnitElement(path);
+      _unitElementRequestedFiles.remove(path).forEach((completer) {
+        completer.complete(unitElement);
       });
       return;
     }
@@ -972,7 +1015,7 @@
       if (anyApiChanged) {
         _logger.writeln('API signatures mismatch found for $path');
         // TODO(scheglov) schedule analysis of only affected files
-        _filesToAnalyze.addAll(_explicitFiles);
+        _filesToAnalyze.addAll(_addedFiles);
       }
       return files[0];
     });
@@ -1033,8 +1076,7 @@
   /**
    * Return `true` if we are currently analyzing code.
    */
-  bool get isAnalyzing =>
-      _statusSupport.currentStatus == AnalysisStatus.ANALYZING;
+  bool get isAnalyzing => _hasFilesToAnalyze;
 
   /**
    * Return the stream that produces [AnalysisStatus] events.
@@ -1042,6 +1084,18 @@
   Stream<AnalysisStatus> get status => _statusSupport.stream;
 
   /**
+   * Return `true` if there is a driver with a file to analyze.
+   */
+  bool get _hasFilesToAnalyze {
+    for (AnalysisDriver driver in _drivers) {
+      if (driver.hasFilesToAnalyze) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
    * Start the scheduler, so that any [AnalysisDriver] created before or
    * after will be asked to perform work.
    */
@@ -1058,7 +1112,6 @@
    */
   void _add(AnalysisDriver driver) {
     _drivers.add(driver);
-    _statusSupport.transitionToAnalyzing();
     _hasWork.notify();
   }
 
@@ -1067,7 +1120,6 @@
    * perform some work.
    */
   void _notify(AnalysisDriver driver) {
-    _statusSupport.transitionToAnalyzing();
     _hasWork.notify();
   }
 
@@ -1077,7 +1129,6 @@
    */
   void _remove(AnalysisDriver driver) {
     _drivers.remove(driver);
-    _statusSupport.transitionToAnalyzing();
     _hasWork.notify();
   }
 
@@ -1097,8 +1148,10 @@
 
       await _hasWork.signal;
 
-      if (analysisSection == null) {
-        analysisSection = _logger.enter('Analyzing');
+      // Transition to analyzing if there are files to analyze.
+      if (_hasFilesToAnalyze) {
+        _statusSupport.transitionToAnalyzing();
+        analysisSection ??= _logger.enter('Analyzing');
       }
 
       // Find the driver with the highest priority.
@@ -1112,11 +1165,15 @@
         }
       }
 
+      // Transition to idle if no files to analyze.
+      if (!_hasFilesToAnalyze) {
+        _statusSupport.transitionToIdle();
+        analysisSection?.exit();
+        analysisSection = null;
+      }
+
       // Continue to sleep if no work to do.
       if (bestPriority == AnalysisDriverPriority.nothing) {
-        analysisSection.exit();
-        analysisSection = null;
-        _statusSupport.transitionToIdle();
         continue;
       }
 
@@ -1152,9 +1209,6 @@
  * any previously returned result, even inside of the same library.
  */
 class AnalysisResult {
-  final FileState _libraryFile;
-  final FileState _file;
-
   /**
    * The [AnalysisDriver] that produced this result.
    */
@@ -1208,8 +1262,6 @@
   final AnalysisDriverUnitIndex _index;
 
   AnalysisResult(
-      this._libraryFile,
-      this._file,
       this.driver,
       this.sourceFactory,
       this.path,
@@ -1242,23 +1294,6 @@
 }
 
 /**
- * The result of indexing of a single file.
- */
-class IndexResult {
-  /**
-   * The element of the file.
-   */
-  final CompilationUnitElement unitElement;
-
-  /**
-   * The index of the file.
-   */
-  final AnalysisDriverUnitIndex index;
-
-  IndexResult(this.unitElement, this.index);
-}
-
-/**
  * The result of parsing of a single file.
  *
  * These results are self-consistent, i.e. [content], [contentHash], the
@@ -1385,6 +1420,8 @@
  * file.
  */
 class _FilesReferencingNameTask {
+  static const int _MS_WORK_INTERVAL = 5;
+
   final AnalysisDriver driver;
   final String name;
   final Completer<List<String>> completer = new Completer<List<String>>();
@@ -1396,30 +1433,38 @@
   _FilesReferencingNameTask(this.driver, this.name);
 
   /**
-   * Perform a single piece of work, and either complete the [completer] and
-   * return `true` to indicate that the task is done, return `false` to indicate
-   * that the task should continue to be run.
+   * Perform work for a fixed length of time, and complete the [completer] to
+   * either return `true` to indicate that the task is done, or return `false`
+   * to indicate that the task should continue to be run.
+   *
+   * Each invocation of an asynchronous method has overhead, which looks as
+   * `_SyncCompleter.complete` invocation, we see as much as 62% in some
+   * scenarios. Instead we use a fixed length of time, so we can spend less time
+   * overall and keep quick enough response time.
    */
   Future<bool> perform() async {
-    // Prepare files to check.
-    if (filesToCheck.isEmpty) {
-      Set<String> newFiles = driver.addedFiles.difference(checkedFiles);
-      filesToCheck.addAll(newFiles);
-    }
+    Stopwatch timer = new Stopwatch()..start();
+    while (timer.elapsedMilliseconds < _MS_WORK_INTERVAL) {
+      // Prepare files to check.
+      if (filesToCheck.isEmpty) {
+        Set<String> newFiles = driver.addedFiles.difference(checkedFiles);
+        filesToCheck.addAll(newFiles);
+      }
 
-    // If no more files to check, complete and done.
-    if (filesToCheck.isEmpty) {
-      completer.complete(referencingFiles);
-      return true;
-    }
+      // If no more files to check, complete and done.
+      if (filesToCheck.isEmpty) {
+        completer.complete(referencingFiles);
+        return true;
+      }
 
-    // Check the next file.
-    String path = filesToCheck.removeLast();
-    FileState file = driver._fsState.getFileForPath(path);
-    if (file.referencedNames.contains(name)) {
-      referencingFiles.add(path);
+      // Check the next file.
+      String path = filesToCheck.removeLast();
+      FileState file = driver._fsState.getFileForPath(path);
+      if (file.referencedNames.contains(name)) {
+        referencingFiles.add(path);
+      }
+      checkedFiles.add(path);
     }
-    checkedFiles.add(path);
 
     // We're not done yet.
     return false;
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index 7ab09c1..70ba1ee 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -548,6 +548,11 @@
   final Map<Uri, FileState> _uriToFile = {};
 
   /**
+   * All known file paths.
+   */
+  final Set<String> knownFilePaths = new Set<String>();
+
+  /**
    * Mapping from a path to the corresponding [FileState]s, canonical or not.
    */
   final Map<String, List<FileState>> _pathToFiles = {};
@@ -577,11 +582,6 @@
   }
 
   /**
-   * Return the set of known file paths.
-   */
-  Set<String> get knownFilePaths => _pathToFiles.keys.toSet();
-
-  /**
    * Return the known files.
    */
   Iterable<FileState> get knownFiles =>
@@ -614,7 +614,7 @@
       FileSource uriSource = new FileSource(resource, uri);
       file = new FileState._(this, path, uri, uriSource);
       _uriToFile[uri] = file;
-      _pathToFiles.putIfAbsent(path, () => <FileState>[]).add(file);
+      _addFileWithPath(path, file);
       _pathToCanonicalFile[path] = file;
       file.refresh();
     }
@@ -640,7 +640,7 @@
       FileSource source = new FileSource(resource, uri);
       file = new FileState._(this, path, uri, source);
       _uriToFile[uri] = file;
-      _pathToFiles.putIfAbsent(path, () => <FileState>[]).add(file);
+      _addFileWithPath(path, file);
       file.refresh();
     }
     return file;
@@ -660,6 +660,27 @@
       ..remove(canonicalFile)
       ..insert(0, canonicalFile);
   }
+
+  /**
+   * Remove the file with the given [path].
+   */
+  void removeFile(String path) {
+    _uriToFile.clear();
+    knownFilePaths.clear();
+    _pathToFiles.clear();
+    _pathToCanonicalFile.clear();
+    _partToLibraries.clear();
+  }
+
+  void _addFileWithPath(String path, FileState file) {
+    var files = _pathToFiles[path];
+    if (files == null) {
+      knownFilePaths.add(path);
+      files = <FileState>[];
+      _pathToFiles[path] = files;
+    }
+    files.add(file);
+  }
 }
 
 @visibleForTesting
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index 8c8c132..04d3359 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -505,7 +506,10 @@
   @override
   visitClassDeclaration(ClassDeclaration node) {
     if (node.extendsClause == null) {
-      ClassElement objectElement = node.element.supertype?.element;
+      ClassElement objectElement = resolutionMap
+          .elementDeclaredByClassDeclaration(node)
+          .supertype
+          ?.element;
       recordRelationOffset(objectElement, IndexRelationKind.IS_EXTENDED_BY,
           node.name.offset, 0, true);
     }
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 907ad15..1c569ed 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -15,6 +15,7 @@
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/member.dart';
 import 'package:analyzer/src/dart/resolver/scope.dart' show NamespaceBuilder;
+import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:collection/collection.dart';
 
@@ -82,7 +83,7 @@
       return const <SearchResult>[];
     }
     List<SearchResult> results = <SearchResult>[];
-    await _addResults(results, type, {
+    await _addResults(results, type, const {
       IndexRelationKind.IS_EXTENDED_BY: SearchResultKind.REFERENCE,
       IndexRelationKind.IS_MIXED_IN_BY: SearchResultKind.REFERENCE,
       IndexRelationKind.IS_IMPLEMENTED_BY: SearchResultKind.REFERENCE
@@ -92,13 +93,6 @@
 
   Future<Null> _addResults(List<SearchResult> results, Element element,
       Map<IndexRelationKind, SearchResultKind> relationToResultKind) async {
-    String path = element.source.fullName;
-
-    // If the file with the element is not known, then the element is not used.
-    if (!_driver.knownFiles.contains(path)) {
-      return;
-    }
-
     // Prepare the element name.
     String name = element.displayName;
     if (element is ConstructorElement) {
@@ -107,6 +101,7 @@
 
     // Prepare the list of files that reference the element name.
     List<String> files = <String>[];
+    String path = element.source.fullName;
     if (name.startsWith('_')) {
       String libraryPath = element.library.source.fullName;
       if (_driver.addedFiles.contains(libraryPath)) {
@@ -139,13 +134,12 @@
       Element element,
       Map<IndexRelationKind, SearchResultKind> relationToResultKind,
       String file) async {
-    IndexResult result = await _driver.getIndex(file);
-    _IndexRequest request = new _IndexRequest(result.index);
+    AnalysisDriverUnitIndex index = await _driver.getIndex(file);
+    _IndexRequest request = new _IndexRequest(index);
     int elementId = request.findElementId(element);
     if (elementId != -1) {
-      CompilationUnitElement unitElement = result.unitElement;
-      List<SearchResult> fileResults =
-          request.getRelations(elementId, relationToResultKind, unitElement);
+      List<SearchResult> fileResults = await request.getRelations(
+          elementId, relationToResultKind, () => _driver.getUnitElement(file));
       results.addAll(fileResults);
     }
   }
@@ -153,7 +147,7 @@
   Future<List<SearchResult>> _searchReferences(Element element) async {
     List<SearchResult> results = <SearchResult>[];
     await _addResults(results, element,
-        {IndexRelationKind.IS_REFERENCED_BY: SearchResultKind.REFERENCE});
+        const {IndexRelationKind.IS_REFERENCED_BY: SearchResultKind.REFERENCE});
     return results;
   }
 
@@ -190,20 +184,20 @@
     PropertyAccessorElement getter = field.getter;
     PropertyAccessorElement setter = field.setter;
     if (!field.isSynthetic) {
-      await _addResults(results, field, {
+      await _addResults(results, field, const {
         IndexRelationKind.IS_WRITTEN_BY: SearchResultKind.WRITE,
         IndexRelationKind.IS_REFERENCED_BY: SearchResultKind.REFERENCE
       });
     }
     if (getter != null) {
-      await _addResults(results, getter, {
+      await _addResults(results, getter, const {
         IndexRelationKind.IS_REFERENCED_BY: SearchResultKind.READ,
         IndexRelationKind.IS_INVOKED_BY: SearchResultKind.INVOCATION
       });
     }
     if (setter != null) {
       await _addResults(results, setter,
-          {IndexRelationKind.IS_REFERENCED_BY: SearchResultKind.WRITE});
+          const {IndexRelationKind.IS_REFERENCED_BY: SearchResultKind.WRITE});
     }
     return results;
   }
@@ -213,7 +207,7 @@
       element = (element as Member).baseElement;
     }
     List<SearchResult> results = <SearchResult>[];
-    await _addResults(results, element, {
+    await _addResults(results, element, const {
       IndexRelationKind.IS_REFERENCED_BY: SearchResultKind.REFERENCE,
       IndexRelationKind.IS_INVOKED_BY: SearchResultKind.INVOCATION
     });
@@ -223,7 +217,7 @@
   Future<List<SearchResult>> _searchReferences_Getter(
       PropertyAccessorElement getter) async {
     List<SearchResult> results = <SearchResult>[];
-    await _addResults(results, getter, {
+    await _addResults(results, getter, const {
       IndexRelationKind.IS_REFERENCED_BY: SearchResultKind.REFERENCE,
       IndexRelationKind.IS_INVOKED_BY: SearchResultKind.INVOCATION
     });
@@ -287,11 +281,13 @@
   Future<List<SearchResult>> _searchReferences_Parameter(
       ParameterElement parameter) async {
     List<SearchResult> results = <SearchResult>[];
-    results.addAll(await _searchReferences(parameter));
     results.addAll(await _searchReferences_Local(parameter, (AstNode node) {
       AstNode parent = node.parent;
       return parent is ClassDeclaration || parent is CompilationUnit;
     }));
+    if (parameter.parameterKind == ParameterKind.NAMED) {
+      results.addAll(await _searchReferences(parameter));
+    }
     return results;
   }
 
@@ -322,11 +318,6 @@
  */
 class SearchResult {
   /**
-   * The element that is used at this result.
-   */
-  final Element element;
-
-  /**
    * The deep most element that contains this result.
    */
   final Element enclosingElement;
@@ -356,8 +347,8 @@
    */
   final bool isQualified;
 
-  SearchResult._(this.element, this.enclosingElement, this.kind, this.offset,
-      this.length, this.isResolved, this.isQualified);
+  SearchResult._(this.enclosingElement, this.kind, this.offset, this.length,
+      this.isResolved, this.isQualified);
 
   @override
   String toString() {
@@ -461,8 +452,8 @@
   void _addResult(int offset, int length) {
     Element enclosingElement =
         _getEnclosingElement(enclosingUnitElement, offset);
-    results.add(new SearchResult._(importElement, enclosingElement,
-        SearchResultKind.REFERENCE, offset, length, true, false));
+    results.add(new SearchResult._(enclosingElement, SearchResultKind.REFERENCE,
+        offset, length, true, false));
   }
 
   void _addResultForPrefix(SimpleIdentifier prefixNode, AstNode nextNode) {
@@ -563,11 +554,15 @@
   /**
    * Return a list of results where an element with the given [elementId] has
    * a relation with the kind from [relationToResultKind].
+   *
+   * The function [getEnclosingUnitElement] is used to lazily compute the
+   * enclosing [CompilationUnitElement] if there is a relation of an
+   * interesting kind.
    */
-  List<SearchResult> getRelations(
+  Future<List<SearchResult>> getRelations(
       int elementId,
       Map<IndexRelationKind, SearchResultKind> relationToResultKind,
-      CompilationUnitElement enclosingUnitElement) {
+      Future<CompilationUnitElement> getEnclosingUnitElement()) async {
     // Find the first usage of the element.
     int i = _findFirstOccurrence(index.usedElements, elementId);
     if (i == -1) {
@@ -575,6 +570,7 @@
     }
     // Create locations for every usage of the element.
     List<SearchResult> results = <SearchResult>[];
+    CompilationUnitElement enclosingUnitElement = null;
     for (;
         i < index.usedElements.length && index.usedElements[i] == elementId;
         i++) {
@@ -582,10 +578,10 @@
       SearchResultKind resultKind = relationToResultKind[relationKind];
       if (resultKind != null) {
         int offset = index.usedElementOffsets[i];
+        enclosingUnitElement ??= await getEnclosingUnitElement();
         Element enclosingElement =
             _getEnclosingElement(enclosingUnitElement, offset);
         results.add(new SearchResult._(
-            null,
             enclosingElement,
             resultKind,
             offset,
@@ -703,7 +699,7 @@
     bool isQualified = node.parent is Label;
     Element enclosingElement =
         _getEnclosingElement(enclosingUnitElement, node.offset);
-    results.add(new SearchResult._(element, enclosingElement, kind, node.offset,
-        node.length, true, isQualified));
+    results.add(new SearchResult._(
+        enclosingElement, kind, node.offset, node.length, true, isQualified));
   }
 }
diff --git a/pkg/analyzer/lib/src/dart/analysis/status.dart b/pkg/analyzer/lib/src/dart/analysis/status.dart
index 000c966..5431023 100644
--- a/pkg/analyzer/lib/src/dart/analysis/status.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/status.dart
@@ -24,6 +24,9 @@
    * Return `true` is the driver is idle.
    */
   bool get isIdle => !_analyzing;
+
+  @override
+  String toString() => _analyzing ? 'analyzing' : 'idle';
 }
 
 /**
diff --git a/pkg/analyzer/lib/src/dart/ast/resolution_map.dart b/pkg/analyzer/lib/src/dart/ast/resolution_map.dart
new file mode 100644
index 0000000..975f97d
--- /dev/null
+++ b/pkg/analyzer/lib/src/dart/ast/resolution_map.dart
@@ -0,0 +1,158 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/resolution_map.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+
+/**
+ * Concrete implementation of [ResolutionMap] based on the standard AST
+ * implementation.
+ */
+class ResolutionMapImpl implements ResolutionMap {
+  @override
+  ExecutableElement bestElementForFunctionExpressionInvocation(
+          FunctionExpressionInvocation node) =>
+      node.bestElement;
+
+  @override
+  Element bestElementForIdentifier(Identifier node) => node.bestElement;
+
+  @override
+  MethodElement bestElementForMethodReference(MethodReferenceExpression node) =>
+      node.bestElement;
+
+  @override
+  ParameterElement bestParameterElementForExpression(Expression node) =>
+      node.bestParameterElement;
+
+  @override
+  DartType bestTypeForExpression(Expression node) => node.bestType;
+
+  @override
+  ElementAnnotation elementAnnotationForAnnotation(Annotation node) =>
+      node.elementAnnotation;
+
+  @override
+  ClassElement elementDeclaredByClassDeclaration(ClassDeclaration node) =>
+      node.element;
+
+  @override
+  CompilationUnitElement elementDeclaredByCompilationUnit(
+          CompilationUnit node) =>
+      node.element;
+
+  @override
+  ConstructorElement elementDeclaredByConstructorDeclaration(
+          ConstructorDeclaration node) =>
+      node.element;
+
+  @override
+  Element elementDeclaredByDeclaration(Declaration node) => node.element;
+
+  @override
+  LocalVariableElement elementDeclaredByDeclaredIdentifier(
+          DeclaredIdentifier node) =>
+      node.element;
+
+  @override
+  Element elementDeclaredByDirective(Directive node) => node.element;
+
+  @override
+  ClassElement elementDeclaredByEnumDeclaration(EnumDeclaration node) =>
+      node.element;
+
+  @override
+  ParameterElement elementDeclaredByFormalParameter(FormalParameter node) =>
+      node.element;
+
+  @override
+  ExecutableElement elementDeclaredByFunctionDeclaration(
+          FunctionDeclaration node) =>
+      node.element;
+
+  @override
+  ExecutableElement elementDeclaredByFunctionExpression(
+          FunctionExpression node) =>
+      node.element;
+
+  @override
+  ExecutableElement elementDeclaredByMethodDeclaration(
+          MethodDeclaration node) =>
+      node.element;
+
+  @override
+  VariableElement elementDeclaredByVariableDeclaration(
+          VariableDeclaration node) =>
+      node.element;
+
+  @override
+  Element elementForAnnotation(Annotation node) => node.element;
+
+  @override
+  ParameterElement elementForNamedExpression(NamedExpression node) =>
+      node.element;
+
+  @override
+  List<ParameterElement> parameterElementsForFormalParameterList(
+          FormalParameterList node) =>
+      node.parameterElements;
+
+  @override
+  ExecutableElement propagatedElementForFunctionExpressionInvocation(
+          FunctionExpressionInvocation node) =>
+      node.propagatedElement;
+
+  @override
+  Element propagatedElementForIdentifier(Identifier node) =>
+      node.propagatedElement;
+
+  @override
+  MethodElement propagatedElementForMethodReference(
+          MethodReferenceExpression node) =>
+      node.propagatedElement;
+
+  @override
+  ParameterElement propagatedParameterElementForExpression(Expression node) =>
+      node.propagatedParameterElement;
+
+  @override
+  DartType propagatedTypeForExpression(Expression node) => node.propagatedType;
+
+  @override
+  ConstructorElement staticElementForConstructorReference(
+          ConstructorReferenceNode node) =>
+      node.staticElement;
+
+  @override
+  ExecutableElement staticElementForFunctionExpressionInvocation(
+          FunctionExpressionInvocation node) =>
+      node.staticElement;
+
+  @override
+  Element staticElementForIdentifier(Identifier node) => node.staticElement;
+
+  @override
+  MethodElement staticElementForMethodReference(
+          MethodReferenceExpression node) =>
+      node.staticElement;
+
+  @override
+  DartType staticInvokeTypeForInvocationExpression(InvocationExpression node) =>
+      node.staticInvokeType;
+
+  @override
+  ParameterElement staticParameterElementForExpression(Expression node) =>
+      node.staticParameterElement;
+
+  @override
+  DartType staticTypeForExpression(Expression node) => node.staticType;
+
+  @override
+  DartType typeForTypeName(TypeName node) => node.type;
+
+  @override
+  Element uriElementForDirective(UriBasedDirective node) => node.uriElement;
+}
diff --git a/pkg/analyzer/lib/src/dart/constant/utilities.dart b/pkg/analyzer/lib/src/dart/constant/utilities.dart
index d9ef263..b097c0e 100644
--- a/pkg/analyzer/lib/src/dart/constant/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/constant/utilities.dart
@@ -7,6 +7,7 @@
 import 'dart:collection';
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
@@ -39,13 +40,6 @@
   ConstantAstCloner() : super(true);
 
   @override
-  ConstructorName visitConstructorName(ConstructorName node) {
-    ConstructorName name = super.visitConstructorName(node);
-    name.staticElement = node.staticElement;
-    return name;
-  }
-
-  @override
   Annotation visitAnnotation(Annotation node) {
     Annotation annotation = super.visitAnnotation(node);
     annotation.element = node.element;
@@ -53,6 +47,13 @@
   }
 
   @override
+  ConstructorName visitConstructorName(ConstructorName node) {
+    ConstructorName name = super.visitConstructorName(node);
+    name.staticElement = node.staticElement;
+    return name;
+  }
+
+  @override
   FunctionExpression visitFunctionExpression(FunctionExpression node) {
     FunctionExpression expression = super.visitFunctionExpression(node);
     expression.element = node.element;
@@ -191,7 +192,10 @@
   @override
   Object visitClassDeclaration(ClassDeclaration node) {
     bool prevTreatFinalInstanceVarAsConst = treatFinalInstanceVarAsConst;
-    if (node.element.constructors.any((ConstructorElement e) => e.isConst)) {
+    if (resolutionMap
+        .elementDeclaredByClassDeclaration(node)
+        .constructors
+        .any((ConstructorElement e) => e.isConst)) {
       // Instance vars marked "final" need to be included in the dependency
       // graph, since constant constructors implicitly use the values in their
       // initializers.
@@ -222,7 +226,8 @@
     super.visitDefaultFormalParameter(node);
     Expression defaultValue = node.defaultValue;
     if (defaultValue != null && node.element != null) {
-      constantsToCompute.add(node.element);
+      constantsToCompute
+          .add(resolutionMap.elementDeclaredByFormalParameter(node));
     }
     return null;
   }
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index cde2f0f..4bfc3e97 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -1213,7 +1213,10 @@
         if (e.kind == UnlinkedExecutableKind.getter) {
           fieldType = accessor.returnType;
         } else {
-          fieldType = accessor.parameters[0].type;
+          List<ParameterElement> parameters = accessor.parameters;
+          fieldType = parameters.isNotEmpty
+              ? parameters[0].type
+              : DynamicTypeImpl.instance;
         }
         // Create or update the implicit field.
         String fieldName = accessor.displayName;
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
index 74d54d7..594ba19 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
@@ -446,7 +446,7 @@
 
   static const ParserErrorCode INVALID_SYNC = const ParserErrorCode(
       'INVALID_SYNC',
-      "The modifier 'sync' isn't allowed for an exrpression function body.",
+      "The modifier 'sync' isn't allowed for an expression function body.",
       "Try converting the body to a block.");
 
   static const ParserErrorCode INVALID_UNICODE_ESCAPE = const ParserErrorCode(
diff --git a/pkg/analyzer/lib/src/dart/resolver/scope.dart b/pkg/analyzer/lib/src/dart/resolver/scope.dart
index 1fc385e..dcbcb04 100644
--- a/pkg/analyzer/lib/src/dart/resolver/scope.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/scope.dart
@@ -663,7 +663,7 @@
    * A table mapping names that are defined in this namespace to the element
    * representing the thing declared with that name.
    */
-  final HashMap<String, Element> _definedNames;
+  final Map<String, Element> _definedNames;
 
   /**
    * Initialize a newly created namespace to have the [_definedNames].
diff --git a/pkg/analyzer/lib/src/dart/sdk/patch.dart b/pkg/analyzer/lib/src/dart/sdk/patch.dart
index 88a122e..acfef23 100644
--- a/pkg/analyzer/lib/src/dart/sdk/patch.dart
+++ b/pkg/analyzer/lib/src/dart/sdk/patch.dart
@@ -63,7 +63,7 @@
       patchPaths = sdkLibrary.getPatches(platform);
     }
 
-    bool strongMode = sdk.analysisOptions.strongMode;
+    bool strongMode = sdk.context.analysisOptions.strongMode;
     Context pathContext = sdk.resourceProvider.pathContext;
     for (String path in patchPaths) {
       String pathInLib = pathContext.joinAll(path.split('/'));
@@ -294,6 +294,13 @@
           _failIfPublicName(patchDeclaration, patchDeclaration.name.name);
           declarationsToAppend.add(patchDeclaration);
         }
+      } else if (patchDeclaration is TopLevelVariableDeclaration &&
+          !_hasPatchAnnotation(patchDeclaration.metadata)) {
+        for (VariableDeclaration variable
+            in patchDeclaration.variables.variables) {
+          _failIfPublicName(patchDeclaration, variable.name.name);
+        }
+        declarationsToAppend.add(patchDeclaration);
       } else {
         _failInPatch('contains an unsupported top-level declaration',
             patchDeclaration.offset);
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index c73de06..41cf63a 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -953,17 +953,6 @@
           "removing the extends clause.");
 
   /**
-   * DEP 37 extends the syntax for assert() to allow a second "message"
-   * argument.  We issue this error if the user tries to supply a "message"
-   * argument but the DEP is not enabled.
-   */
-  static const CompileTimeErrorCode EXTRA_ARGUMENT_TO_ASSERT =
-      const CompileTimeErrorCode(
-          'EXTRA_ARGUMENT_TO_ASSERT',
-          "Assertions only accept a single argument.",
-          "Try removing the message, or enable messages in assert statements.");
-
-  /**
    * 12.14.2 Binding Actuals to Formals: It is a static warning if <i>m &lt;
    * h</i> or if <i>m &gt; n</i>.
    *
diff --git a/pkg/analyzer/lib/src/generated/engine.dart b/pkg/analyzer/lib/src/generated/engine.dart
index 3860533..4df8cb3 100644
--- a/pkg/analyzer/lib/src/generated/engine.dart
+++ b/pkg/analyzer/lib/src/generated/engine.dart
@@ -24,11 +24,14 @@
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/utilities_general.dart';
-import 'package:analyzer/src/plugin/command_line_plugin.dart';
 import 'package:analyzer/src/plugin/engine_plugin.dart';
-import 'package:analyzer/src/plugin/options_plugin.dart';
 import 'package:analyzer/src/services/lint.dart';
+import 'package:analyzer/src/task/dart.dart';
+import 'package:analyzer/src/task/general.dart';
+import 'package:analyzer/src/task/html.dart';
 import 'package:analyzer/src/task/manager.dart';
+import 'package:analyzer/src/task/options.dart';
+import 'package:analyzer/src/task/yaml.dart';
 import 'package:analyzer/task/dart.dart';
 import 'package:analyzer/task/model.dart';
 import 'package:front_end/src/base/timestamped_data.dart';
@@ -757,24 +760,11 @@
   Logger _logger = Logger.NULL;
 
   /**
-   * The plugin that defines the extension points and extensions that are defined by
-   * command-line applications using the analysis engine.
-   */
-  final CommandLinePlugin commandLinePlugin = new CommandLinePlugin();
-
-  /**
    * The plugin that defines the extension points and extensions that are
    * inherently defined by the analysis engine.
    */
   final EnginePlugin enginePlugin = new EnginePlugin();
 
-  /***
-   * The plugin that defines the extension points and extensions that are defined
-   * by applications that want to consume options defined in the analysis
-   * options file.
-   */
-  final OptionsPlugin optionsPlugin = new OptionsPlugin();
-
   /**
    * The instrumentation service that is to be used by this analysis engine.
    */
@@ -837,14 +827,9 @@
    */
   TaskManager get taskManager {
     if (_taskManager == null) {
-      if (enginePlugin.taskExtensionPoint == null) {
-        processRequiredPlugins();
-      }
       _taskManager = new TaskManager();
-      _taskManager.addTaskDescriptors(enginePlugin.taskDescriptors);
-      // TODO(brianwilkerson) Create a way to associate different results with
-      // different file suffixes, then make this pluggable.
-      _taskManager.addGeneralResult(DART_ERRORS);
+      _initializeTaskMap();
+      _initializeResults();
     }
     return _taskManager;
   }
@@ -870,8 +855,91 @@
    * process any other plugins.
    */
   void processRequiredPlugins() {
-    ExtensionManager manager = new ExtensionManager();
-    manager.processPlugins(requiredPlugins);
+    if (enginePlugin.workManagerFactoryExtensionPoint == null) {
+      ExtensionManager manager = new ExtensionManager();
+      manager.processPlugins(requiredPlugins);
+    }
+  }
+
+  void _initializeResults() {
+    _taskManager.addGeneralResult(DART_ERRORS);
+  }
+
+  void _initializeTaskMap() {
+    //
+    // Register general tasks.
+    //
+    _taskManager.addTaskDescriptor(GetContentTask.DESCRIPTOR);
+    //
+    // Register Dart tasks.
+    //
+    _taskManager.addTaskDescriptor(BuildCompilationUnitElementTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(BuildDirectiveElementsTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(BuildEnumMemberElementsTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(BuildExportNamespaceTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(BuildLibraryElementTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(BuildPublicNamespaceTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(BuildSourceExportClosureTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(BuildTypeProviderTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ComputeConstantDependenciesTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ComputeConstantValueTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(
+        ComputeInferableStaticVariableDependenciesTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ComputeLibraryCycleTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ComputeRequiredConstantsTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ContainingLibrariesTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(DartErrorsTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(EvaluateUnitConstantsTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(GatherUsedImportedElementsTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(GatherUsedLocalElementsTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(GenerateHintsTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(GenerateLintsTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(InferInstanceMembersInUnitTask.DESCRIPTOR);
+    _taskManager
+        .addTaskDescriptor(InferStaticVariableTypesInUnitTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(InferStaticVariableTypeTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(LibraryErrorsReadyTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(LibraryUnitErrorsTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ParseDartTask.DESCRIPTOR);
+    _taskManager
+        .addTaskDescriptor(PartiallyResolveUnitReferencesTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ReadyLibraryElement2Task.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ReadyLibraryElement5Task.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ReadyLibraryElement7Task.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ReadyResolvedUnitTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ResolveConstantExpressionTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ResolveDirectiveElementsTask.DESCRIPTOR);
+    _taskManager
+        .addTaskDescriptor(ResolvedUnit7InLibraryClosureTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ResolvedUnit7InLibraryTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ResolveInstanceFieldsInUnitTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ResolveLibraryReferencesTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ResolveLibraryTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ResolveLibraryTypeNamesTask.DESCRIPTOR);
+    _taskManager
+        .addTaskDescriptor(ResolveTopLevelLibraryTypeBoundsTask.DESCRIPTOR);
+    _taskManager
+        .addTaskDescriptor(ResolveTopLevelUnitTypeBoundsTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ResolveUnitTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ResolveUnitTypeNamesTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ResolveVariableReferencesTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ScanDartTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(StrongModeVerifyUnitTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(VerifyUnitTask.DESCRIPTOR);
+    //
+    // Register HTML tasks.
+    //
+    _taskManager.addTaskDescriptor(DartScriptsTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(HtmlErrorsTask.DESCRIPTOR);
+    _taskManager.addTaskDescriptor(ParseHtmlTask.DESCRIPTOR);
+    //
+    // Register YAML tasks.
+    //
+    _taskManager.addTaskDescriptor(ParseYamlTask.DESCRIPTOR);
+    //
+    // Register analysis option file tasks.
+    //
+    _taskManager.addTaskDescriptor(GenerateOptionsErrorsTask.DESCRIPTOR);
   }
 
   /**
@@ -1105,6 +1173,7 @@
   /**
    * Return `true` to enable custom assert messages (DEP 37).
    */
+  @deprecated
   bool get enableAssertMessage;
 
   /**
@@ -1303,12 +1372,11 @@
   @deprecated
   static const int DEFAULT_CACHE_SIZE = 64;
 
-  static const int ENABLE_ASSERT_FLAG = 0x01;
-  static const int ENABLE_LAZY_ASSIGNMENT_OPERATORS = 0x02;
-  static const int ENABLE_STRICT_CALL_CHECKS_FLAG = 0x04;
-  static const int ENABLE_STRONG_MODE_FLAG = 0x08;
-  static const int ENABLE_STRONG_MODE_HINTS_FLAG = 0x10;
-  static const int ENABLE_SUPER_MIXINS_FLAG = 0x20;
+  static const int ENABLE_LAZY_ASSIGNMENT_OPERATORS = 0x01;
+  static const int ENABLE_STRICT_CALL_CHECKS_FLAG = 0x02;
+  static const int ENABLE_STRONG_MODE_FLAG = 0x04;
+  static const int ENABLE_STRONG_MODE_HINTS_FLAG = 0x08;
+  static const int ENABLE_SUPER_MIXINS_FLAG = 0x10;
 
   /**
    * The default list of non-nullable type names.
@@ -1333,9 +1401,6 @@
   bool enableAssertInitializer = false;
 
   @override
-  bool enableAssertMessage = false;
-
-  @override
   bool enableLazyAssignmentOperators = false;
 
   @override
@@ -1454,7 +1519,6 @@
     analyzeFunctionBodiesPredicate = options.analyzeFunctionBodiesPredicate;
     dart2jsHint = options.dart2jsHint;
     enableAssertInitializer = options.enableAssertInitializer;
-    enableAssertMessage = options.enableAssertMessage;
     enableStrictCallChecks = options.enableStrictCallChecks;
     enableLazyAssignmentOperators = options.enableLazyAssignmentOperators;
     enableSuperMixins = options.enableSuperMixins;
@@ -1513,6 +1577,13 @@
     _analyzeFunctionBodiesPredicate = value;
   }
 
+  @override
+  @deprecated
+  bool get enableAssertMessage => true;
+
+  @deprecated
+  void set enableAssertMessage(bool enable) {}
+
   @deprecated
   @override
   bool get enableAsync => true;
@@ -1578,12 +1649,12 @@
 
   @override
   List<int> encodeCrossContextOptions() {
-    int flags = (enableAssertMessage ? ENABLE_ASSERT_FLAG : 0) |
+    int flags =
         (enableLazyAssignmentOperators ? ENABLE_LAZY_ASSIGNMENT_OPERATORS : 0) |
-        (enableStrictCallChecks ? ENABLE_STRICT_CALL_CHECKS_FLAG : 0) |
-        (enableSuperMixins ? ENABLE_SUPER_MIXINS_FLAG : 0) |
-        (strongMode ? ENABLE_STRONG_MODE_FLAG : 0) |
-        (strongModeHints ? ENABLE_STRONG_MODE_HINTS_FLAG : 0);
+            (enableStrictCallChecks ? ENABLE_STRICT_CALL_CHECKS_FLAG : 0) |
+            (enableSuperMixins ? ENABLE_SUPER_MIXINS_FLAG : 0) |
+            (strongMode ? ENABLE_STRONG_MODE_FLAG : 0) |
+            (strongModeHints ? ENABLE_STRONG_MODE_HINTS_FLAG : 0);
     return <int>[flags, patchPlatform];
   }
 
@@ -1592,7 +1663,6 @@
     dart2jsHint = false;
     disableCacheFlushing = false;
     enableAssertInitializer = false;
-    enableAssertMessage = false;
     enableLazyAssignmentOperators = false;
     enableStrictCallChecks = false;
     enableSuperMixins = false;
@@ -1621,7 +1691,6 @@
 
   @override
   void setCrossContextOptionsFrom(AnalysisOptions options) {
-    enableAssertMessage = options.enableAssertMessage;
     enableLazyAssignmentOperators = options.enableLazyAssignmentOperators;
     enableStrictCallChecks = options.enableStrictCallChecks;
     enableSuperMixins = options.enableSuperMixins;
@@ -1640,9 +1709,6 @@
   static String decodeCrossContextOptions(List<int> encoding) {
     List<String> parts = [];
     int flags = encoding[0];
-    if (flags & ENABLE_ASSERT_FLAG > 0) {
-      parts.add('assert');
-    }
     if (flags & ENABLE_LAZY_ASSIGNMENT_OPERATORS > 0) {
       parts.add('lazyAssignmentOperators');
     }
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 0d6ecf8..47c4009 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -8,6 +8,7 @@
 import "dart:math" as math;
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -296,21 +297,10 @@
   final bool enableSuperMixins;
 
   /**
-   * If `true`, asserts are allowed to take a second argument representing the
-   * assertion failure message (see DEP 37).
-   */
-  final bool enableAssertMessage;
-
-  /**
    * Initialize a newly created error verifier.
    */
-  ErrorVerifier(
-      this._errorReporter,
-      this._currentLibrary,
-      this._typeProvider,
-      this._inheritanceManager,
-      this.enableSuperMixins,
-      this.enableAssertMessage) {
+  ErrorVerifier(this._errorReporter, this._currentLibrary, this._typeProvider,
+      this._inheritanceManager, this.enableSuperMixins) {
     this._isInSystemLibrary = _currentLibrary.source.isInSystemLibrary;
     this._hasExtUri = _currentLibrary.hasExtUri;
     _isEnclosingConstructorConst = false;
@@ -349,14 +339,12 @@
   @override
   Object visitAssertInitializer(AssertInitializer node) {
     _checkForNonBoolExpression(node);
-    _checkAssertMessage(node);
     return super.visitAssertInitializer(node);
   }
 
   @override
   Object visitAssertStatement(AssertStatement node) {
     _checkForNonBoolExpression(node);
-    _checkAssertMessage(node);
     return super.visitAssertStatement(node);
   }
 
@@ -857,7 +845,8 @@
       // we can get the function element via `node?.element?.type?.element` but
       // it doesn't have hasImplicitReturnType set correctly.
       if (!_options.implicitDynamic && node.returnType == null) {
-        DartType parameterType = node.element.type;
+        DartType parameterType =
+            resolutionMap.elementDeclaredByFormalParameter(node).type;
         if (parameterType is FunctionType &&
             parameterType.returnType.isDynamic) {
           _errorReporter.reportErrorForNode(
@@ -1302,18 +1291,6 @@
   }
 
   /**
-   * If the given [assertion] specifies a message, verify that support
-   * for assertions with messages is enabled.
-   */
-  void _checkAssertMessage(Assertion assertion) {
-    Expression expression = assertion.message;
-    if (expression != null && !enableAssertMessage) {
-      _errorReporter.reportErrorForNode(
-          CompileTimeErrorCode.EXTRA_ARGUMENT_TO_ASSERT, expression);
-    }
-  }
-
-  /**
    * Given a list of [directives] that have the same prefix, generate an error
    * if there is more than one import and any of those imports is deferred.
    *
@@ -2238,7 +2215,8 @@
     DartType redirectedReturnType = redirectedType.returnType;
 
     // Report specific problem when return type is incompatible
-    FunctionType constructorType = declaration.element.type;
+    FunctionType constructorType =
+        resolutionMap.elementDeclaredByConstructorDeclaration(declaration).type;
     DartType constructorReturnType = constructorType.returnType;
     if (!_typeSystem.isAssignableTo(
         redirectedReturnType, constructorReturnType)) {
@@ -2892,8 +2870,9 @@
           Element enclosingElementOfSetter = null;
           ClassMember conflictingSetter = memberHashMap[setterName];
           if (conflictingSetter != null) {
-            enclosingElementOfSetter =
-                conflictingSetter.element.enclosingElement;
+            enclosingElementOfSetter = resolutionMap
+                .elementDeclaredByDeclaration(conflictingSetter)
+                .enclosingElement;
           } else {
             ExecutableElement elementFromInheritance = _inheritanceManager
                 .lookupInheritance(_enclosingClass, setterName);
@@ -4733,7 +4712,7 @@
   }
 
   void _checkForMissingJSLibAnnotation(Annotation node) {
-    if (node.elementAnnotation?.isJS ?? false) {
+    if (resolutionMap.elementAnnotationForAnnotation(node)?.isJS ?? false) {
       if (_currentLibrary.isJS != true) {
         _errorReporter.reportErrorForNode(
             HintCode.MISSING_JS_LIB_ANNOTATION, node);
@@ -6898,7 +6877,9 @@
     DartType type = node.constructorName.type.type;
     if (type is InterfaceType) {
       _checkForMissingRequiredParam(
-          node.staticElement?.type, node.argumentList, node.constructorName);
+          resolutionMap.staticElementForConstructorReference(node)?.type,
+          node.argumentList,
+          node.constructorName);
     }
     return super.visitInstanceCreationExpression(node);
   }
@@ -6913,7 +6894,8 @@
   @override
   Object visitRedirectingConstructorInvocation(
       RedirectingConstructorInvocation node) {
-    DartType type = node.staticElement?.type;
+    DartType type =
+        resolutionMap.staticElementForConstructorReference(node)?.type;
     if (type != null) {
       _checkForMissingRequiredParam(type, node.argumentList, node);
     }
@@ -6922,7 +6904,8 @@
 
   @override
   Object visitSuperConstructorInvocation(SuperConstructorInvocation node) {
-    DartType type = node.staticElement?.type;
+    DartType type =
+        resolutionMap.staticElementForConstructorReference(node)?.type;
     if (type != null) {
       _checkForMissingRequiredParam(type, node.argumentList, node);
     }
diff --git a/pkg/analyzer/lib/src/generated/incremental_resolver.dart b/pkg/analyzer/lib/src/generated/incremental_resolver.dart
index 1787b4a..b26d939 100644
--- a/pkg/analyzer/lib/src/generated/incremental_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/incremental_resolver.dart
@@ -482,8 +482,7 @@
           _definingLibrary,
           _typeProvider,
           new InheritanceManager(_definingLibrary),
-          _context.analysisOptions.enableSuperMixins,
-          _context.analysisOptions.enableAssertMessage);
+          _context.analysisOptions.enableSuperMixins);
       if (_resolutionContext.enclosingClassDeclaration != null) {
         errorVerifier.visitClassDeclarationIncrementally(
             _resolutionContext.enclosingClassDeclaration);
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index df3ad03..4aac847 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -7,6 +7,7 @@
 import 'dart:collection';
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -105,7 +106,7 @@
 
   @override
   Object visitAnnotation(Annotation node) {
-    if (node.elementAnnotation?.isFactory == true) {
+    if (resolutionMap.elementAnnotationForAnnotation(node)?.isFactory == true) {
       AstNode parent = node.parent;
       if (parent is MethodDeclaration) {
         _checkForInvalidFactory(parent);
@@ -193,7 +194,7 @@
 
   @override
   Object visitConstructorDeclaration(ConstructorDeclaration node) {
-    if (node.element.isFactory) {
+    if (resolutionMap.elementDeclaredByConstructorDeclaration(node).isFactory) {
       if (node.body is BlockFunctionBody) {
         // Check the block for a return statement, if not, create the hint.
         if (!ExitDetector.exits(node.body)) {
@@ -648,7 +649,7 @@
           node is MethodInvocation &&
           node.staticInvokeType is InterfaceType) {
         displayName =
-            "${node.staticInvokeType.displayName}.${element.displayName}";
+            "${resolutionMap.staticInvokeTypeForInvocationExpression(node).displayName}.${element.displayName}";
       }
       _errorReporter.reportErrorForNode(
           HintCode.DEPRECATED_MEMBER_USE, node, [displayName]);
@@ -2287,7 +2288,8 @@
 
   @override
   void visitCompilationUnit(CompilationUnit node) {
-    _enclosingLibrary = node.element.library;
+    _enclosingLibrary =
+        resolutionMap.elementDeclaredByCompilationUnit(node).library;
     for (Directive directive in node.directives) {
       directive.accept(this);
     }
@@ -3594,7 +3596,9 @@
   GatherUsedLocalElementsVisitor _usedLocalElementsVisitor;
 
   HintGenerator(this._compilationUnits, this._context, this._errorListener) {
-    _library = _compilationUnits[0].element.library;
+    _library = resolutionMap
+        .elementDeclaredByCompilationUnit(_compilationUnits[0])
+        .library;
     _usedImportedElementsVisitor =
         new GatherUsedImportedElementsVisitor(_library);
     _enableDart2JSHints = _context.analysisOptions.dart2jsHint;
@@ -3614,8 +3618,9 @@
         }
       }
       CompilationUnit definingUnit = _compilationUnits[0];
-      ErrorReporter definingUnitErrorReporter =
-          new ErrorReporter(_errorListener, definingUnit.element.source);
+      ErrorReporter definingUnitErrorReporter = new ErrorReporter(
+          _errorListener,
+          resolutionMap.elementDeclaredByCompilationUnit(definingUnit).source);
       {
         ImportsVerifier importsVerifier = new ImportsVerifier();
         importsVerifier.addImports(definingUnit);
@@ -5788,7 +5793,8 @@
 
   @override
   Object visitDefaultFormalParameter(DefaultFormalParameter node) {
-    InferenceContext.setType(node.defaultValue, node.parameter.element?.type);
+    InferenceContext.setType(node.defaultValue,
+        resolutionMap.elementDeclaredByFormalParameter(node.parameter)?.type);
     super.visitDefaultFormalParameter(node);
     ParameterElement element = node.element;
     if (element.initializer != null && node.defaultValue != null) {
@@ -5907,7 +5913,9 @@
           ? typeProvider.iterableType
           : typeProvider.streamType;
       InferenceContext.setType(
-          iterable, targetType.instantiate([loopVariable.type.type]));
+          iterable,
+          targetType
+              .instantiate([resolutionMap.typeForTypeName(loopVariable.type)]));
     }
     iterable?.accept(this);
     loopVariable?.accept(this);
@@ -6017,7 +6025,9 @@
             _inferFormalParameterList(node.parameters, functionType);
 
             DartType returnType;
-            if (isFutureThen(node.staticParameterElement?.enclosingElement)) {
+            ParameterElement parameterElement =
+                resolutionMap.staticParameterElementForExpression(node);
+            if (isFutureThen(parameterElement?.enclosingElement)) {
               var futureThenType =
                   InferenceContext.getContext(node.parent) as FunctionType;
 
@@ -6178,7 +6188,8 @@
           List<DartType> targs =
               inferenceContext.matchTypes(classTypeName.type, contextType);
           if (targs != null && targs.any((t) => !t.isDynamic)) {
-            ClassElement classElement = classTypeName.type.element;
+            ClassElement classElement =
+                resolutionMap.typeForTypeName(classTypeName).element;
             InterfaceType rawType = classElement.type;
             InterfaceType fullType =
                 rawType.substitute2(targs, rawType.typeArguments);
@@ -6191,7 +6202,9 @@
       }
     }
     node.constructorName?.accept(this);
-    FunctionType constructorType = node.constructorName.staticElement?.type;
+    FunctionType constructorType = resolutionMap
+        .staticElementForConstructorReference(node.constructorName)
+        ?.type;
     if (constructorType != null) {
       InferenceContext.setType(node.argumentList, constructorType);
     }
@@ -6350,7 +6363,8 @@
     // because it needs to be visited in the context of the constructor
     // invocation.
     //
-    InferenceContext.setType(node.argumentList, node.staticElement?.type);
+    InferenceContext.setType(node.argumentList,
+        resolutionMap.staticElementForConstructorReference(node)?.type);
     node.argumentList?.accept(this);
     node.accept(elementResolver);
     node.accept(typeAnalyzer);
@@ -6384,7 +6398,8 @@
     // because it needs to be visited in the context of the constructor
     // invocation.
     //
-    InferenceContext.setType(node.argumentList, node.staticElement?.type);
+    InferenceContext.setType(node.argumentList,
+        resolutionMap.staticElementForConstructorReference(node)?.type);
     node.argumentList?.accept(this);
     node.accept(elementResolver);
     node.accept(typeAnalyzer);
@@ -6457,7 +6472,9 @@
   @override
   visitVariableDeclarationList(VariableDeclarationList node) {
     for (VariableDeclaration decl in node.variables) {
-      InferenceContext.setType(decl, decl.element?.type);
+      VariableElement variableElement =
+          resolutionMap.elementDeclaredByVariableDeclaration(decl);
+      InferenceContext.setType(decl, variableElement?.type);
     }
     super.visitVariableDeclarationList(node);
   }
@@ -6744,7 +6761,8 @@
     FunctionType expectedClosureType = mayByFunctionType as FunctionType;
     // If the expectedClosureType is not more specific than the static type,
     // return.
-    DartType staticClosureType = closure.element?.type;
+    DartType staticClosureType =
+        resolutionMap.elementDeclaredByFunctionExpression(closure)?.type;
     if (staticClosureType != null &&
         !FunctionTypeImpl.relate(
             expectedClosureType,
@@ -9803,9 +9821,10 @@
         variable.declaredType = element.returnType;
       } else if (variable.type == null) {
         List<ParameterElement> parameters = element.parameters;
-        if (parameters != null && parameters.length > 0) {
-          variable.declaredType = parameters[0].type;
-        }
+        DartType type = parameters != null && parameters.length > 0
+            ? parameters[0].type
+            : _dynamicType;
+        variable.declaredType = type;
       }
     }
 
diff --git a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
index 53745d2..3367b16 100644
--- a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
+++ b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
@@ -7,6 +7,7 @@
 import 'dart:collection';
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -2120,8 +2121,8 @@
       VariableDeclaration node, Expression initializer) {
     if (initializer != null &&
         (node.parent as VariableDeclarationList).type == null &&
-        (initializer.staticType != null) &&
-        (!initializer.staticType.isBottom)) {
+        (resolutionMap.staticTypeForExpression(initializer) != null) &&
+        (!resolutionMap.staticTypeForExpression(initializer).isBottom)) {
       VariableElement element = node.element;
       if (element is LocalVariableElementImpl) {
         element.type = initializer.staticType;
diff --git a/pkg/analyzer/lib/src/lint/analysis.dart b/pkg/analyzer/lib/src/lint/analysis.dart
new file mode 100644
index 0000000..5949fd8
--- /dev/null
+++ b/pkg/analyzer/lib/src/lint/analysis.dart
@@ -0,0 +1,260 @@
+// Copyright (c) 2015, 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:collection';
+import 'dart:io' as io;
+
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/file_system/file_system.dart'
+    show File, Folder, ResourceProvider, ResourceUriResolver;
+import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer/source/package_map_resolver.dart';
+import 'package:analyzer/src/context/builder.dart';
+import 'package:analyzer/src/dart/sdk/sdk.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/sdk.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/generated/source_io.dart';
+import 'package:analyzer/src/lint/io.dart';
+import 'package:analyzer/src/lint/linter.dart';
+import 'package:analyzer/src/lint/project.dart';
+import 'package:analyzer/src/lint/registry.dart';
+import 'package:analyzer/src/services/lint.dart';
+import 'package:cli_util/cli_util.dart' as cli_util;
+import 'package:package_config/packages.dart' show Packages;
+import 'package:package_config/packages_file.dart' as pkgfile show parse;
+import 'package:package_config/src/packages_impl.dart' show MapPackages;
+import 'package:path/path.dart' as p;
+import 'package:plugin/manager.dart';
+import 'package:plugin/plugin.dart';
+
+Source createSource(Uri sourceUri) {
+  return PhysicalResourceProvider.INSTANCE
+      .getFile(sourceUri.toFilePath())
+      .createSource(sourceUri);
+}
+
+/// Print the given message and exit with the given [exitCode]
+void printAndFail(String message, {int exitCode: 15}) {
+  print(message);
+  io.exit(exitCode);
+}
+
+AnalysisOptions _buildAnalyzerOptions(DriverOptions options) {
+  AnalysisOptionsImpl analysisOptions = new AnalysisOptionsImpl();
+  analysisOptions.strongMode = options.strongMode;
+  analysisOptions.hint = false;
+  analysisOptions.lint = options.enableLints;
+  analysisOptions.generateSdkErrors = options.showSdkWarnings;
+  analysisOptions.enableTiming = options.enableTiming;
+  return analysisOptions;
+}
+
+class AnalysisDriver {
+  /// The sources which have been analyzed so far.  This is used to avoid
+  /// analyzing a source more than once, and to compute the total number of
+  /// sources analyzed for statistics.
+  Set<Source> _sourcesAnalyzed = new HashSet<Source>();
+
+  final LinterOptions options;
+
+  AnalysisDriver(this.options) {
+    _processPlugins();
+  }
+
+  /// Return the number of sources that have been analyzed so far.
+  int get numSourcesAnalyzed => _sourcesAnalyzed.length;
+
+  List<UriResolver> get resolvers {
+    // TODO(brianwilkerson) Use the context builder to compute all of the resolvers.
+    ResourceProvider resourceProvider = PhysicalResourceProvider.INSTANCE;
+    ContextBuilder builder = new ContextBuilder(resourceProvider, null, null);
+
+    DartSdk sdk = options.mockSdk ??
+        new FolderBasedDartSdk(
+            resourceProvider, resourceProvider.getFolder(sdkDir));
+
+    List<UriResolver> resolvers = [new DartUriResolver(sdk)];
+
+    if (options.packageRootPath != null) {
+      // TODO(brianwilkerson) After 0.30.0 is published, clean up the following.
+      try {
+        // Try to use the post 0.30.0 API.
+        (builder as dynamic).builderOptions.defaultPackagesDirectoryPath =
+            options.packageRootPath;
+      } catch (_) {
+        // If that fails, fall back to the pre 0.30.0 API.
+        (builder as dynamic).defaultPackagesDirectoryPath =
+            options.packageRootPath;
+      }
+      Map<String, List<Folder>> packageMap =
+          builder.convertPackagesToMap(builder.createPackageMap(null));
+      resolvers.add(new PackageMapUriResolver(resourceProvider, packageMap));
+    }
+
+    // File URI resolver must come last so that files inside "/lib" are
+    // are analyzed via "package:" URI's.
+    resolvers.add(new ResourceUriResolver(resourceProvider));
+    return resolvers;
+  }
+
+  String get sdkDir {
+    if (options.dartSdkPath != null) {
+      return options.dartSdkPath;
+    }
+    // In case no SDK has been specified, fall back to inferring it
+    // TODO: pass args to cli_util
+    return cli_util.getSdkDir().path;
+  }
+
+  List<AnalysisErrorInfo> analyze(Iterable<io.File> files) {
+    AnalysisContext context = AnalysisEngine.instance.createAnalysisContext();
+    context.analysisOptions = _buildAnalyzerOptions(options);
+    registerLinters(context);
+
+    Packages packages = _getPackageConfig();
+
+    context.sourceFactory = new SourceFactory(resolvers, packages);
+    AnalysisEngine.instance.logger = new StdLogger();
+
+    List<Source> sources = [];
+    ChangeSet changeSet = new ChangeSet();
+    for (io.File file in files) {
+      File sourceFile = PhysicalResourceProvider.INSTANCE
+          .getFile(p.normalize(file.absolute.path));
+      Source source = sourceFile.createSource();
+      Uri uri = context.sourceFactory.restoreUri(source);
+      if (uri != null) {
+        // Ensure that we analyze the file using its canonical URI (e.g. if
+        // it's in "/lib", analyze it using a "package:" URI).
+        source = sourceFile.createSource(uri);
+      }
+      sources.add(source);
+      changeSet.addedSource(source);
+    }
+    context.applyChanges(changeSet);
+
+    // Temporary location
+    var project = new DartProject(context, sources);
+    // This will get pushed into the generator (or somewhere comparable) when
+    // we have a proper plugin.
+    Registry.ruleRegistry.forEach((lint) {
+      if (lint is ProjectVisitor) {
+        (lint as ProjectVisitor).visit(project);
+      }
+    });
+
+    List<AnalysisErrorInfo> errors = [];
+
+    for (Source source in sources) {
+      context.computeErrors(source);
+      errors.add(context.getErrors(source));
+      _sourcesAnalyzed.add(source);
+    }
+
+    if (options.visitTransitiveClosure) {
+      // In the process of computing errors for all the sources in [sources],
+      // the analyzer has visited the transitive closure of all libraries
+      // referenced by those sources.  So now we simply need to visit all
+      // library sources known to the analysis context, and all parts they
+      // refer to.
+      for (Source librarySource in context.librarySources) {
+        for (Source source in _getAllUnitSources(context, librarySource)) {
+          if (!_sourcesAnalyzed.contains(source)) {
+            context.computeErrors(source);
+            errors.add(context.getErrors(source));
+            _sourcesAnalyzed.add(source);
+          }
+        }
+      }
+    }
+
+    return errors;
+  }
+
+  void registerLinters(AnalysisContext context) {
+    if (options.enableLints) {
+      setLints(context, options.enabledLints?.toList(growable: false));
+    }
+  }
+
+  /// Yield the sources for all the compilation units constituting
+  /// [librarySource] (including the defining compilation unit).
+  Iterable<Source> _getAllUnitSources(
+      AnalysisContext context, Source librarySource) {
+    List<Source> result = <Source>[librarySource];
+    result.addAll(context
+        .getLibraryElement(librarySource)
+        .parts
+        .map((CompilationUnitElement e) => e.source));
+    return result;
+  }
+
+  Packages _getPackageConfig() {
+    if (options.packageConfigPath != null) {
+      String packageConfigPath = options.packageConfigPath;
+      Uri fileUri = new Uri.file(packageConfigPath);
+      try {
+        io.File configFile = new io.File.fromUri(fileUri).absolute;
+        List<int> bytes = configFile.readAsBytesSync();
+        Map<String, Uri> map = pkgfile.parse(bytes, configFile.uri);
+        return new MapPackages(map);
+      } catch (e) {
+        printAndFail(
+            'Unable to read package config data from $packageConfigPath: $e');
+      }
+    }
+    return null;
+  }
+
+  void _processPlugins() {
+    List<Plugin> plugins = <Plugin>[];
+    plugins.addAll(AnalysisEngine.instance.requiredPlugins);
+    ExtensionManager manager = new ExtensionManager();
+    manager.processPlugins(plugins);
+  }
+}
+
+class DriverOptions {
+  /// The maximum number of sources for which AST structures should be kept
+  /// in the cache.  The default is 512.
+  int cacheSize = 512;
+
+  /// The path to the dart SDK.
+  String dartSdkPath;
+
+  /// Whether to show lint warnings.
+  bool enableLints = true;
+
+  /// Whether to gather timing data during analysis.
+  bool enableTiming = false;
+
+  /// The path to a `.packages` configuration file
+  String packageConfigPath;
+
+  /// The path to the package root.
+  String packageRootPath;
+
+  /// Whether to show SDK warnings.
+  bool showSdkWarnings = false;
+
+  /// Whether to use Dart's Strong Mode analyzer.
+  bool strongMode = true;
+
+  /// The mock SDK (to speed up testing) or `null` to use the actual SDK.
+  DartSdk mockSdk;
+
+  /// Whether to show lints for the transitive closure of imported and exported
+  /// libraries.
+  bool visitTransitiveClosure = false;
+}
+
+/// Prints logging information comments to the [outSink] and error messages to
+/// [errorSink].
+class StdLogger extends Logger {
+  @override
+  void logError(String message, [exception]) => errorSink.writeln(message);
+  @override
+  void logInformation(String message, [exception]) => outSink.writeln(message);
+}
diff --git a/pkg/analyzer/lib/src/lint/config.dart b/pkg/analyzer/lib/src/lint/config.dart
new file mode 100644
index 0000000..f33b3f3
--- /dev/null
+++ b/pkg/analyzer/lib/src/lint/config.dart
@@ -0,0 +1,243 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:yaml/yaml.dart';
+
+/**
+ * Parse the given map into a lint config.
+ */
+LintConfig parseConfig(Map optionsMap) {
+  if (optionsMap != null) {
+    var options = optionsMap['linter'];
+    // Quick check of basic contract.
+    if (options is Map) {
+      return new LintConfig.parseMap(options);
+    }
+  }
+  return null;
+}
+
+/**
+ * Process the given option [fileContents] and produce a corresponding
+ * [LintConfig].
+ */
+LintConfig processAnalysisOptionsFile(String fileContents, {String fileUrl}) {
+  var yaml = loadYamlNode(fileContents, sourceUrl: fileUrl);
+  if (yaml is YamlMap) {
+    return parseConfig(yaml);
+  }
+  return null;
+}
+
+/**
+ * The configuration of lint rules within an analysis options file.
+ */
+abstract class LintConfig {
+  factory LintConfig.parse(String source, {String sourceUrl}) =>
+      new _LintConfig().._parse(source, sourceUrl: sourceUrl);
+
+  factory LintConfig.parseMap(Map map) => new _LintConfig().._parseMap(map);
+
+  List<String> get fileExcludes;
+  List<String> get fileIncludes;
+  List<RuleConfig> get ruleConfigs;
+}
+
+/**
+ * The configuration of a single lint rule within an analysis options file.
+ */
+abstract class RuleConfig {
+  Map<String, dynamic> args = <String, dynamic>{};
+  String get group;
+  String get name;
+
+  // Provisional
+  bool disables(String ruleName) =>
+      ruleName == name && args['enabled'] == false;
+
+  bool enables(String ruleName) => ruleName == name && args['enabled'] == true;
+}
+
+class _LintConfig implements LintConfig {
+  @override
+  final fileIncludes = <String>[];
+  @override
+  final fileExcludes = <String>[];
+  @override
+  final ruleConfigs = <RuleConfig>[];
+
+  void addAsListOrString(value, List<String> list) {
+    if (value is List) {
+      value.forEach((v) => list.add(v));
+    } else if (value is String) {
+      list.add(value);
+    }
+  }
+
+  bool asBool(scalar) {
+    if (scalar is bool) {
+      return scalar;
+    }
+    if (scalar is String) {
+      if (scalar == 'true') {
+        return true;
+      }
+      if (scalar == 'false') {
+        return false;
+      }
+    }
+    return null;
+  }
+
+  String asString(scalar) {
+    if (scalar is String) {
+      return scalar;
+    }
+    return null;
+  }
+
+  Map<String, dynamic> parseArgs(args) {
+    bool enabled = asBool(args);
+    if (enabled != null) {
+      return {'enabled': enabled};
+    }
+    return null;
+  }
+
+  void _parse(String src, {String sourceUrl}) {
+    var yaml = loadYamlNode(src, sourceUrl: sourceUrl);
+    if (yaml is YamlMap) {
+      _parseYaml(yaml);
+    }
+  }
+
+  void _parseMap(Map options) {
+    //TODO(pq): unify map parsing.
+    if (options is YamlMap) {
+      _parseYaml(options);
+    } else {
+      _parseRawMap(options);
+    }
+  }
+
+  void _parseRawMap(Map options) {
+    options.forEach((k, v) {
+      if (k is! String) {
+        return;
+      }
+      String key = k;
+      switch (key) {
+        case 'files':
+          if (v is Map) {
+            addAsListOrString(v['include'], fileIncludes);
+            addAsListOrString(v['exclude'], fileExcludes);
+          }
+          break;
+
+        case 'rules':
+          // - unnecessary_getters
+          // - camel_case_types
+          if (v is List) {
+            v.forEach((rule) {
+              var config = new _RuleConfig();
+              config.name = asString(rule);
+              config.args = {'enabled': true};
+              ruleConfigs.add(config);
+            });
+          }
+
+          // {unnecessary_getters: false, camel_case_types: true}
+          if (v is Map) {
+            v.forEach((key, value) {
+              // style_guide: {unnecessary_getters: false, camel_case_types: true}
+              if (value is Map) {
+                value.forEach((rule, args) {
+                  // unnecessary_getters: false
+                  var config = new _RuleConfig();
+                  config.group = key;
+                  config.name = asString(rule);
+                  config.args = parseArgs(args);
+                  ruleConfigs.add(config);
+                });
+              } else {
+                //{unnecessary_getters: false}
+                value = asBool(value);
+                if (value != null) {
+                  var config = new _RuleConfig();
+                  config.name = asString(key);
+                  config.args = {'enabled': value};
+                  ruleConfigs.add(config);
+                }
+              }
+            });
+          }
+          break;
+      }
+    });
+  }
+
+  void _parseYaml(YamlMap yaml) {
+    yaml.nodes.forEach((k, v) {
+      if (k is! YamlScalar) {
+        return;
+      }
+      YamlScalar key = k;
+      switch (key.toString()) {
+        case 'files':
+          if (v is YamlMap) {
+            addAsListOrString(v['include'], fileIncludes);
+            addAsListOrString(v['exclude'], fileExcludes);
+          }
+          break;
+
+        case 'rules':
+
+          // - unnecessary_getters
+          // - camel_case_types
+          if (v is List) {
+            (v as List).forEach((rule) {
+              var config = new _RuleConfig();
+              config.name = asString(rule);
+              config.args = {'enabled': true};
+              ruleConfigs.add(config);
+            });
+          }
+
+          // style_guide: {unnecessary_getters: false, camel_case_types: true}
+          if (v is YamlMap) {
+            v.forEach((key, value) {
+              //{unnecessary_getters: false}
+              if (value is bool) {
+                var config = new _RuleConfig();
+                config.name = asString(key);
+                config.args = {'enabled': value};
+                ruleConfigs.add(config);
+              }
+
+              // style_guide: {unnecessary_getters: false, camel_case_types: true}
+              if (value is YamlMap) {
+                value.forEach((rule, args) {
+                  // TODO: verify format
+                  // unnecessary_getters: false
+                  var config = new _RuleConfig();
+                  config.group = key;
+                  config.name = asString(rule);
+                  config.args = parseArgs(args);
+                  ruleConfigs.add(config);
+                });
+              }
+            });
+          }
+          break;
+      }
+    });
+  }
+}
+
+class _RuleConfig extends RuleConfig {
+  @override
+  String group;
+  @override
+  String name;
+}
diff --git a/pkg/analyzer/lib/src/lint/io.dart b/pkg/analyzer/lib/src/lint/io.dart
new file mode 100644
index 0000000..762ee93
--- /dev/null
+++ b/pkg/analyzer/lib/src/lint/io.dart
@@ -0,0 +1,68 @@
+// Copyright (c) 2015, 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:io';
+
+import 'package:analyzer/src/lint/util.dart';
+import 'package:glob/glob.dart';
+import 'package:path/path.dart' as p;
+
+final dartMatcher = new Glob('**.dart');
+
+/// Shared IO sink for standard error reporting.
+/// Visible for testing
+IOSink errorSink = stderr;
+
+/// Shared IO sink for standard out reporting.
+/// Visible for testing
+IOSink outSink = stdout;
+
+/// Cached project package.
+String _projectPackageName;
+
+/// Cached project root.
+String _projectRoot;
+
+/// Collect all lintable files, recursively, under this [path] root, ignoring
+/// links.
+Iterable<File> collectFiles(String path) {
+  List<File> files = [];
+
+  var file = new File(path);
+  if (file.existsSync()) {
+    files.add(file);
+  } else {
+    var directory = new Directory(path);
+    if (directory.existsSync()) {
+      for (var entry
+          in directory.listSync(recursive: true, followLinks: false)) {
+        var relative = p.relative(entry.path, from: directory.path);
+
+        if (isLintable(entry) && !isInHiddenDir(relative)) {
+          files.add(entry);
+        }
+      }
+    }
+  }
+
+  return files;
+}
+
+/// Returns `true` if this [entry] is a Dart file.
+bool isDartFile(FileSystemEntity entry) => isDartFileName(entry.path);
+
+/// Returns `true` if this relative path is a hidden directory.
+bool isInHiddenDir(String relative) =>
+    p.split(relative).any((part) => part.startsWith("."));
+
+/// Returns `true` if this relative path is a hidden directory.
+bool isLintable(FileSystemEntity file) =>
+    file is File && (isDartFile(file) || isPubspecFile(file));
+
+/// Returns `true` if this [entry] is a pubspec file.
+bool isPubspecFile(FileSystemEntity entry) =>
+    isPubspecFileName(p.basename(entry.path));
+
+/// Synchronously read the contents of the file at the given [path] as a string.
+String readFile(String path) => new File(path).readAsStringSync();
diff --git a/pkg/analyzer/lib/src/lint/linter.dart b/pkg/analyzer/lib/src/lint/linter.dart
new file mode 100644
index 0000000..5706f35
--- /dev/null
+++ b/pkg/analyzer/lib/src/lint/linter.dart
@@ -0,0 +1,429 @@
+// Copyright (c) 2015, 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:io';
+
+import 'package:analyzer/analyzer.dart';
+import 'package:analyzer/dart/ast/token.dart';
+import 'package:analyzer/src/generated/engine.dart'
+    show AnalysisErrorInfo, AnalysisErrorInfoImpl, Logger;
+import 'package:analyzer/src/generated/java_engine.dart' show CaughtException;
+import 'package:analyzer/src/generated/source.dart' show LineInfo;
+import 'package:analyzer/src/generated/source_io.dart';
+import 'package:analyzer/src/lint/analysis.dart';
+import 'package:analyzer/src/lint/config.dart';
+import 'package:analyzer/src/lint/io.dart';
+import 'package:analyzer/src/lint/project.dart';
+import 'package:analyzer/src/lint/pub.dart';
+import 'package:analyzer/src/lint/registry.dart';
+import 'package:analyzer/src/services/lint.dart' show Linter;
+import 'package:glob/glob.dart';
+import 'package:path/path.dart' as p;
+
+typedef Printer(String msg);
+
+/// Describes a String in valid camel case format.
+class CamelCaseString {
+  static final _camelCaseMatcher = new RegExp(r'[A-Z][a-z]*');
+  static final _camelCaseTester = new RegExp(r'^([_$]*)([A-Z?$]+[a-z0-9]*)+$');
+
+  final String value;
+  CamelCaseString(this.value) {
+    if (!isCamelCase(value)) {
+      throw new ArgumentError('$value is not CamelCase');
+    }
+  }
+
+  String get humanized => _humanize(value);
+
+  @override
+  String toString() => value;
+
+  static bool isCamelCase(String name) => _camelCaseTester.hasMatch(name);
+
+  static String _humanize(String camelCase) =>
+      _camelCaseMatcher.allMatches(camelCase).map((m) => m.group(0)).join(' ');
+}
+
+/// Dart source linter.
+class DartLinter implements AnalysisErrorListener {
+  final errors = <AnalysisError>[];
+
+  final LinterOptions options;
+  final Reporter reporter;
+
+  /// The total number of sources that were analyzed.  Only valid after
+  /// [lintFiles] has been called.
+  int numSourcesAnalyzed;
+
+  /// Creates a new linter.
+  DartLinter(this.options, {this.reporter: const PrintingReporter()});
+
+  Iterable<AnalysisErrorInfo> lintFiles(List<File> files) {
+    List<AnalysisErrorInfo> errors = [];
+    var analysisDriver = new AnalysisDriver(options);
+    errors.addAll(analysisDriver.analyze(files.where((f) => isDartFile(f))));
+    numSourcesAnalyzed = analysisDriver.numSourcesAnalyzed;
+    files.where((f) => isPubspecFile(f)).forEach((p) {
+      numSourcesAnalyzed++;
+      return errors.addAll(_lintPubspecFile(p));
+    });
+    return errors;
+  }
+
+  Iterable<AnalysisErrorInfo> lintPubspecSource(
+      {String contents, String sourcePath}) {
+    var results = <AnalysisErrorInfo>[];
+
+    Uri sourceUrl = sourcePath == null ? null : p.toUri(sourcePath);
+
+    var spec = new Pubspec.parse(contents, sourceUrl: sourceUrl);
+
+    for (Linter lint in options.enabledLints) {
+      if (lint is LintRule) {
+        LintRule rule = lint;
+        var visitor = rule.getPubspecVisitor();
+        if (visitor != null) {
+          // Analyzer sets reporters; if this file is not being analyzed,
+          // we need to set one ourselves.  (Needless to say, when pubspec
+          // processing gets pushed down, this hack can go away.)
+          if (rule.reporter == null && sourceUrl != null) {
+            var source = createSource(sourceUrl);
+            rule.reporter = new ErrorReporter(this, source);
+          }
+          try {
+            spec.accept(visitor);
+          } on Exception catch (e) {
+            reporter.exception(new LinterException(e.toString()));
+          }
+          if (rule._locationInfo != null && rule._locationInfo.isNotEmpty) {
+            results.addAll(rule._locationInfo);
+            rule._locationInfo.clear();
+          }
+        }
+      }
+    }
+
+    return results;
+  }
+
+  @override
+  onError(AnalysisError error) => errors.add(error);
+
+  Iterable<AnalysisErrorInfo> _lintPubspecFile(File sourceFile) =>
+      lintPubspecSource(
+          contents: sourceFile.readAsStringSync(), sourcePath: sourceFile.path);
+}
+
+class FileGlobFilter extends LintFilter {
+  Iterable<Glob> includes;
+  Iterable<Glob> excludes;
+
+  FileGlobFilter([Iterable<String> includeGlobs, Iterable<String> excludeGlobs])
+      : includes = includeGlobs.map((glob) => new Glob(glob)),
+        excludes = excludeGlobs.map((glob) => new Glob(glob));
+
+  @override
+  bool filter(AnalysisError lint) {
+    // TODO specify order
+    return excludes.any((glob) => glob.matches(lint.source.fullName)) &&
+        !includes.any((glob) => glob.matches(lint.source.fullName));
+  }
+}
+
+class Group implements Comparable<Group> {
+  /// Defined rule groups.
+  static const Group errors =
+      const Group._('errors', description: 'Possible coding errors.');
+  static const Group pub = const Group._('pub',
+      description: 'Pub-related rules.',
+      link: const Hyperlink('See the <strong>Pubspec Format</strong>',
+          'https://www.dartlang.org/tools/pub/pubspec.html'));
+  static const Group style = const Group._('style',
+      description:
+          'Matters of style, largely derived from the official Dart Style Guide.',
+      link: const Hyperlink('See the <strong>Style Guide</strong>',
+          'https://www.dartlang.org/articles/style-guide/'));
+
+  /// List of builtin groups in presentation order.
+  static const Iterable<Group> builtin = const [errors, style, pub];
+
+  final String name;
+  final bool custom;
+  final String description;
+  final Hyperlink link;
+
+  factory Group(String name, {String description: '', Hyperlink link}) {
+    var n = name.toLowerCase();
+    return builtin.firstWhere((g) => g.name == n,
+        orElse: () => new Group._(name,
+            custom: true, description: description, link: link));
+  }
+
+  const Group._(this.name, {this.custom: false, this.description, this.link});
+
+  @override
+  int compareTo(Group other) => name.compareTo(other.name);
+}
+
+class Hyperlink {
+  final String label;
+  final String href;
+  final bool bold;
+  const Hyperlink(this.label, this.href, {this.bold: false});
+  String get html => '<a href="$href">${_emph(label)}</a>';
+  String _emph(msg) => bold ? '<strong>$msg</strong>' : msg;
+}
+
+/// Thrown when an error occurs in linting.
+class LinterException implements Exception {
+  /// A message describing the error.
+  final String message;
+
+  /// Creates a new LinterException with an optional error [message].
+  const LinterException([this.message]);
+
+  @override
+  String toString() =>
+      message == null ? "LinterException" : "LinterException: $message";
+}
+
+/// Linter options.
+class LinterOptions extends DriverOptions {
+  Iterable<LintRule> enabledLints;
+  LintFilter filter;
+  LinterOptions([this.enabledLints]) {
+    enabledLints ??= Registry.ruleRegistry;
+  }
+  void configure(LintConfig config) {
+    // TODO(pquitslund): revisit these default-to-on semantics.
+    enabledLints = Registry.ruleRegistry.where((LintRule rule) =>
+        !config.ruleConfigs.any((rc) => rc.disables(rule.name)));
+    filter = new FileGlobFilter(config.fileIncludes, config.fileExcludes);
+  }
+}
+
+/// Filtered lints are ommitted from linter output.
+abstract class LintFilter {
+  bool filter(AnalysisError lint);
+}
+
+/// Describes a lint rule.
+abstract class LintRule extends Linter implements Comparable<LintRule> {
+  /// Description (in markdown format) suitable for display in a detailed lint
+  /// description.
+  final String details;
+
+  /// Short description suitable for display in console output.
+  final String description;
+
+  /// Lint group (for example, 'style').
+  final Group group;
+
+  /// Lint maturity (stable|experimental).
+  final Maturity maturity;
+
+  /// Lint name.
+  @override
+  final String name;
+
+  /// Until pubspec analysis is pushed into the analyzer proper, we need to
+  /// do some extra book-keeping to keep track of details that will help us
+  /// constitute AnalysisErrorInfos.
+  final List<AnalysisErrorInfo> _locationInfo = <AnalysisErrorInfo>[];
+
+  LintRule(
+      {this.name,
+      this.group,
+      this.description,
+      this.details,
+      this.maturity: Maturity.stable});
+
+  LintCode get lintCode => new _LintCode(name, description);
+
+  @override
+  int compareTo(LintRule other) {
+    var g = group.compareTo(other.group);
+    if (g != 0) {
+      return g;
+    }
+    return name.compareTo(other.name);
+  }
+
+  /// Return a visitor to be passed to provide access to Dart project context
+  /// and to perform project-level analyses.
+  ProjectVisitor getProjectVisitor() => null;
+
+  /// Return a visitor to be passed to pubspecs to perform lint
+  /// analysis.
+  /// Lint errors are reported via this [Linter]'s error [reporter].
+  PubspecVisitor getPubspecVisitor() => null;
+
+  @override
+  AstVisitor getVisitor() => null;
+
+  void reportLint(AstNode node, {bool ignoreSyntheticNodes: true}) {
+    if (node != null && (!node.isSynthetic || !ignoreSyntheticNodes)) {
+      reporter.reportErrorForNode(lintCode, node, []);
+    }
+  }
+
+  void reportLintForToken(Token token, {bool ignoreSyntheticTokens: true}) {
+    if (token != null && (!token.isSynthetic || !ignoreSyntheticTokens)) {
+      reporter.reportErrorForToken(lintCode, token, []);
+    }
+  }
+
+  void reportPubLint(PSNode node) {
+    Source source = createSource(node.span.sourceUrl);
+
+    // Cache error and location info for creating AnalysisErrorInfos
+    // Note that error columns are 1-based
+    AnalysisError error = new AnalysisError(
+        source, node.span.start.column + 1, node.span.length, lintCode);
+    LineInfo lineInfo = new LineInfo.fromContent(source.contents.data);
+
+    _locationInfo.add(new AnalysisErrorInfoImpl([error], lineInfo));
+
+    // Then do the reporting
+    reporter?.reportError(error);
+  }
+}
+
+class Maturity implements Comparable<Maturity> {
+  static const Maturity stable = const Maturity._('stable', ordinal: 0);
+  static const Maturity experimental = const Maturity._('stable', ordinal: 1);
+
+  final String name;
+  final int ordinal;
+
+  factory Maturity(String name, {int ordinal}) {
+    switch (name.toLowerCase()) {
+      case 'stable':
+        return stable;
+      case 'experimental':
+        return experimental;
+      default:
+        return new Maturity._(name, ordinal: ordinal);
+    }
+  }
+
+  const Maturity._(this.name, {this.ordinal});
+
+  @override
+  int compareTo(Maturity other) => this.ordinal - other.ordinal;
+}
+
+class PrintingReporter implements Reporter, Logger {
+  final Printer _print;
+
+  const PrintingReporter([this._print = print]);
+
+  @override
+  void exception(LinterException exception) {
+    _print('EXCEPTION: $exception');
+  }
+
+  @override
+  void logError(String message, [CaughtException exception]) {
+    _print('ERROR: $message');
+  }
+
+  @override
+  void logInformation(String message, [CaughtException exception]) {
+    _print('INFO: $message');
+  }
+
+  @override
+  void warn(String message) {
+    _print('WARN: $message');
+  }
+}
+
+abstract class Reporter {
+  void exception(LinterException exception);
+  void warn(String message);
+}
+
+/// Linter implementation.
+class SourceLinter implements DartLinter, AnalysisErrorListener {
+  @override
+  final errors = <AnalysisError>[];
+  @override
+  final LinterOptions options;
+  @override
+  final Reporter reporter;
+
+  @override
+  int numSourcesAnalyzed;
+
+  SourceLinter(this.options, {this.reporter: const PrintingReporter()});
+
+  @override
+  Iterable<AnalysisErrorInfo> lintFiles(List<File> files) {
+    List<AnalysisErrorInfo> errors = [];
+    var analysisDriver = new AnalysisDriver(options);
+    errors.addAll(analysisDriver.analyze(files.where((f) => isDartFile(f))));
+    numSourcesAnalyzed = analysisDriver.numSourcesAnalyzed;
+    files.where((f) => isPubspecFile(f)).forEach((p) {
+      numSourcesAnalyzed++;
+      return errors.addAll(_lintPubspecFile(p));
+    });
+    return errors;
+  }
+
+  @override
+  Iterable<AnalysisErrorInfo> lintPubspecSource(
+      {String contents, String sourcePath}) {
+    var results = <AnalysisErrorInfo>[];
+
+    Uri sourceUrl = sourcePath == null ? null : p.toUri(sourcePath);
+
+    var spec = new Pubspec.parse(contents, sourceUrl: sourceUrl);
+
+    for (Linter lint in options.enabledLints) {
+      if (lint is LintRule) {
+        LintRule rule = lint;
+        var visitor = rule.getPubspecVisitor();
+        if (visitor != null) {
+          // Analyzer sets reporters; if this file is not being analyzed,
+          // we need to set one ourselves.  (Needless to say, when pubspec
+          // processing gets pushed down, this hack can go away.)
+          if (rule.reporter == null && sourceUrl != null) {
+            var source = createSource(sourceUrl);
+            rule.reporter = new ErrorReporter(this, source);
+          }
+          try {
+            spec.accept(visitor);
+          } on Exception catch (e) {
+            reporter.exception(new LinterException(e.toString()));
+          }
+          if (rule._locationInfo != null && rule._locationInfo.isNotEmpty) {
+            results.addAll(rule._locationInfo);
+            rule._locationInfo.clear();
+          }
+        }
+      }
+    }
+
+    return results;
+  }
+
+  @override
+  onError(AnalysisError error) => errors.add(error);
+
+  @override
+  Iterable<AnalysisErrorInfo> _lintPubspecFile(File sourceFile) =>
+      lintPubspecSource(
+          contents: sourceFile.readAsStringSync(), sourcePath: sourceFile.path);
+}
+
+class _LintCode extends LintCode {
+  static final registry = <String, LintCode>{};
+
+  factory _LintCode(String name, String message) => registry.putIfAbsent(
+      name + message, () => new _LintCode._(name, message));
+
+  _LintCode._(String name, String message) : super(name, message);
+}
diff --git a/pkg/analysis_server/lib/src/services/linter/linter.dart b/pkg/analyzer/lib/src/lint/options_rule_validator.dart
similarity index 80%
rename from pkg/analysis_server/lib/src/services/linter/linter.dart
rename to pkg/analyzer/lib/src/lint/options_rule_validator.dart
index 964c238..109cdd2 100644
--- a/pkg/analysis_server/lib/src/services/linter/linter.dart
+++ b/pkg/analyzer/lib/src/lint/options_rule_validator.dart
@@ -1,12 +1,10 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library services.src.linter;
-
 import 'package:analyzer/analyzer.dart';
 import 'package:analyzer/plugin/options.dart';
-import 'package:linter/src/rules.dart';
+import 'package:analyzer/src/lint/registry.dart';
 import 'package:yaml/yaml.dart';
 
 /**
@@ -19,7 +17,9 @@
     const AnalysisOptionsWarningCode(
         'UNDEFINED_LINT_WARNING', "'{0}' is not a recognized lint rule");
 
-/// Validates `linter` rule configurations.
+/**
+ * Validates `linter` rule configurations.
+ */
 class LinterRuleOptionsValidator extends OptionsValidator {
   static const linter = 'linter';
   static const rulesKey = 'rules';
@@ -37,8 +37,8 @@
 
   validateRules(dynamic rules, ErrorReporter reporter) {
     if (rules is YamlList) {
-      //TODO(pq): migrate this to a proper API once there is one.
-      Iterable<String> registeredLints = ruleRegistry.map((r) => r.name);
+      Iterable<String> registeredLints =
+          Registry.ruleRegistry.map((r) => r.name);
       rules.nodes.forEach((YamlNode ruleNode) {
         Object value = ruleNode.value;
         if (value != null && !registeredLints.contains(value)) {
diff --git a/pkg/analyzer/lib/src/lint/project.dart b/pkg/analyzer/lib/src/lint/project.dart
new file mode 100644
index 0000000..9b22294
--- /dev/null
+++ b/pkg/analyzer/lib/src/lint/project.dart
@@ -0,0 +1,129 @@
+// Copyright (c) 2015, 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:io';
+
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/resolver.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/lint/io.dart';
+import 'package:analyzer/src/lint/pub.dart';
+import 'package:path/path.dart' as p;
+
+Pubspec _findAndParsePubspec(Directory root) {
+  if (root.existsSync()) {
+    File pubspec = root
+        .listSync(followLinks: false)
+        .firstWhere((f) => isPubspecFile(f), orElse: () => null);
+    if (pubspec != null) {
+      return new Pubspec.parse(pubspec.readAsStringSync(),
+          sourceUrl: p.toUri(pubspec.path));
+    }
+  }
+  return null;
+}
+
+/// A semantic representation of a Dart project.
+///
+/// Projects provide a semantic model of a Dart project based on the
+/// [pub package layout conventions](https://www.dartlang.org/tools/pub/package-layout.html).
+/// This model allows clients to traverse project contents in a convenient and
+/// standardized way, access global information (such as whether elements are
+/// in the "public API") and resources that have special meanings in the
+/// context of pub package layout conventions.
+class DartProject {
+  _ApiModel _apiModel;
+  String _name;
+  Pubspec _pubspec;
+
+  /// Project root.
+  final Directory root;
+
+  /// Create a Dart project for the corresponding [context] and [sources].
+  /// If a [dir] is unspecified the current working directory will be
+  /// used.
+  DartProject(AnalysisContext context, List<Source> sources, {Directory dir})
+      : root = dir ?? Directory.current {
+    _pubspec = _findAndParsePubspec(root);
+    _apiModel = new _ApiModel(context, sources, root);
+  }
+
+  /// The project's name.
+  ///
+  /// Project names correspond to the package name as specified in the project's
+  /// [pubspec]. The pubspec is found relative to the project [root].  If no
+  /// pubspec can be found, the name defaults to the project root basename.
+  String get name => _name ??= _calculateName();
+
+  /// The project's pubspec.
+  Pubspec get pubspec => _pubspec;
+
+  /// Returns `true` if the given element is part of this project's public API.
+  ///
+  /// Public API elements are defined as all elements that are in the packages's
+  /// `lib` directory, *less* those in `lib/src` (which are treated as private
+  /// *implementation files*), plus elements having been explicitly exported
+  /// via an `export` directive.
+  bool isApi(Element element) => _apiModel.contains(element);
+
+  String _calculateName() {
+    if (pubspec != null) {
+      var nameEntry = pubspec.name;
+      if (nameEntry != null) {
+        return nameEntry.value.text;
+      }
+    }
+    return p.basename(root.path);
+  }
+}
+
+/// An object that can be used to visit Dart project structure.
+abstract class ProjectVisitor<T> {
+  T visit(DartProject project) => null;
+}
+
+/// Captures the project's API as defined by pub package layout standards.
+class _ApiModel {
+  final AnalysisContext context;
+  final List<Source> sources;
+  final Directory root;
+  final Set<LibraryElement> elements = new Set();
+
+  _ApiModel(this.context, this.sources, this.root) {
+    _calculate();
+  }
+
+  /// Return `true` if this element is part of the public API for this package.
+  bool contains(Element element) {
+    while (element != null) {
+      if (!element.isPrivate && elements.contains(element)) {
+        return true;
+      }
+      element = element.enclosingElement;
+    }
+    return false;
+  }
+
+  _calculate() {
+    if (sources == null || sources.isEmpty) {
+      return;
+    }
+
+    var libDir = root.path + '/lib';
+    var libSrcDir = libDir + '/src';
+
+    for (Source source in sources) {
+      var path = source.uri.path;
+      if (path.startsWith(libDir) && !path.startsWith(libSrcDir)) {
+        var library = context.computeLibraryElement(source);
+        var namespaceBuilder = new NamespaceBuilder();
+        var exports = namespaceBuilder.createExportNamespaceForLibrary(library);
+        var public = namespaceBuilder.createPublicNamespaceForLibrary(library);
+        elements.addAll(exports.definedNames.values);
+        elements.addAll(public.definedNames.values);
+      }
+    }
+  }
+}
diff --git a/pkg/analyzer/lib/src/lint/pub.dart b/pkg/analyzer/lib/src/lint/pub.dart
new file mode 100644
index 0000000..8d12e13
--- /dev/null
+++ b/pkg/analyzer/lib/src/lint/pub.dart
@@ -0,0 +1,430 @@
+// Copyright (c) 2015, 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:collection';
+
+import 'package:source_span/source_span.dart';
+import 'package:yaml/yaml.dart';
+
+PSEntry _findEntry(YamlMap map, String key) {
+  PSEntry entry;
+  map.nodes.forEach((k, v) {
+    if (k is YamlScalar && key == k.toString()) {
+      entry = _processScalar(k, v);
+    }
+  });
+  return entry;
+}
+
+PSDependencyList _processDependencies(YamlScalar key, YamlNode v) {
+  if (v is! YamlMap) {
+    return null;
+  }
+  YamlMap depsMap = v;
+
+  _PSDependencyList deps = new _PSDependencyList(new _PSNode(key));
+  depsMap.nodes.forEach((k, v) => deps.add(new _PSDependency(k, v)));
+  return deps;
+}
+
+PSGitRepo _processGitRepo(YamlScalar key, YamlNode v) {
+  if (v is! YamlMap) {
+    return null;
+  }
+  YamlMap hostMap = v;
+  // url: git://github.com/munificent/kittens.git
+  // ref: some-branch
+  _PSGitRepo repo = new _PSGitRepo();
+  repo.token = new _PSNode(key);
+  repo.ref = _findEntry(hostMap, 'ref');
+  repo.url = _findEntry(hostMap, 'url');
+  return repo;
+}
+
+PSHost _processHost(YamlScalar key, YamlNode v) {
+  if (v is! YamlMap) {
+    return null;
+  }
+  YamlMap hostMap = v;
+  // name: transmogrify
+  // url: http://your-package-server.com
+  _PSHost host = new _PSHost();
+  host.token = new _PSNode(key);
+  host.name = _findEntry(hostMap, 'name');
+  host.url = _findEntry(hostMap, 'url');
+  return host;
+}
+
+PSNodeList _processList(YamlScalar key, YamlNode v) {
+  if (v is! YamlList) {
+    return null;
+  }
+  YamlList nodeList = v;
+
+  return new _PSNodeList(
+      new _PSNode(key), nodeList.nodes.map((n) => new _PSNode(n)));
+}
+
+PSEntry _processScalar(YamlScalar key, YamlNode value) {
+  if (value is! YamlScalar) {
+    return null;
+    //WARN?
+  }
+  return new PSEntry(new _PSNode(key), new _PSNode(value));
+}
+
+abstract class PSDependency {
+  PSGitRepo get git;
+  PSHost get host;
+  PSNode get name;
+  PSEntry get version;
+}
+
+abstract class PSDependencyList extends Object
+    with IterableMixin<PSDependency> {}
+
+class PSEntry {
+  final PSNode key;
+  final PSNode value;
+  PSEntry(this.key, this.value);
+
+  @override
+  String toString() => '${key != null ? (key.toString() + ': ') : ''}$value';
+}
+
+abstract class PSGitRepo {
+  PSEntry get ref;
+  PSNode get token;
+  PSEntry get url;
+}
+
+abstract class PSHost {
+  PSEntry get name;
+  PSNode get token;
+  PSEntry get url;
+}
+
+abstract class PSNode {
+  SourceSpan get span;
+  String get text;
+}
+
+abstract class PSNodeList extends Object with IterableMixin<PSNode> {
+  @override
+  Iterator<PSNode> get iterator;
+  PSNode get token;
+}
+
+abstract class Pubspec {
+  factory Pubspec.parse(String source, {Uri sourceUrl}) =>
+      new _Pubspec(source, sourceUrl: sourceUrl);
+  PSEntry get author;
+  PSNodeList get authors;
+  PSDependencyList get dependencies;
+  PSEntry get description;
+  PSDependencyList get devDependencies;
+  PSEntry get documentation;
+  PSEntry get homepage;
+  PSEntry get name;
+  PSEntry get version;
+  accept(PubspecVisitor visitor);
+}
+
+abstract class PubspecVisitor<T> {
+  T visitPackageAuthor(PSEntry author) => null;
+  T visitPackageAuthors(PSNodeList authors) => null;
+  T visitPackageDependencies(PSDependencyList dependencies) => null;
+  T visitPackageDependency(PSDependency dependency) => null;
+  T visitPackageDescription(PSEntry description) => null;
+  T visitPackageDevDependencies(PSDependencyList dependencies) => null;
+  T visitPackageDevDependency(PSDependency dependency) => null;
+  T visitPackageDocumentation(PSEntry documentation) => null;
+  T visitPackageHomepage(PSEntry homepage) => null;
+  T visitPackageName(PSEntry name) => null;
+  T visitPackageVersion(PSEntry version) => null;
+}
+
+class _PSDependency extends PSDependency {
+  @override
+  PSNode name;
+  @override
+  PSEntry version;
+  @override
+  PSHost host;
+  @override
+  PSGitRepo git;
+
+  factory _PSDependency(dynamic k, YamlNode v) {
+    if (k is! YamlScalar) {
+      return null;
+    }
+    YamlScalar key = k;
+
+    _PSDependency dep = new _PSDependency._();
+
+    dep.name = new _PSNode(key);
+
+    if (v is YamlScalar) {
+      // Simple version
+      dep.version = new PSEntry(null, new _PSNode(v));
+    } else if (v is YamlMap) {
+      // hosted:
+      //   name: transmogrify
+      //   url: http://your-package-server.com
+      //   version: '>=0.4.0 <1.0.0'
+      YamlMap details = v;
+      details.nodes.forEach((k, v) {
+        if (k is! YamlScalar) {
+          return;
+        }
+        YamlScalar key = k;
+        switch (key.toString()) {
+          case 'version':
+            dep.version = _processScalar(key, v);
+            break;
+          case 'hosted':
+            dep.host = _processHost(key, v);
+            break;
+          case 'git':
+            dep.git = _processGitRepo(key, v);
+            break;
+        }
+      });
+    }
+    return dep;
+  }
+
+  _PSDependency._();
+
+  @override
+  String toString() {
+    var sb = new StringBuffer();
+    if (name != null) {
+      sb.write('$name:');
+    }
+    var versionInfo = '';
+    if (version != null) {
+      if (version.key == null) {
+        versionInfo = ' $version';
+      } else {
+        versionInfo = '\n    $version';
+      }
+    }
+    sb.writeln(versionInfo);
+    if (host != null) {
+      sb.writeln(host);
+    }
+    if (git != null) {
+      sb.writeln(git);
+    }
+    return sb.toString();
+  }
+}
+
+class _PSDependencyList extends PSDependencyList {
+  final dependencies = <PSDependency>[];
+  final PSNode token;
+
+  _PSDependencyList(this.token);
+
+  @override
+  Iterator<PSDependency> get iterator => dependencies.iterator;
+
+  add(PSDependency dependency) {
+    if (dependency != null) {
+      dependencies.add(dependency);
+    }
+  }
+
+  @override
+  String toString() => '$token\n${dependencies.join('  ')}';
+}
+
+class _PSGitRepo implements PSGitRepo {
+  @override
+  PSNode token;
+  @override
+  PSEntry ref;
+  @override
+  PSEntry url;
+  @override
+  String toString() => '''
+    $token:
+      $url
+      $ref''';
+}
+
+class _PSHost implements PSHost {
+  @override
+  PSNode token;
+  @override
+  PSEntry name;
+  @override
+  PSEntry url;
+  @override
+  String toString() => '''
+    $token:
+      $name
+      $url''';
+}
+
+class _PSNode implements PSNode {
+  @override
+  final String text;
+  @override
+  final SourceSpan span;
+
+  _PSNode(YamlNode node)
+      : text = node.value?.toString(),
+        span = node.span;
+
+  @override
+  String toString() => '$text';
+}
+
+class _PSNodeList extends PSNodeList {
+  @override
+  final PSNode token;
+  final Iterable<PSNode> nodes;
+
+  _PSNodeList(this.token, this.nodes);
+
+  @override
+  Iterator<PSNode> get iterator => nodes.iterator;
+
+  @override
+  String toString() => '''
+$token:
+  - ${nodes.join('\n  - ')}''';
+}
+
+class _Pubspec implements Pubspec {
+  @override
+  PSEntry author;
+  @override
+  PSNodeList authors;
+  @override
+  PSEntry description;
+  @override
+  PSEntry documentation;
+  @override
+  PSEntry homepage;
+  @override
+  PSEntry name;
+  @override
+  PSEntry version;
+  @override
+  PSDependencyList dependencies;
+  @override
+  PSDependencyList devDependencies;
+
+  _Pubspec(String src, {Uri sourceUrl}) {
+    try {
+      _parse(src, sourceUrl: sourceUrl);
+    } on Exception {
+      // ignore
+    }
+  }
+
+  @override
+  void accept(PubspecVisitor visitor) {
+    if (author != null) {
+      visitor.visitPackageAuthor(author);
+    }
+    if (authors != null) {
+      visitor.visitPackageAuthors(authors);
+    }
+    if (description != null) {
+      visitor.visitPackageDescription(description);
+    }
+    if (documentation != null) {
+      visitor.visitPackageDocumentation(documentation);
+    }
+    if (homepage != null) {
+      visitor.visitPackageHomepage(homepage);
+    }
+    if (name != null) {
+      visitor.visitPackageName(name);
+    }
+    if (version != null) {
+      visitor.visitPackageVersion(version);
+    }
+    if (dependencies != null) {
+      visitor.visitPackageDependencies(dependencies);
+      dependencies.forEach((d) => visitor.visitPackageDependency(d));
+    }
+    if (devDependencies != null) {
+      visitor.visitPackageDevDependencies(devDependencies);
+      devDependencies.forEach((d) => visitor.visitPackageDevDependency(d));
+    }
+  }
+
+  @override
+  String toString() {
+    var sb = new _StringBuilder();
+    sb.writelin(name);
+    sb.writelin(version);
+    sb.writelin(author);
+    sb.writelin(authors);
+    sb.writelin(description);
+    sb.writelin(homepage);
+    sb.writelin(dependencies);
+    sb.writelin(devDependencies);
+    return sb.toString();
+  }
+
+  _parse(String src, {Uri sourceUrl}) {
+    var yaml = loadYamlNode(src, sourceUrl: sourceUrl);
+    if (yaml is! YamlMap) {
+      return;
+    }
+    YamlMap yamlMap = yaml;
+    yamlMap.nodes.forEach((k, v) {
+      if (k is! YamlScalar) {
+        return;
+      }
+      YamlScalar key = k;
+      switch (key.toString()) {
+        case 'author':
+          author = _processScalar(key, v);
+          break;
+        case 'authors':
+          authors = _processList(key, v);
+          break;
+        case 'homepage':
+          homepage = _processScalar(key, v);
+          break;
+        case 'name':
+          name = _processScalar(key, v);
+          break;
+        case 'description':
+          description = _processScalar(key, v);
+          break;
+        case 'documentation':
+          documentation = _processScalar(key, v);
+          break;
+        case 'dependencies':
+          dependencies = _processDependencies(key, v);
+          break;
+        case 'dev_dependencies':
+          devDependencies = _processDependencies(key, v);
+          break;
+        case 'version':
+          version = _processScalar(key, v);
+          break;
+      }
+    });
+  }
+}
+
+class _StringBuilder {
+  StringBuffer buffer = new StringBuffer();
+  @override
+  String toString() => buffer.toString();
+  writelin(Object value) {
+    if (value != null) {
+      buffer.writeln(value);
+    }
+  }
+}
diff --git a/pkg/analyzer/lib/src/lint/registry.dart b/pkg/analyzer/lib/src/lint/registry.dart
new file mode 100644
index 0000000..172767b
--- /dev/null
+++ b/pkg/analyzer/lib/src/lint/registry.dart
@@ -0,0 +1,75 @@
+// Copyright (c) 2015, 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:collection';
+
+import 'package:analyzer/src/lint/config.dart';
+import 'package:analyzer/src/lint/linter.dart';
+
+/**
+ * Registry of lint rules.
+ */
+class Registry extends Object with IterableMixin<LintRule> {
+  /**
+   * The default registry to be used by clients.
+   */
+  static final Registry ruleRegistry = new Registry();
+
+  /**
+   * A table mapping rule names to rules.
+   */
+  Map<String, LintRule> _ruleMap = <String, LintRule>{};
+
+  /**
+   * A list of the default lint rules.
+   */
+  List<LintRule> _defaultRules = <LintRule>[];
+
+  /**
+   * Return a list of the default lint rules.
+   */
+  List<LintRule> get defaultRules => _defaultRules;
+
+  @override
+  Iterator<LintRule> get iterator => _ruleMap.values.iterator;
+
+  /**
+   * Return a list of the rules that are defined.
+   */
+  Iterable<LintRule> get rules => _ruleMap.values;
+
+  /**
+   * Return the lint rule with the given [name].
+   */
+  LintRule operator [](String name) => _ruleMap[name];
+
+  /**
+   * Return a list of the lint rules explicitly enabled by the given [config].
+   *
+   * For example:
+   *     my_rule: true
+   *
+   * enables `my_rule`.
+   *
+   * Unspecified rules are treated as disabled by default.
+   */
+  Iterable<LintRule> enabled(LintConfig config) => rules
+      .where((rule) => config.ruleConfigs.any((rc) => rc.enables(rule.name)));
+
+  /**
+   * Add the given lint [rule] to this registry.
+   */
+  void register(LintRule rule) {
+    _ruleMap[rule.name] = rule;
+  }
+
+  /**
+   * Add the given lint [rule] to this registry and mark it as being a default
+   * lint (one that will be run if lints are requested but no rules are enabled.
+   */
+  void registerDefault(LintRule rule) {
+    register(rule);
+    _defaultRules.add(rule);
+  }
+}
diff --git a/pkg/analyzer/lib/src/lint/util.dart b/pkg/analyzer/lib/src/lint/util.dart
new file mode 100644
index 0000000..e1c63af
--- /dev/null
+++ b/pkg/analyzer/lib/src/lint/util.dart
@@ -0,0 +1,172 @@
+// Copyright (c) 2015, 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:io';
+
+import 'package:analyzer/analyzer.dart';
+import 'package:analyzer/dart/ast/token.dart';
+import 'package:analyzer/src/dart/ast/token.dart';
+import 'package:analyzer/src/dart/scanner/reader.dart';
+import 'package:analyzer/src/dart/scanner/scanner.dart';
+import 'package:analyzer/src/generated/parser.dart' show Parser;
+import 'package:analyzer/src/string_source.dart' show StringSource;
+import 'package:path/path.dart' as p;
+
+final _identifier = new RegExp(r'^([(_|$)a-zA-Z]+([_a-zA-Z0-9])*)$');
+
+final _lowerCamelCase =
+    new RegExp(r'^(_)*[?$a-z][a-z0-9?$]*([A-Z][a-z0-9?$]*)*$');
+
+final _lowerCaseUnderScore = new RegExp(r'^([a-z]+([_]?[a-z0-9]+)*)+$');
+
+final _lowerCaseUnderScoreWithDots =
+    new RegExp(r'^[a-z][_a-z0-9]*(\.[a-z][_a-z0-9]*)*$');
+
+final _pubspec = new RegExp(r'^[_]?pubspec\.yaml$');
+
+final _underscores = new RegExp(r'^[_]+$');
+
+/// Create a library name prefix based on [libraryPath], [projectRoot] and
+/// current [packageName].
+String createLibraryNamePrefix(
+    {String libraryPath, String projectRoot, String packageName}) {
+  // Use the posix context to canonicalize separators (`\`).
+  var libraryDirectory = p.posix.dirname(libraryPath);
+  var path = p.posix.relative(libraryDirectory, from: projectRoot);
+  // Drop 'lib/'.
+  var segments = p.split(path);
+  if (segments[0] == 'lib') {
+    path = p.posix.joinAll(segments.sublist(1));
+  }
+  // Replace separators.
+  path = path.replaceAll('/', '.');
+  // Add separator if needed.
+  if (path.isNotEmpty) {
+    path = '.$path';
+  }
+
+  return '$packageName$path';
+}
+
+/// Returns `true` if this [fileName] is a Dart file.
+bool isDartFileName(String fileName) => fileName.endsWith('.dart');
+
+/// Returns `true` if this [name] is a legal Dart identifier.
+bool isIdentifier(String name) => _identifier.hasMatch(name);
+
+/// Returns `true` of the given [name] is composed only of `_`s.
+bool isJustUnderscores(String name) => _underscores.hasMatch(name);
+
+/// Returns `true` if this [id] is `lowerCamelCase`.
+bool isLowerCamelCase(String id) =>
+    id.length == 1 && isUpperCase(id.codeUnitAt(0)) ||
+    id == '_' ||
+    _lowerCamelCase.hasMatch(id);
+
+/// Returns `true` if this [id] is `lower_camel_case_with_underscores`.
+bool isLowerCaseUnderScore(String id) => _lowerCaseUnderScore.hasMatch(id);
+
+/// Returns `true` if this [id] is `lower_camel_case_with_underscores_or.dots`.
+bool isLowerCaseUnderScoreWithDots(String id) =>
+    _lowerCaseUnderScoreWithDots.hasMatch(id);
+
+/// Returns `true` if this [fileName] is a Pubspec file.
+bool isPubspecFileName(String fileName) => _pubspec.hasMatch(fileName);
+
+/// Returns `true` if the given code unit [c] is upper case.
+bool isUpperCase(int c) => c >= 0x40 && c <= 0x5A;
+
+class Spelunker {
+  final String path;
+  final IOSink sink;
+  Spelunker(this.path, {IOSink sink}) : this.sink = sink ?? stdout;
+
+  void spelunk() {
+    var contents = new File(path).readAsStringSync();
+
+    var errorListener = new _ErrorListener();
+
+    var reader = new CharSequenceReader(contents);
+    var stringSource = new StringSource(contents, path);
+    var scanner = new Scanner(stringSource, reader, errorListener);
+    var startToken = scanner.tokenize();
+
+    errorListener.throwIfErrors();
+
+    var parser = new Parser(stringSource, errorListener);
+    var node = parser.parseCompilationUnit(startToken);
+
+    errorListener.throwIfErrors();
+
+    var visitor = new _SourceVisitor(sink);
+    node.accept(visitor);
+  }
+}
+
+class _ErrorListener implements AnalysisErrorListener {
+  final errors = <AnalysisError>[];
+
+  @override
+  void onError(AnalysisError error) {
+    errors.add(error);
+  }
+
+  void throwIfErrors() {
+    if (errors.isNotEmpty) {
+      throw new Exception(errors);
+    }
+  }
+}
+
+class _SourceVisitor extends GeneralizingAstVisitor {
+  int indent = 0;
+
+  final IOSink sink;
+  _SourceVisitor(this.sink);
+
+  String asString(AstNode node) =>
+      typeInfo(node.runtimeType) + ' [${node.toString()}]';
+
+  List<CommentToken> getPrecedingComments(Token token) {
+    var comments = <CommentToken>[];
+    var comment = token.precedingComments;
+    while (comment is CommentToken) {
+      comments.add(comment);
+      comment = comment.next;
+    }
+    return comments;
+  }
+
+  String getTrailingComment(AstNode node) {
+    var successor = node.endToken.next;
+    if (successor != null) {
+      var precedingComments = successor.precedingComments;
+      if (precedingComments != null) {
+        return precedingComments.toString();
+      }
+    }
+    return '';
+  }
+
+  String typeInfo(Type type) => type.toString();
+
+  @override
+  visitNode(AstNode node) {
+    write(node);
+
+    ++indent;
+    node.visitChildren(this);
+    --indent;
+    return null;
+  }
+
+  write(AstNode node) {
+    //EOL comments
+    var comments = getPrecedingComments(node.beginToken);
+    comments.forEach((c) => sink.writeln('${"  " * indent}$c'));
+
+    sink.writeln(
+        '${"  " * indent}${asString(node)} ${getTrailingComment(node)}');
+  }
+}
diff --git a/pkg/analyzer/lib/src/plugin/command_line_plugin.dart b/pkg/analyzer/lib/src/plugin/command_line_plugin.dart
deleted file mode 100644
index b2f8c58..0000000
--- a/pkg/analyzer/lib/src/plugin/command_line_plugin.dart
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library analyzer.src.plugin.command_line_plugin;
-
-import 'package:analyzer/plugin/command_line.dart';
-import 'package:plugin/plugin.dart';
-
-/**
- * A plugin that defines the extension points and extensions that are defined by
- * command-line applications using the analysis engine.
- */
-class CommandLinePlugin implements Plugin {
-  /**
-   * The simple identifier of the extension point that allows plugins to
-   * register new parser contributors.
-   */
-  static const String PARSER_CONTRIBUTOR_EXTENSION_POINT = 'parserContributor';
-
-  /**
-   * The simple identifier of the extension point that allows plugins to
-   * register new result processors.
-   */
-  static const String RESULT_PROCESSOR_EXTENSION_POINT = 'resultProcessor';
-
-  /**
-   * The unique identifier of this plugin.
-   */
-  static const String UNIQUE_IDENTIFIER = 'command_line.core';
-
-  /**
-   * The extension point that allows plugins to register new parser
-   * contributors.
-   */
-  ExtensionPoint<ArgParserContributor> parserContributorExtensionPoint;
-
-  /**
-   * The extension point that allows plugins to register new result processors.
-   */
-  ExtensionPoint<ArgResultsProcessor> resultProcessorExtensionPoint;
-
-  /**
-   * Initialize a newly created plugin.
-   */
-  CommandLinePlugin();
-
-  /**
-   * Return a list containing all of the parser contributors that were
-   * contributed.
-   */
-  List<ArgParserContributor> get parserContributors =>
-      parserContributorExtensionPoint.extensions;
-
-  /**
-   * Return a list containing all of the result processors that were
-   * contributed.
-   */
-  List<ArgResultsProcessor> get resultProcessors =>
-      resultProcessorExtensionPoint.extensions;
-
-  @override
-  String get uniqueIdentifier => UNIQUE_IDENTIFIER;
-
-  @override
-  void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) {
-    parserContributorExtensionPoint = new ExtensionPoint<ArgParserContributor>(
-        this, PARSER_CONTRIBUTOR_EXTENSION_POINT, null);
-    registerExtensionPoint(parserContributorExtensionPoint);
-    resultProcessorExtensionPoint = new ExtensionPoint<ArgResultsProcessor>(
-        this, RESULT_PROCESSOR_EXTENSION_POINT, null);
-    registerExtensionPoint(resultProcessorExtensionPoint);
-  }
-
-  @override
-  void registerExtensions(RegisterExtension registerExtension) {
-    // There are no default extensions.
-  }
-}
diff --git a/pkg/analyzer/lib/src/plugin/engine_plugin.dart b/pkg/analyzer/lib/src/plugin/engine_plugin.dart
index 8166178..fb0599db4 100644
--- a/pkg/analyzer/lib/src/plugin/engine_plugin.dart
+++ b/pkg/analyzer/lib/src/plugin/engine_plugin.dart
@@ -10,11 +10,9 @@
     show InternalAnalysisContext;
 import 'package:analyzer/src/task/dart.dart';
 import 'package:analyzer/src/task/dart_work_manager.dart';
-import 'package:analyzer/src/task/general.dart';
 import 'package:analyzer/src/task/html.dart';
 import 'package:analyzer/src/task/html_work_manager.dart';
 import 'package:analyzer/src/task/options_work_manager.dart';
-import 'package:analyzer/src/task/yaml.dart';
 import 'package:analyzer/task/model.dart';
 import 'package:plugin/plugin.dart';
 
@@ -46,12 +44,6 @@
 
   /**
    * The simple identifier of the extension point that allows plugins to
-   * register new analysis tasks with the analysis engine.
-   */
-  static const String TASK_EXTENSION_POINT = 'task';
-
-  /**
-   * The simple identifier of the extension point that allows plugins to
    * register new work manager factories with the analysis engine.
    */
   static const String WORK_MANAGER_FACTORY_EXTENSION_POINT =
@@ -83,12 +75,6 @@
   ExtensionPoint<ListResultDescriptor<AnalysisError>> htmlErrorsExtensionPoint;
 
   /**
-   * The extension point that allows plugins to register new analysis tasks with
-   * the analysis engine.
-   */
-  ExtensionPoint<TaskDescriptor> taskExtensionPoint;
-
-  /**
    * The extension point that allows plugins to register new work manager
    * factories with the analysis engine.
    */
@@ -122,11 +108,6 @@
   @ExtensionPointId('HTML_ERRORS_EXTENSION_POINT_ID')
   List<ResultDescriptor> get htmlErrors => htmlErrorsExtensionPoint.extensions;
 
-  /**
-   * Return a list containing all of the task descriptors that were contributed.
-   */
-  List<TaskDescriptor> get taskDescriptors => taskExtensionPoint.extensions;
-
   @override
   String get uniqueIdentifier => UNIQUE_IDENTIFIER;
 
@@ -151,9 +132,6 @@
         new ExtensionPoint<ListResultDescriptor<AnalysisError>>(
             this, HTML_ERRORS_EXTENSION_POINT, null);
     registerExtensionPoint(htmlErrorsExtensionPoint);
-    taskExtensionPoint =
-        new ExtensionPoint<TaskDescriptor>(this, TASK_EXTENSION_POINT, null);
-    registerExtensionPoint(taskExtensionPoint);
     workManagerFactoryExtensionPoint = new ExtensionPoint<WorkManagerFactory>(
         this, WORK_MANAGER_FACTORY_EXTENSION_POINT, null);
     registerExtensionPoint(workManagerFactoryExtensionPoint);
@@ -161,7 +139,6 @@
 
   @override
   void registerExtensions(RegisterExtension registerExtension) {
-    _registerTaskExtensions(registerExtension);
     _registerWorkManagerFactoryExtensions(registerExtension);
     _registerDartErrorsForSource(registerExtension);
     _registerDartErrorsForUnit(registerExtension);
@@ -182,75 +159,6 @@
     registerExtension(HTML_ERRORS_EXTENSION_POINT_ID, HTML_DOCUMENT_ERRORS);
   }
 
-  void _registerTaskExtensions(RegisterExtension registerExtension) {
-    String taskId = TASK_EXTENSION_POINT_ID;
-    //
-    // Register general tasks.
-    //
-    registerExtension(taskId, GetContentTask.DESCRIPTOR);
-    //
-    // Register Dart tasks.
-    //
-    registerExtension(taskId, BuildCompilationUnitElementTask.DESCRIPTOR);
-    registerExtension(taskId, BuildDirectiveElementsTask.DESCRIPTOR);
-    registerExtension(taskId, BuildEnumMemberElementsTask.DESCRIPTOR);
-    registerExtension(taskId, BuildExportNamespaceTask.DESCRIPTOR);
-    registerExtension(taskId, BuildLibraryElementTask.DESCRIPTOR);
-    registerExtension(taskId, BuildPublicNamespaceTask.DESCRIPTOR);
-    registerExtension(taskId, BuildSourceExportClosureTask.DESCRIPTOR);
-    registerExtension(taskId, BuildTypeProviderTask.DESCRIPTOR);
-    registerExtension(taskId, ComputeConstantDependenciesTask.DESCRIPTOR);
-    registerExtension(taskId, ComputeConstantValueTask.DESCRIPTOR);
-    registerExtension(
-        taskId, ComputeInferableStaticVariableDependenciesTask.DESCRIPTOR);
-    registerExtension(taskId, ComputeLibraryCycleTask.DESCRIPTOR);
-    registerExtension(taskId, ComputeRequiredConstantsTask.DESCRIPTOR);
-    registerExtension(taskId, ContainingLibrariesTask.DESCRIPTOR);
-    registerExtension(taskId, DartErrorsTask.DESCRIPTOR);
-    registerExtension(taskId, EvaluateUnitConstantsTask.DESCRIPTOR);
-    registerExtension(taskId, GatherUsedImportedElementsTask.DESCRIPTOR);
-    registerExtension(taskId, GatherUsedLocalElementsTask.DESCRIPTOR);
-    registerExtension(taskId, GenerateHintsTask.DESCRIPTOR);
-    registerExtension(taskId, GenerateLintsTask.DESCRIPTOR);
-    registerExtension(taskId, InferInstanceMembersInUnitTask.DESCRIPTOR);
-    registerExtension(taskId, InferStaticVariableTypesInUnitTask.DESCRIPTOR);
-    registerExtension(taskId, InferStaticVariableTypeTask.DESCRIPTOR);
-    registerExtension(taskId, LibraryErrorsReadyTask.DESCRIPTOR);
-    registerExtension(taskId, LibraryUnitErrorsTask.DESCRIPTOR);
-    registerExtension(taskId, ParseDartTask.DESCRIPTOR);
-    registerExtension(taskId, PartiallyResolveUnitReferencesTask.DESCRIPTOR);
-    registerExtension(taskId, ReadyLibraryElement2Task.DESCRIPTOR);
-    registerExtension(taskId, ReadyLibraryElement5Task.DESCRIPTOR);
-    registerExtension(taskId, ReadyLibraryElement7Task.DESCRIPTOR);
-    registerExtension(taskId, ReadyResolvedUnitTask.DESCRIPTOR);
-    registerExtension(taskId, ResolveConstantExpressionTask.DESCRIPTOR);
-    registerExtension(taskId, ResolveDirectiveElementsTask.DESCRIPTOR);
-    registerExtension(taskId, ResolvedUnit7InLibraryClosureTask.DESCRIPTOR);
-    registerExtension(taskId, ResolvedUnit7InLibraryTask.DESCRIPTOR);
-    registerExtension(taskId, ResolveInstanceFieldsInUnitTask.DESCRIPTOR);
-    registerExtension(taskId, ResolveLibraryReferencesTask.DESCRIPTOR);
-    registerExtension(taskId, ResolveLibraryTask.DESCRIPTOR);
-    registerExtension(taskId, ResolveLibraryTypeNamesTask.DESCRIPTOR);
-    registerExtension(taskId, ResolveTopLevelLibraryTypeBoundsTask.DESCRIPTOR);
-    registerExtension(taskId, ResolveTopLevelUnitTypeBoundsTask.DESCRIPTOR);
-    registerExtension(taskId, ResolveUnitTask.DESCRIPTOR);
-    registerExtension(taskId, ResolveUnitTypeNamesTask.DESCRIPTOR);
-    registerExtension(taskId, ResolveVariableReferencesTask.DESCRIPTOR);
-    registerExtension(taskId, ScanDartTask.DESCRIPTOR);
-    registerExtension(taskId, StrongModeVerifyUnitTask.DESCRIPTOR);
-    registerExtension(taskId, VerifyUnitTask.DESCRIPTOR);
-    //
-    // Register HTML tasks.
-    //
-    registerExtension(taskId, DartScriptsTask.DESCRIPTOR);
-    registerExtension(taskId, HtmlErrorsTask.DESCRIPTOR);
-    registerExtension(taskId, ParseHtmlTask.DESCRIPTOR);
-    //
-    // Register YAML tasks.
-    //
-    registerExtension(taskId, ParseYamlTask.DESCRIPTOR);
-  }
-
   void _registerWorkManagerFactoryExtensions(
       RegisterExtension registerExtension) {
     String taskId = WORK_MANAGER_EXTENSION_POINT_ID;
diff --git a/pkg/analyzer/lib/src/plugin/options_plugin.dart b/pkg/analyzer/lib/src/plugin/options_plugin.dart
deleted file mode 100644
index aceaf3b..0000000
--- a/pkg/analyzer/lib/src/plugin/options_plugin.dart
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library analyzer.src.plugin.options_plugin;
-
-import 'package:analyzer/plugin/options.dart';
-import 'package:analyzer/plugin/task.dart';
-import 'package:analyzer/src/task/options.dart';
-import 'package:plugin/plugin.dart';
-
-/// A plugin that defines the extension points and extensions that are defined
-/// by applications that want to consume options defined in the analysis
-/// options file.
-class OptionsPlugin implements Plugin {
-  /// The simple identifier of the extension point that allows plugins to
-  /// register new options processors.
-  static const String OPTIONS_PROCESSOR_EXTENSION_POINT = 'optionsProcessor';
-
-  /// The simple identifier of the extension point that allows plugins to
-  /// register new options validators.
-  static const String OPTIONS_VALIDATOR_EXTENSION_POINT = 'optionsValidator';
-
-  /// The unique identifier of this plugin.
-  static const String UNIQUE_IDENTIFIER = 'options.core';
-
-  /// The extension point that allows plugins to register new options
-  /// processors.
-  ExtensionPoint<OptionsProcessor> optionsProcessorExtensionPoint;
-
-  /// The extension point that allows plugins to register new options
-  /// validators.
-  ExtensionPoint<OptionsValidator> optionsValidatorExtensionPoint;
-
-  /// All contributed options processors.
-  List<OptionsProcessor> get optionsProcessors =>
-      optionsProcessorExtensionPoint?.extensions ?? const <OptionsProcessor>[];
-
-  /// All contributed options validators.
-  List<OptionsValidator> get optionsValidators =>
-      optionsValidatorExtensionPoint?.extensions ?? const <OptionsValidator>[];
-
-  @override
-  String get uniqueIdentifier => UNIQUE_IDENTIFIER;
-
-  @override
-  void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) {
-    optionsProcessorExtensionPoint = new ExtensionPoint<OptionsProcessor>(
-        this, OPTIONS_PROCESSOR_EXTENSION_POINT, null);
-    registerExtensionPoint(optionsProcessorExtensionPoint);
-    optionsValidatorExtensionPoint = new ExtensionPoint<OptionsValidator>(
-        this, OPTIONS_VALIDATOR_EXTENSION_POINT, null);
-    registerExtensionPoint(optionsValidatorExtensionPoint);
-  }
-
-  @override
-  void registerExtensions(RegisterExtension registerExtension) {
-    // Analyze options files.
-    registerExtension(
-        TASK_EXTENSION_POINT_ID, GenerateOptionsErrorsTask.DESCRIPTOR);
-    // Validate analyzer analysis options.
-    registerExtension(
-        OPTIONS_VALIDATOR_EXTENSION_POINT_ID, new AnalyzerOptionsValidator());
-  }
-}
diff --git a/pkg/analyzer/lib/src/plugin/plugin_configuration.dart b/pkg/analyzer/lib/src/plugin/plugin_configuration.dart
deleted file mode 100644
index 2137f11..0000000
--- a/pkg/analyzer/lib/src/plugin/plugin_configuration.dart
+++ /dev/null
@@ -1,198 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library analyzer.src.plugin.plugin_configuration;
-
-import 'package:analyzer/plugin/options.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:yaml/yaml.dart';
-
-const _analyzerOptionScope = 'analyzer';
-
-const _pluginOptionScope = 'plugins';
-
-/// Parse the given string into a plugin manifest.
-PluginManifest parsePluginManifestString(String manifestSource) {
-  var yaml = loadYaml(manifestSource);
-  if (yaml == null) {
-    return null;
-  }
-  _verifyMap(yaml, 'plugin manifest');
-  Iterable<String> pluginHost = _parseHosts(yaml['contributes_to']);
-  PluginInfo plugin = _parsePlugin(yaml);
-  return new PluginManifest(contributesTo: pluginHost, plugin: plugin);
-}
-
-String _asString(dynamic yaml) {
-  if (yaml != null && yaml is! String) {
-    throw new PluginConfigFormatException(
-        'Unable to parse pugin manifest, '
-        'expected `String`, got `${yaml.runtimeType}`',
-        yaml);
-  }
-  return yaml;
-}
-
-Iterable<String> _parseHosts(dynamic yaml) {
-  List<String> hosts = <String>[];
-  if (yaml is String) {
-    hosts.add(yaml);
-  } else if (yaml is YamlList) {
-    yaml.forEach((h) => hosts.add(_asString(h)));
-  }
-  return hosts;
-}
-
-PluginInfo _parsePlugin(dynamic yaml) {
-  if (yaml != null) {
-    _verifyMap(yaml, 'plugin manifest');
-    return new PluginInfo._fromYaml(details: yaml);
-  }
-  return null;
-}
-
-PluginInfo _processPluginMapping(dynamic name, dynamic details) {
-  if (name is String) {
-    if (details is String) {
-      return new PluginInfo(name: name, version: details);
-    }
-    if (details is YamlMap) {
-      return new PluginInfo._fromYaml(name: name, details: details);
-    }
-  }
-
-  return null;
-}
-
-_verifyMap(dynamic yaml, String context) {
-  if (yaml is! YamlMap) {
-    throw new PluginConfigFormatException(
-        'Unable to parse $context, '
-        'expected `YamlMap`, got `${yaml.runtimeType}`',
-        yaml);
-  }
-}
-
-/// A callback for error handling.
-typedef ErrorHandler(Exception e);
-
-/// Describes plugin configuration information as extracted from an
-/// analysis options map or plugin manifest.
-class PluginConfig {
-  final Iterable<PluginInfo> plugins;
-  PluginConfig(this.plugins);
-
-  /// Create a plugin configuration from an options map.
-  factory PluginConfig.fromOptions(Map<String, Object> options) {
-    List<PluginInfo> plugins = [];
-    var analyzerOptions = options[_analyzerOptionScope];
-    if (analyzerOptions != null) {
-      //TODO(pq): handle "raw" maps (https://github.com/dart-lang/sdk/issues/25126)
-      if (analyzerOptions is YamlMap) {
-        var pluginConfig = analyzerOptions[_pluginOptionScope];
-        if (pluginConfig is YamlMap) {
-          pluginConfig.forEach((name, details) {
-            var plugin = _processPluginMapping(name, details);
-            if (plugin != null) {
-              plugins.add(plugin);
-            }
-          });
-        } else {
-          // Anything but an empty list of plugins is treated as a format error.
-          if (pluginConfig != null) {
-            throw new PluginConfigFormatException(
-                'Unrecognized plugin config format, expected `YamlMap`, '
-                'got `${pluginConfig.runtimeType}`',
-                pluginConfig);
-          }
-        }
-      }
-    }
-
-    return new PluginConfig(plugins);
-  }
-}
-
-/// Thrown on bad plugin config format.
-class PluginConfigFormatException implements Exception {
-  /// Descriptive message.
-  final message;
-
-  /// The `plugin:` yaml node for generating detailed error feedback.
-  final yamlNode;
-  PluginConfigFormatException(this.message, this.yamlNode);
-}
-
-/// Extracts plugin config details from analysis options.
-class PluginConfigOptionsProcessor extends OptionsProcessor {
-  final ErrorHandler _errorHandler;
-
-  PluginConfig _config;
-
-  PluginConfigOptionsProcessor([this._errorHandler]);
-
-  /// The processed plugin config.
-  PluginConfig get config => _config;
-
-  @override
-  void onError(Exception exception) {
-    if (_errorHandler != null) {
-      _errorHandler(exception);
-    }
-  }
-
-  @override
-  void optionsProcessed(AnalysisContext context, Map<String, Object> options) {
-    _config = new PluginConfig.fromOptions(options);
-  }
-}
-
-/// Describes plugin information.
-class PluginInfo {
-  final String name;
-  final String className;
-  final String version;
-  final String libraryUri;
-  final String packageName;
-  final String path;
-  PluginInfo(
-      {this.name,
-      this.version,
-      this.className,
-      this.libraryUri,
-      this.packageName,
-      this.path});
-
-  factory PluginInfo._fromYaml({String name, YamlMap details}) =>
-      new PluginInfo(
-          name: name,
-          version: _asString(details['version']),
-          className: _asString(details['class_name']),
-          libraryUri: _asString(details['library_uri']),
-          packageName: _asString(details['package_name']),
-          path: _asString(details['path']));
-}
-
-/// Plugin manifests accompany plugin packages, providing
-/// configuration information for published plugins.
-///
-/// Provisionally, plugin manifests live in a file `plugin.yaml`
-/// at the root of the plugin package.
-///
-///     my_plugin/
-///       bin/
-///       lib/
-///       plugin.yaml
-///       pubspec.yaml
-///
-/// Provisional manifest file format:
-///
-///     class_name: MyAnalyzerPlugin
-///     library_uri: 'my_plugin/my_analyzer_plugin.dart'
-///     contributes_to: analyzer
-class PluginManifest {
-  PluginInfo plugin;
-  Iterable<String> contributesTo;
-  PluginManifest({this.plugin, this.contributesTo});
-}
diff --git a/pkg/analyzer/lib/src/summary/resynthesize.dart b/pkg/analyzer/lib/src/summary/resynthesize.dart
index 88dfc68..2b7fe82 100644
--- a/pkg/analyzer/lib/src/summary/resynthesize.dart
+++ b/pkg/analyzer/lib/src/summary/resynthesize.dart
@@ -219,6 +219,8 @@
         unitElement.source = librarySource;
         unitElement.librarySource = librarySource;
         libraryElement.createLoadLibraryFunction(typeProvider);
+        libraryElement.publicNamespace = new Namespace({});
+        libraryElement.exportNamespace = new Namespace({});
         return libraryElement;
       }
       UnlinkedUnit unlinkedSummary = _getUnlinkedSummaryOrNull(uri);
diff --git a/pkg/analyzer/lib/src/task/dart.dart b/pkg/analyzer/lib/src/task/dart.dart
index 9e3b31e..c386bb4 100644
--- a/pkg/analyzer/lib/src/task/dart.dart
+++ b/pkg/analyzer/lib/src/task/dart.dart
@@ -7,6 +7,7 @@
 import 'dart:collection';
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -1328,7 +1329,11 @@
     }
 
     EnumDeclaration firstEnum = findFirstEnum();
-    if (firstEnum != null && firstEnum.element.accessors.isEmpty) {
+    if (firstEnum != null &&
+        resolutionMap
+            .elementDeclaredByEnumDeclaration(firstEnum)
+            .accessors
+            .isEmpty) {
       EnumMemberBuilder builder = new EnumMemberBuilder(typeProvider);
       unit.accept(builder);
     }
@@ -1503,7 +1508,8 @@
     int partLength = partUnits.length;
     for (int i = 0; i < partLength; i++) {
       CompilationUnit partUnit = partUnits[i];
-      Source partSource = partUnit.element.source;
+      Source partSource =
+          resolutionMap.elementDeclaredByCompilationUnit(partUnit).source;
       partUnitMap[partSource] = partUnit;
     }
     //
@@ -3446,7 +3452,9 @@
     //
     if (context.analysisOptions.strongMode) {
       InstanceMemberInferrer inferrer = new InstanceMemberInferrer(
-          typeProvider, new InheritanceManager(unit.element.library),
+          typeProvider,
+          new InheritanceManager(
+              resolutionMap.elementDeclaredByCompilationUnit(unit).library),
           typeSystem: context.typeSystem);
       inferrer.inferCompilationUnit(unit.element);
     }
@@ -3511,7 +3519,8 @@
     AstNode node = new NodeLocator2(offset).searchWithin(unit);
     if (node == null) {
       Source variableSource = variable.source;
-      Source unitSource = unit.element.source;
+      Source unitSource =
+          resolutionMap.elementDeclaredByCompilationUnit(unit).source;
       if (variableSource != unitSource) {
         throw new AnalysisException(
             "Failed to find the AST node for the variable "
@@ -3526,7 +3535,8 @@
         node.getAncestor((AstNode ancestor) => ancestor is VariableDeclaration);
     if (declaration == null || declaration.name != node) {
       Source variableSource = variable.source;
-      Source unitSource = unit.element.source;
+      Source unitSource =
+          resolutionMap.elementDeclaredByCompilationUnit(unit).source;
       if (variableSource != unitSource) {
         if (declaration == null) {
           throw new AnalysisException(
@@ -6232,8 +6242,7 @@
         libraryElement,
         typeProvider,
         new InheritanceManager(libraryElement),
-        context.analysisOptions.enableSuperMixins,
-        context.analysisOptions.enableAssertMessage);
+        context.analysisOptions.enableSuperMixins);
     unit.accept(errorVerifier);
     //
     // Convert the pending errors into actual errors.
diff --git a/pkg/analyzer/lib/src/task/options.dart b/pkg/analyzer/lib/src/task/options.dart
index 4cf2afe..6995b2a 100644
--- a/pkg/analyzer/lib/src/task/options.dart
+++ b/pkg/analyzer/lib/src/task/options.dart
@@ -14,6 +14,10 @@
 import 'package:analyzer/src/generated/java_engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/utilities_general.dart';
+import 'package:analyzer/src/lint/config.dart';
+import 'package:analyzer/src/lint/linter.dart';
+import 'package:analyzer/src/lint/options_rule_validator.dart';
+import 'package:analyzer/src/lint/registry.dart';
 import 'package:analyzer/src/task/general.dart';
 import 'package:analyzer/src/util/yaml.dart';
 import 'package:analyzer/task/general.dart';
@@ -35,12 +39,6 @@
   _processor.applyToAnalysisOptions(options, optionMap);
 }
 
-/// Configure this [context] based on configuration details specified in
-/// the given [options].  If [options] is `null`, default values are applied.
-void configureContextOptions(
-        AnalysisContext context, Map<String, Object> options) =>
-    _processor.configure(context, options);
-
 /// `analyzer` analysis options constants.
 class AnalyzerOptions {
   static const String analyzer = 'analyzer';
@@ -393,16 +391,16 @@
 
 /// Validates options defined in an analysis options file.
 class OptionsFileValidator {
-  // TODO(pq): move to an extension point.
+  /// The source being validated.
+  final Source source;
+
   final List<OptionsValidator> _validators = [
     new AnalyzerOptionsValidator(),
-    new LinterOptionsValidator()
+    new LinterOptionsValidator(),
+    new LinterRuleOptionsValidator()
   ];
 
-  final Source source;
-  OptionsFileValidator(this.source) {
-    _validators.addAll(AnalysisEngine.instance.optionsPlugin.optionsValidators);
-  }
+  OptionsFileValidator(this.source);
 
   List<AnalysisError> validate(Map<String, YamlNode> options) {
     RecordingErrorListener recorder = new RecordingErrorListener();
@@ -513,109 +511,13 @@
       var excludes = analyzer[AnalyzerOptions.exclude];
       _applyExcludes(options, excludes);
     }
-  }
 
-  /// Configure [context] based on the given [options] (which can be `null`
-  /// to restore [defaults]).
-  void configure(AnalysisContext context, Map<String, Object> options) {
-    if (options == null) {
-      options = defaults;
-    }
-
-    var analyzer = options[AnalyzerOptions.analyzer];
-    if (analyzer is Map) {
-      // Set strong mode (default is false).
-      var strongMode = analyzer[AnalyzerOptions.strong_mode];
-      setStrongMode(context, strongMode);
-
-      // Set filters.
-      var filters = analyzer[AnalyzerOptions.errors];
-      setProcessors(context, filters);
-
-      // Process language options.
-      var language = analyzer[AnalyzerOptions.language];
-      setLanguageOptions(context, language);
-
-      // Process excludes.
-      var excludes = analyzer[AnalyzerOptions.exclude];
-      setExcludes(context, excludes);
-    }
-  }
-
-  void setExcludes(AnalysisContext context, Object excludes) {
-    if (excludes is YamlList) {
-      List<String> excludeList = toStringList(excludes);
-      if (excludeList != null) {
-        AnalysisOptionsImpl options =
-            new AnalysisOptionsImpl.from(context.analysisOptions);
-        options.excludePatterns = excludeList;
-        context.analysisOptions = options;
-      }
-    }
-  }
-
-  void setLanguageOption(
-      AnalysisContext context, Object feature, Object value) {
-    if (feature == AnalyzerOptions.enableAssertInitializer) {
-      if (isTrue(value)) {
-        AnalysisOptionsImpl options =
-            new AnalysisOptionsImpl.from(context.analysisOptions);
-        options.enableAssertInitializer = true;
-        context.analysisOptions = options;
-      }
-    }
-    if (feature == AnalyzerOptions.enableStrictCallChecks) {
-      if (isTrue(value)) {
-        AnalysisOptionsImpl options =
-            new AnalysisOptionsImpl.from(context.analysisOptions);
-        options.enableStrictCallChecks = true;
-        context.analysisOptions = options;
-      }
-    }
-    if (feature == AnalyzerOptions.enableSuperMixins) {
-      if (isTrue(value)) {
-        AnalysisOptionsImpl options =
-            new AnalysisOptionsImpl.from(context.analysisOptions);
-        options.enableSuperMixins = true;
-        context.analysisOptions = options;
-      }
-    }
-  }
-
-  void setLanguageOptions(AnalysisContext context, Object configs) {
-    if (configs is YamlMap) {
-      configs.nodes.forEach((k, v) {
-        if (k is YamlScalar && v is YamlScalar) {
-          String feature = k.value?.toString();
-          setLanguageOption(context, feature, v.value);
-        }
-      });
-    } else if (configs is Map) {
-      configs.forEach((k, v) => setLanguageOption(context, k, v));
-    }
-  }
-
-  void setProcessors(AnalysisContext context, Object codes) {
-    ErrorConfig config = new ErrorConfig(codes);
-    AnalysisOptionsImpl options =
-        new AnalysisOptionsImpl.from(context.analysisOptions);
-    options.errorProcessors = config.processors;
-    context.analysisOptions = options;
-  }
-
-  void setStrongMode(AnalysisContext context, Object strongMode) {
-    if (strongMode is Map) {
-      AnalysisOptionsImpl options =
-          new AnalysisOptionsImpl.from(context.analysisOptions);
-      _applyStrongOptions(options, strongMode);
-      context.analysisOptions = options;
-    } else {
-      strongMode = strongMode is bool ? strongMode : false;
-      if (context.analysisOptions.strongMode != strongMode) {
-        AnalysisOptionsImpl options =
-            new AnalysisOptionsImpl.from(context.analysisOptions);
-        options.strongMode = strongMode;
-        context.analysisOptions = options;
+    LintConfig config = parseConfig(optionMap);
+    if (config != null) {
+      Iterable<LintRule> lintRules = Registry.ruleRegistry.enabled(config);
+      if (lintRules.isNotEmpty) {
+        options.lint = true;
+        options.lintRules = lintRules.toList();
       }
     }
   }
@@ -635,6 +537,8 @@
     if (boolValue != null) {
       if (feature == AnalyzerOptions.enableAssertInitializer) {
         options.enableAssertInitializer = boolValue;
+      } else if (feature == AnalyzerOptions.enableStrictCallChecks) {
+        options.enableStrictCallChecks = true;
       } else if (feature == AnalyzerOptions.enableSuperMixins) {
         options.enableSuperMixins = boolValue;
       }
diff --git a/pkg/analyzer/lib/src/task/strong/checker.dart b/pkg/analyzer/lib/src/task/strong/checker.dart
index 6f9ac6e..8beac15 100644
--- a/pkg/analyzer/lib/src/task/strong/checker.dart
+++ b/pkg/analyzer/lib/src/task/strong/checker.dart
@@ -8,6 +8,7 @@
 
 import 'package:analyzer/analyzer.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart' show TokenType;
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
@@ -602,7 +603,7 @@
   @override
   void visitRedirectingConstructorInvocation(
       RedirectingConstructorInvocation node) {
-    var type = node.staticElement?.type;
+    var type = resolutionMap.staticElementForConstructorReference(node)?.type;
     // TODO(leafp): There's a TODO in visitRedirectingConstructorInvocation
     // in the element_resolver to handle the case that the element is null
     // and emit an error.  In the meantime, just be defensive here.
@@ -622,7 +623,7 @@
   void visitSuperConstructorInvocation(SuperConstructorInvocation node) {
     var element = node.staticElement;
     if (element != null) {
-      var type = node.staticElement.type;
+      var type = resolutionMap.staticElementForConstructorReference(node).type;
       checkArgumentList(node.argumentList, type);
     }
     node.visitChildren(this);
@@ -639,14 +640,17 @@
 
   @override
   Object visitVariableDeclaration(VariableDeclaration node) {
+    VariableElement variableElement = node == null
+        ? null
+        : resolutionMap.elementDeclaredByVariableDeclaration(node);
     if (!node.isConst &&
         !node.isFinal &&
         node.initializer == null &&
-        rules.isNonNullableType(node?.element?.type)) {
+        rules.isNonNullableType(variableElement?.type)) {
       _recordMessage(
           node,
           StaticTypeWarningCode.NON_NULLABLE_FIELD_NOT_INITIALIZED,
-          [node.name, node?.element?.type]);
+          [node.name, variableElement?.type]);
     }
     return super.visitVariableDeclaration(node);
   }
@@ -684,7 +688,7 @@
   void _checkCompoundAssignment(AssignmentExpression expr) {
     var op = expr.operator.type;
     assert(op.isAssignmentOperator && op != TokenType.EQ);
-    var methodElement = expr.staticElement;
+    var methodElement = resolutionMap.staticElementForMethodReference(expr);
     if (methodElement == null) {
       // Dynamic invocation.
       _recordDynamicInvoke(expr, expr.leftHandSide);
@@ -719,55 +723,6 @@
     }
   }
 
-  /// Returns true if we need an implicit cast of [expr] from [from] type to
-  /// [to] type, otherwise returns false.
-  ///
-  /// If [from] is omitted, uses the static type of [expr].
-  bool _needsImplicitCast(Expression expr, DartType to, {DartType from}) {
-    from ??= _getDefiniteType(expr);
-
-    if (!_checkNonNullAssignment(expr, to, from)) return false;
-
-    // We can use anything as void.
-    if (to.isVoid) return false;
-
-    // fromT <: toT, no coercion needed.
-    if (rules.isSubtypeOf(from, to)) return false;
-
-    // Note: a function type is never assignable to a class per the Dart
-    // spec - even if it has a compatible call method.  We disallow as
-    // well for consistency.
-    if (from is FunctionType && rules.getCallMethodType(to) != null) {
-      return false;
-    }
-
-    // Downcast if toT <: fromT
-    if (rules.isSubtypeOf(to, from)) {
-      return true;
-    }
-
-    // Anything else is an illegal sideways cast.
-    // However, these will have been reported already in error_verifier, so we
-    // don't need to report them again.
-    return false;
-  }
-
-  /// Checks if an implicit cast of [expr] from [from] type to [to] type is
-  /// needed, and if so records it.
-  ///
-  /// If [from] is omitted, uses the static type of [expr].
-  ///
-  /// 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}) {
-    from ??= _getDefiniteType(expr);
-
-    if (_needsImplicitCast(expr, to, from: from)) {
-      _recordImplicitCast(expr, to, from: from, opAssign: opAssign);
-    }
-  }
-
   void _checkFieldAccess(AstNode node, AstNode target, SimpleIdentifier field) {
     if (field.staticElement == null &&
         !typeProvider.isObjectMember(field.name)) {
@@ -786,7 +741,10 @@
     if (node.body is! BlockFunctionBody) {
       return;
     }
-    if (node.element.returnType.isDynamic) {
+    if (resolutionMap
+        .elementDeclaredByFunctionExpression(node)
+        .returnType
+        .isDynamic) {
       return;
     }
     // Find the enclosing variable declaration whose inferred type might depend
@@ -875,6 +833,22 @@
         [declElement.name]);
   }
 
+  /// Checks if an implicit cast of [expr] from [from] type to [to] type is
+  /// needed, and if so records it.
+  ///
+  /// If [from] is omitted, uses the static type of [expr].
+  ///
+  /// 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}) {
+    from ??= _getDefiniteType(expr);
+
+    if (_needsImplicitCast(expr, to, from: from)) {
+      _recordImplicitCast(expr, to, from: from, opAssign: opAssign);
+    }
+  }
+
   /// Checks if the assignment is valid with respect to non-nullable types.
   /// Returns `false` if a nullable expression is assigned to a variable of
   /// non-nullable type and `true` otherwise.
@@ -1034,6 +1008,39 @@
     return rules.anyParameterType(ft, (pt) => pt.isDynamic);
   }
 
+  /// Returns true if we need an implicit cast of [expr] from [from] type to
+  /// [to] type, otherwise returns false.
+  ///
+  /// If [from] is omitted, uses the static type of [expr].
+  bool _needsImplicitCast(Expression expr, DartType to, {DartType from}) {
+    from ??= _getDefiniteType(expr);
+
+    if (!_checkNonNullAssignment(expr, to, from)) return false;
+
+    // We can use anything as void.
+    if (to.isVoid) return false;
+
+    // fromT <: toT, no coercion needed.
+    if (rules.isSubtypeOf(from, to)) return false;
+
+    // Note: a function type is never assignable to a class per the Dart
+    // spec - even if it has a compatible call method.  We disallow as
+    // well for consistency.
+    if (from is FunctionType && rules.getCallMethodType(to) != null) {
+      return false;
+    }
+
+    // Downcast if toT <: fromT
+    if (rules.isSubtypeOf(to, from)) {
+      return true;
+    }
+
+    // Anything else is an illegal sideways cast.
+    // However, these will have been reported already in error_verifier, so we
+    // don't need to report them again.
+    return false;
+  }
+
   void _recordDynamicInvoke(AstNode node, Expression target) {
     _recordMessage(node, StrongModeCode.DYNAMIC_INVOKE, [node]);
     // TODO(jmesserly): we may eventually want to record if the whole operation
@@ -1141,7 +1148,9 @@
           ? node.firstTokenAfterCommentAndMetadata.offset
           : node.offset;
       int length = node.end - begin;
-      var source = (node.root as CompilationUnit).element.source;
+      var source = resolutionMap
+          .elementDeclaredByCompilationUnit(node.root as CompilationUnit)
+          .source;
       var error =
           new AnalysisError(source, begin, length, errorCode, arguments);
       reporter.onError(error);
@@ -1161,7 +1170,8 @@
         rules = checker.rules;
 
   void check(ClassDeclaration node) {
-    if (node.element.type.isObject) return;
+    if (resolutionMap.elementDeclaredByClassDeclaration(node).type.isObject)
+      return;
     _checkSuperOverrides(node);
     _checkMixinApplicationOverrides(node);
     _checkAllInterfaceOverrides(node);
@@ -1197,7 +1207,7 @@
     // 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 = node.element.type;
+    var type = resolutionMap.elementDeclaredByClassDeclaration(node).type;
     type.interfaces.forEach((i) => find(i, localInterfaces));
     _checkInterfacesOverrides(node, localInterfaces, seen,
         includeParents: true);
@@ -1254,7 +1264,7 @@
         if (member.isStatic) {
           continue;
         }
-        var method = member.element;
+        var method = resolutionMap.elementDeclaredByMethodDeclaration(member);
         if (seen.contains(method.name)) {
           continue;
         }
@@ -1310,7 +1320,9 @@
       bool includeParents: true,
       AstNode errorLocation}) {
     var node = cls is ClassDeclaration ? cls : null;
-    var type = cls is InterfaceType ? cls : node.element.type;
+    var type = cls is InterfaceType
+        ? cls
+        : resolutionMap.elementDeclaredByClassDeclaration(node).type;
 
     if (visited == null) {
       visited = new Set<InterfaceType>();
@@ -1365,7 +1377,7 @@
   ///      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(ClassDeclaration node) {
-    var type = node.element.type;
+    var type = resolutionMap.elementDeclaredByClassDeclaration(node).type;
     var parent = type.superclass;
     var mixins = type.mixins;
 
@@ -1484,7 +1496,7 @@
   ///     }
   void _checkSuperOverrides(ClassDeclaration node) {
     var seen = new Set<String>();
-    var current = node.element.type;
+    var current = resolutionMap.elementDeclaredByClassDeclaration(node).type;
     var visited = new Set<InterfaceType>();
     do {
       visited.add(current);
diff --git a/pkg/analyzer/lib/src/task/strong_mode.dart b/pkg/analyzer/lib/src/task/strong_mode.dart
index 37c91cf..0917684 100644
--- a/pkg/analyzer/lib/src/task/strong_mode.dart
+++ b/pkg/analyzer/lib/src/task/strong_mode.dart
@@ -88,14 +88,14 @@
    * compilation [unit].
    */
   void inferCompilationUnit(CompilationUnitElement unit) {
-    unit.types.forEach((ClassElement classElement) {
+    for (ClassElement classElement in unit.types) {
       try {
         _inferClass(classElement);
       } on _CycleException {
         // This is a short circuit return to prevent types that inherit from
         // types containing a circular reference from being inferred.
       }
-    });
+    }
   }
 
   /**
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
index 4b4bf3d..098ff94 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
@@ -256,19 +256,6 @@
     verify([source]);
   }
 
-  void test_assertWithExtraArgument() {
-    // TODO(paulberry): once DEP 37 is turned on by default, this test should
-    // be removed.
-    Source source = addSource('''
-f(bool x) {
-  assert(x, 'foo');
-}
-''');
-    computeLibrarySourceErrors(source);
-    assertErrors(source, [CompileTimeErrorCode.EXTRA_ARGUMENT_TO_ASSERT]);
-    verify([source]);
-  }
-
   void test_async_used_as_identifier_in_annotation() {
     Source source = addSource('''
 const int async = 0;
@@ -4609,9 +4596,7 @@
   }
 
   void test_nonConstValueInInitializer_assert_message() {
-    resetWithOptions(new AnalysisOptionsImpl()
-      ..enableAssertInitializer = true
-      ..enableAssertMessage = true);
+    resetWithOptions(new AnalysisOptionsImpl()..enableAssertInitializer = true);
     Source source = addSource(r'''
 class A {
   const A(int i) : assert(i < 0, 'isNegative = ${i.isNegative}');
diff --git a/pkg/analyzer/test/generated/element_resolver_test.dart b/pkg/analyzer/test/generated/element_resolver_test.dart
index 42f457d..277a2c7 100644
--- a/pkg/analyzer/test/generated/element_resolver_test.dart
+++ b/pkg/analyzer/test/generated/element_resolver_test.dart
@@ -5,6 +5,7 @@
 library analyzer.test.generated.element_resolver_test;
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/standard_ast_factory.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -49,10 +50,11 @@
         Element annotationElement) {
       expect(name1, isNotNull);
       expect(name1.staticElement, new isInstanceOf<ClassElement>());
-      expect(name1.staticElement.displayName, 'A');
+      expect(resolutionMap.staticElementForIdentifier(name1).displayName, 'A');
       expect(name2, isNotNull);
       expect(name2.staticElement, new isInstanceOf<ConstructorElement>());
-      expect(name2.staticElement.displayName, 'named');
+      expect(
+          resolutionMap.staticElementForIdentifier(name2).displayName, 'named');
       expect(name3, isNull);
       if (annotationElement is ConstructorElement) {
         expect(annotationElement, same(name2.staticElement));
@@ -80,13 +82,14 @@
         Element annotationElement) {
       expect(name1, isNotNull);
       expect(name1.staticElement, new isInstanceOf<PrefixElement>());
-      expect(name1.staticElement.displayName, 'p');
+      expect(resolutionMap.staticElementForIdentifier(name1).displayName, 'p');
       expect(name2, isNotNull);
       expect(name2.staticElement, new isInstanceOf<ClassElement>());
-      expect(name2.staticElement.displayName, 'A');
+      expect(resolutionMap.staticElementForIdentifier(name2).displayName, 'A');
       expect(name3, isNotNull);
       expect(name3.staticElement, new isInstanceOf<ConstructorElement>());
-      expect(name3.staticElement.displayName, 'named');
+      expect(
+          resolutionMap.staticElementForIdentifier(name3).displayName, 'named');
       if (annotationElement is ConstructorElement) {
         expect(annotationElement, same(name3.staticElement));
         expect(annotationElement.enclosingElement, name2.staticElement);
@@ -113,13 +116,13 @@
         Element annotationElement) {
       expect(name1, isNotNull);
       expect(name1.staticElement, new isInstanceOf<PrefixElement>());
-      expect(name1.staticElement.displayName, 'p');
+      expect(resolutionMap.staticElementForIdentifier(name1).displayName, 'p');
       expect(name2, isNotNull);
       expect(name2.staticElement, new isInstanceOf<ClassElement>());
-      expect(name2.staticElement.displayName, 'A');
+      expect(resolutionMap.staticElementForIdentifier(name2).displayName, 'A');
       expect(name3, isNotNull);
       expect(name3.staticElement, new isInstanceOf<PropertyAccessorElement>());
-      expect(name3.staticElement.displayName, 'V');
+      expect(resolutionMap.staticElementForIdentifier(name3).displayName, 'V');
       if (annotationElement is PropertyAccessorElement) {
         expect(annotationElement, same(name3.staticElement));
         expect(annotationElement.enclosingElement, name2.staticElement);
@@ -145,10 +148,10 @@
         Element annotationElement) {
       expect(name1, isNotNull);
       expect(name1.staticElement, new isInstanceOf<PrefixElement>());
-      expect(name1.staticElement.displayName, 'p');
+      expect(resolutionMap.staticElementForIdentifier(name1).displayName, 'p');
       expect(name2, isNotNull);
       expect(name2.staticElement, new isInstanceOf<ClassElement>());
-      expect(name2.staticElement.displayName, 'A');
+      expect(resolutionMap.staticElementForIdentifier(name2).displayName, 'A');
       expect(name3, isNull);
       if (annotationElement is ConstructorElement) {
         expect(annotationElement.enclosingElement, name2.staticElement);
@@ -175,10 +178,10 @@
         Element annotationElement) {
       expect(name1, isNotNull);
       expect(name1.staticElement, new isInstanceOf<ClassElement>());
-      expect(name1.staticElement.displayName, 'A');
+      expect(resolutionMap.staticElementForIdentifier(name1).displayName, 'A');
       expect(name2, isNotNull);
       expect(name2.staticElement, new isInstanceOf<PropertyAccessorElement>());
-      expect(name2.staticElement.displayName, 'V');
+      expect(resolutionMap.staticElementForIdentifier(name2).displayName, 'V');
       expect(name3, isNull);
       if (annotationElement is PropertyAccessorElement) {
         expect(annotationElement, same(name2.staticElement));
@@ -205,7 +208,7 @@
         Element annotationElement) {
       expect(name1, isNotNull);
       expect(name1.staticElement, new isInstanceOf<ClassElement>());
-      expect(name1.staticElement.displayName, 'A');
+      expect(resolutionMap.staticElementForIdentifier(name1).displayName, 'A');
       expect(name2, isNull);
       expect(name3, isNull);
       if (annotationElement is ConstructorElement) {
@@ -231,7 +234,7 @@
         Element annotationElement) {
       expect(name1, isNotNull);
       expect(name1.staticElement, new isInstanceOf<PropertyAccessorElement>());
-      expect(name1.staticElement.displayName, 'V');
+      expect(resolutionMap.staticElementForIdentifier(name1).displayName, 'V');
       expect(name2, isNull);
       expect(name3, isNull);
       if (annotationElement is PropertyAccessorElement) {
@@ -258,10 +261,10 @@
         Element annotationElement) {
       expect(name1, isNotNull);
       expect(name1.staticElement, new isInstanceOf<PrefixElement>());
-      expect(name1.staticElement.displayName, 'p');
+      expect(resolutionMap.staticElementForIdentifier(name1).displayName, 'p');
       expect(name2, isNotNull);
       expect(name2.staticElement, new isInstanceOf<PropertyAccessorElement>());
-      expect(name2.staticElement.displayName, 'V');
+      expect(resolutionMap.staticElementForIdentifier(name2).displayName, 'V');
       expect(name3, isNull);
       if (annotationElement is PropertyAccessorElement) {
         expect(annotationElement, same(name2.staticElement));
@@ -690,7 +693,8 @@
     parameterElement.type = intType;
     parameter.identifier.staticElement = parameterElement;
     _resolveInClass(parameter, classA);
-    expect(parameter.element.type, same(intType));
+    expect(resolutionMap.elementDeclaredByFormalParameter(parameter).type,
+        same(intType));
   }
 
   void test_visitImportDirective_noCombinators_noPrefix() {
diff --git a/pkg/analyzer/test/generated/engine_test.dart b/pkg/analyzer/test/generated/engine_test.dart
index 93b3108..5822a2d 100644
--- a/pkg/analyzer/test/generated/engine_test.dart
+++ b/pkg/analyzer/test/generated/engine_test.dart
@@ -42,7 +42,6 @@
     modifiedOptions.dart2jsHint = true;
     modifiedOptions.disableCacheFlushing = true;
     modifiedOptions.enableAssertInitializer = true;
-    modifiedOptions.enableAssertMessage = true;
     modifiedOptions.enableLazyAssignmentOperators = true;
     modifiedOptions.enableStrictCallChecks = true;
     modifiedOptions.enableSuperMixins = true;
@@ -71,8 +70,6 @@
         defaultOptions.disableCacheFlushing);
     expect(modifiedOptions.enableAssertInitializer,
         defaultOptions.enableAssertInitializer);
-    expect(modifiedOptions.enableAssertMessage,
-        defaultOptions.enableAssertMessage);
     expect(modifiedOptions.enableLazyAssignmentOperators,
         defaultOptions.enableLazyAssignmentOperators);
     expect(modifiedOptions.enableStrictCallChecks,
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 067627d..8ad198f 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -5,6 +5,7 @@
 library analyzer.test.generated.non_error_resolver_test;
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/error/codes.dart';
@@ -373,7 +374,6 @@
   }
 
   void test_assert_with_message_await() {
-    resetWithOptions(new AnalysisOptionsImpl()..enableAssertMessage = true);
     Source source = addSource('''
 import 'dart:async';
 f() async {
@@ -387,7 +387,6 @@
   }
 
   void test_assert_with_message_dynamic() {
-    resetWithOptions(new AnalysisOptionsImpl()..enableAssertMessage = true);
     Source source = addSource('''
 f() {
   assert(false, g());
@@ -400,7 +399,6 @@
   }
 
   void test_assert_with_message_non_string() {
-    resetWithOptions(new AnalysisOptionsImpl()..enableAssertMessage = true);
     Source source = addSource('''
 f() {
   assert(false, 3);
@@ -412,7 +410,6 @@
   }
 
   void test_assert_with_message_null() {
-    resetWithOptions(new AnalysisOptionsImpl()..enableAssertMessage = true);
     Source source = addSource('''
 f() {
   assert(false, null);
@@ -424,7 +421,6 @@
   }
 
   void test_assert_with_message_string() {
-    resetWithOptions(new AnalysisOptionsImpl()..enableAssertMessage = true);
     Source source = addSource('''
 f() {
   assert(false, 'message');
@@ -436,7 +432,6 @@
   }
 
   void test_assert_with_message_suppresses_unused_var_hint() {
-    resetWithOptions(new AnalysisOptionsImpl()..enableAssertMessage = true);
     Source source = addSource('''
 f() {
   String message = 'msg';
@@ -1038,7 +1033,8 @@
     assertNoErrors(source);
     verify([source]);
     CompilationUnit unit = _getResolvedLibraryUnit(source);
-    ClassElement classC = unit.element.getType('C');
+    ClassElement classC =
+        resolutionMap.elementDeclaredByCompilationUnit(unit).getType('C');
     expect(classC.documentationComment, isNotNull);
   }
 
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index e87206b..0a01df5 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -7,6 +7,7 @@
 import 'dart:collection';
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/standard_ast_factory.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
@@ -479,9 +480,12 @@
           buffer.write("  ");
           buffer.write(expression.toString());
           buffer.write(" [");
-          buffer.write(expression.staticType.displayName);
+          buffer.write(
+              resolutionMap.staticTypeForExpression(expression).displayName);
           buffer.write(", ");
-          buffer.write(expression.propagatedType.displayName);
+          buffer.write(resolutionMap
+              .propagatedTypeForExpression(expression)
+              .displayName);
           buffer.writeln("]");
           buffer.write("    ");
           buffer.write(_getFileName(expression));
@@ -538,7 +542,8 @@
   Object visitPrefixedIdentifier(PrefixedIdentifier node) {
     // In cases where we have a prefixed identifier where the prefix is dynamic,
     // we don't want to assert that the node will have a type.
-    if (node.staticType == null && node.prefix.staticType.isDynamic) {
+    if (node.staticType == null &&
+        resolutionMap.staticTypeForExpression(node.prefix).isDynamic) {
       return null;
     }
     return super.visitPrefixedIdentifier(node);
@@ -589,7 +594,10 @@
       if (root is CompilationUnit) {
         CompilationUnit rootCU = root;
         if (rootCU.element != null) {
-          return rootCU.element.source.fullName;
+          return resolutionMap
+              .elementDeclaredByCompilationUnit(rootCU)
+              .source
+              .fullName;
         } else {
           return "<unknown file- CompilationUnit.getElement() returned null>";
         }
@@ -1085,7 +1093,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
-    InterfaceType typeA = classA.element.type;
+    InterfaceType typeA =
+        resolutionMap.elementDeclaredByClassDeclaration(classA).type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1108,7 +1117,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
-    InterfaceType typeA = classA.element.type;
+    InterfaceType typeA =
+        resolutionMap.elementDeclaredByClassDeclaration(classA).type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1203,7 +1213,8 @@
     CompilationUnit unit = resolveCompilationUnit(source, library);
     SimpleIdentifier identifier = EngineTestCase.findNode(
         unit, code, "context", (node) => node is SimpleIdentifier);
-    expect(identifier.propagatedType.name, "CanvasRenderingContext2D");
+    expect(resolutionMap.propagatedTypeForExpression(identifier).name,
+        "CanvasRenderingContext2D");
   }
 
   void test_forEach() {
@@ -1656,7 +1667,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
-    InterfaceType typeA = classA.element.type;
+    InterfaceType typeA =
+        resolutionMap.elementDeclaredByClassDeclaration(classA).type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1686,7 +1698,7 @@
     InterfaceType typeA;
     {
       ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
-      typeA = classA.element.type;
+      typeA = resolutionMap.elementDeclaredByClassDeclaration(classA).type;
     }
     // verify "f"
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
@@ -1749,7 +1761,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
-    InterfaceType typeA = classA.element.type;
+    InterfaceType typeA =
+        resolutionMap.elementDeclaredByClassDeclaration(classA).type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1772,7 +1785,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
-    InterfaceType typeA = classA.element.type;
+    InterfaceType typeA =
+        resolutionMap.elementDeclaredByClassDeclaration(classA).type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1797,7 +1811,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
-    InterfaceType typeA = classA.element.type;
+    InterfaceType typeA =
+        resolutionMap.elementDeclaredByClassDeclaration(classA).type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1846,7 +1861,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
-    InterfaceType typeA = classA.element.type;
+    InterfaceType typeA =
+        resolutionMap.elementDeclaredByClassDeclaration(classA).type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1868,7 +1884,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
-    InterfaceType typeA = classA.element.type;
+    InterfaceType typeA =
+        resolutionMap.elementDeclaredByClassDeclaration(classA).type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1895,7 +1912,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
-    InterfaceType typeA = classA.element.type;
+    InterfaceType typeA =
+        resolutionMap.elementDeclaredByClassDeclaration(classA).type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1920,7 +1938,8 @@
     assertNoErrors(source);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
-    InterfaceType typeA = classA.element.type;
+    InterfaceType typeA =
+        resolutionMap.elementDeclaredByClassDeclaration(classA).type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1943,7 +1962,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
-    InterfaceType typeA = classA.element.type;
+    InterfaceType typeA =
+        resolutionMap.elementDeclaredByClassDeclaration(classA).type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -1966,7 +1986,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
-    InterfaceType typeA = classA.element.type;
+    InterfaceType typeA =
+        resolutionMap.elementDeclaredByClassDeclaration(classA).type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
     BlockFunctionBody body =
         function.functionExpression.body as BlockFunctionBody;
@@ -2416,17 +2437,28 @@
     ReturnStatement statement = body.block.statements[11] as ReturnStatement;
     NodeList<Expression> elements =
         (statement.expression as ListLiteral).elements;
-    expect(elements[0].propagatedType.name, "AnchorElement");
-    expect(elements[1].propagatedType.name, "AnchorElement");
-    expect(elements[2].propagatedType.name, "BodyElement");
-    expect(elements[3].propagatedType.name, "ButtonElement");
-    expect(elements[4].propagatedType.name, "DivElement");
-    expect(elements[5].propagatedType.name, "InputElement");
-    expect(elements[6].propagatedType.name, "SelectElement");
-    expect(elements[7].propagatedType.name, "DivElement");
-    expect(elements[8].propagatedType.name, "Element");
-    expect(elements[9].propagatedType.name, "Element");
-    expect(elements[10].propagatedType.name, "Element");
+    expect(resolutionMap.propagatedTypeForExpression(elements[0]).name,
+        "AnchorElement");
+    expect(resolutionMap.propagatedTypeForExpression(elements[1]).name,
+        "AnchorElement");
+    expect(resolutionMap.propagatedTypeForExpression(elements[2]).name,
+        "BodyElement");
+    expect(resolutionMap.propagatedTypeForExpression(elements[3]).name,
+        "ButtonElement");
+    expect(resolutionMap.propagatedTypeForExpression(elements[4]).name,
+        "DivElement");
+    expect(resolutionMap.propagatedTypeForExpression(elements[5]).name,
+        "InputElement");
+    expect(resolutionMap.propagatedTypeForExpression(elements[6]).name,
+        "SelectElement");
+    expect(resolutionMap.propagatedTypeForExpression(elements[7]).name,
+        "DivElement");
+    expect(
+        resolutionMap.propagatedTypeForExpression(elements[8]).name, "Element");
+    expect(
+        resolutionMap.propagatedTypeForExpression(elements[9]).name, "Element");
+    expect(resolutionMap.propagatedTypeForExpression(elements[10]).name,
+        "Element");
   }
 }
 
diff --git a/pkg/analyzer/test/generated/resolver_test_case.dart b/pkg/analyzer/test/generated/resolver_test_case.dart
index 5cd095d..8de57ce 100644
--- a/pkg/analyzer/test/generated/resolver_test_case.dart
+++ b/pkg/analyzer/test/generated/resolver_test_case.dart
@@ -5,6 +5,7 @@
 library analyzer.test.generated.resolver_test_case;
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -232,8 +233,8 @@
     if (node.name == "void") {
       return null;
     }
-    if (node.staticType != null &&
-        node.staticType.isDynamic &&
+    if (resolutionMap.staticTypeForExpression(node) != null &&
+        resolutionMap.staticTypeForExpression(node).isDynamic &&
         node.staticElement == null) {
       return null;
     }
@@ -273,7 +274,10 @@
       if (root is CompilationUnit) {
         CompilationUnit rootCU = root;
         if (rootCU.element != null) {
-          return rootCU.element.source.fullName;
+          return resolutionMap
+              .elementDeclaredByCompilationUnit(rootCU)
+              .source
+              .fullName;
         } else {
           return "<unknown file- CompilationUnit.getElement() returned null>";
         }
@@ -670,7 +674,7 @@
           resolveSource2("/lib${i + 1}.dart", sourceTexts[i]);
       // reference the source if this is the last source
       if (i + 1 == sourceTexts.length) {
-        return unit.element.source;
+        return resolutionMap.elementDeclaredByCompilationUnit(unit).source;
       }
     }
     return null;
diff --git a/pkg/analyzer/test/generated/simple_resolver_test.dart b/pkg/analyzer/test/generated/simple_resolver_test.dart
index 4df27be..620bc1f 100644
--- a/pkg/analyzer/test/generated/simple_resolver_test.dart
+++ b/pkg/analyzer/test/generated/simple_resolver_test.dart
@@ -5,6 +5,7 @@
 library analyzer.test.generated.simple_resolver_test;
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -748,7 +749,12 @@
     ExpressionStatement stmt = body.block.statements[0];
     AssignmentExpression assignment = stmt.expression;
     SimpleIdentifier leftHandSide = assignment.leftHandSide;
-    expect(leftHandSide.staticElement.enclosingElement.name, 'M2');
+    expect(
+        resolutionMap
+            .staticElementForIdentifier(leftHandSide)
+            .enclosingElement
+            .name,
+        'M2');
     expect(leftHandSide.auxiliaryElements.staticElement.enclosingElement.name,
         'M2');
   }
@@ -785,7 +791,11 @@
     AssignmentExpression assignment = stmt.expression;
     PropertyAccess propertyAccess = assignment.leftHandSide;
     expect(
-        propertyAccess.propertyName.staticElement.enclosingElement.name, 'M2');
+        resolutionMap
+            .staticElementForIdentifier(propertyAccess.propertyName)
+            .enclosingElement
+            .name,
+        'M2');
     expect(
         propertyAccess
             .propertyName.auxiliaryElements.staticElement.enclosingElement.name,
@@ -817,7 +827,8 @@
     BlockFunctionBody body = f.body;
     ReturnStatement stmt = body.block.statements[0];
     SimpleIdentifier x = stmt.expression;
-    expect(x.staticElement.enclosingElement.name, 'M2');
+    expect(resolutionMap.staticElementForIdentifier(x).enclosingElement.name,
+        'M2');
   }
 
   void test_getter_fromMixins_property_access() {
@@ -845,7 +856,11 @@
     VariableDeclarationStatement stmt = body.block.statements[0];
     PropertyAccess propertyAccess = stmt.variables.variables[0].initializer;
     expect(
-        propertyAccess.propertyName.staticElement.enclosingElement.name, 'M2');
+        resolutionMap
+            .staticElementForIdentifier(propertyAccess.propertyName)
+            .enclosingElement
+            .name,
+        'M2');
   }
 
   void test_getterAndSetterWithDifferentTypes() {
@@ -1535,7 +1550,12 @@
     BlockFunctionBody body = main.functionExpression.body;
     ExpressionStatement stmt = body.block.statements[0];
     MethodInvocation expr = stmt.expression;
-    expect(expr.methodName.staticElement.enclosingElement.name, 'M2');
+    expect(
+        resolutionMap
+            .staticElementForIdentifier(expr.methodName)
+            .enclosingElement
+            .name,
+        'M2');
   }
 
   void test_method_fromMixins_bare_identifier() {
@@ -1563,7 +1583,12 @@
     ExpressionStatement stmt = body.block.statements[0];
     MethodInvocation invocation = stmt.expression;
     SimpleIdentifier methodName = invocation.methodName;
-    expect(methodName.staticElement.enclosingElement.name, 'M2');
+    expect(
+        resolutionMap
+            .staticElementForIdentifier(methodName)
+            .enclosingElement
+            .name,
+        'M2');
   }
 
   void test_method_fromMixins_invked_from_outside_class() {
@@ -1590,7 +1615,12 @@
     BlockFunctionBody body = main.functionExpression.body;
     ExpressionStatement stmt = body.block.statements[0];
     MethodInvocation invocation = stmt.expression;
-    expect(invocation.methodName.staticElement.enclosingElement.name, 'M2');
+    expect(
+        resolutionMap
+            .staticElementForIdentifier(invocation.methodName)
+            .enclosingElement
+            .name,
+        'M2');
   }
 
   void test_method_fromSuperclassMixin() {
@@ -1680,7 +1710,12 @@
     ExpressionStatement stmt = body.block.statements[0];
     AssignmentExpression assignment = stmt.expression;
     SimpleIdentifier leftHandSide = assignment.leftHandSide;
-    expect(leftHandSide.staticElement.enclosingElement.name, 'M2');
+    expect(
+        resolutionMap
+            .staticElementForIdentifier(leftHandSide)
+            .enclosingElement
+            .name,
+        'M2');
   }
 
   void test_setter_fromMixins_property_access() {
@@ -1709,7 +1744,11 @@
     AssignmentExpression assignment = stmt.expression;
     PropertyAccess propertyAccess = assignment.leftHandSide;
     expect(
-        propertyAccess.propertyName.staticElement.enclosingElement.name, 'M2');
+        resolutionMap
+            .staticElementForIdentifier(propertyAccess.propertyName)
+            .enclosingElement
+            .name,
+        'M2');
   }
 
   void test_setter_inherited() {
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
index 82b972c..e4496f0 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
@@ -143,7 +143,6 @@
     // assignment occurred outside an assert statement.  (Note that it is a
     // dubious practice for the computation of an assert message to have side
     // effects, since it is only evaluated if the assert fails).
-    resetWithOptions(new AnalysisOptionsImpl()..enableAssertMessage = true);
     assertErrorsInCode(
         '''
 class C {
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index 783b462..3d1948f 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -5,6 +5,7 @@
 library analyzer.test.generated.strong_mode_test;
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/element.dart';
@@ -307,7 +308,8 @@
     InstanceCreationExpression exp = stmt.expression;
     ClassElement elementB = AstFinder.getClass(unit, "B").element;
     ClassElement elementA = AstFinder.getClass(unit, "A").element;
-    expect(exp.constructorName.type.type.element, elementB);
+    expect(resolutionMap.typeForTypeName(exp.constructorName.type).element,
+        elementB);
     _isInstantiationOf(_hasElement(elementB))(
         [_isType(elementA.typeParameters[0].type)])(exp.staticType);
   }
@@ -359,7 +361,8 @@
     expect(type0.normalParameterTypes[0], typeProvider.stringType);
 
     FunctionExpression anon1 = (statements[1] as ReturnStatement).expression;
-    FunctionType type1 = anon1.element.type;
+    FunctionType type1 =
+        resolutionMap.elementDeclaredByFunctionExpression(anon1).type;
     expect(type1.returnType, typeProvider.intType);
     expect(type1.normalParameterTypes[0], typeProvider.intType);
   }
@@ -383,7 +386,7 @@
       VariableDeclarationStatement stmt = statements[i];
       VariableDeclaration decl = stmt.variables.variables[0];
       FunctionExpression exp = decl.initializer;
-      return exp.element.type;
+      return resolutionMap.elementDeclaredByFunctionExpression(exp).type;
     }
 
     _isFunction2Of(_isInt, _isString)(literal(0));
@@ -412,7 +415,7 @@
       VariableDeclarationStatement stmt = statements[i];
       VariableDeclaration decl = stmt.variables.variables[0];
       FunctionExpression exp = decl.initializer;
-      return exp.element.type;
+      return resolutionMap.elementDeclaredByFunctionExpression(exp).type;
     }
 
     _isFunction2Of(_isInt, _isString)(literal(0));
@@ -477,7 +480,7 @@
       ExpressionStatement stmt = statements[i];
       FunctionExpressionInvocation invk = stmt.expression;
       FunctionExpression exp = invk.argumentList.arguments[0];
-      return exp.element.type;
+      return resolutionMap.elementDeclaredByFunctionExpression(exp).type;
     }
 
     _isFunction2Of(_isInt, _isString)(literal(0));
@@ -508,7 +511,7 @@
       ExpressionStatement stmt = statements[i];
       FunctionExpressionInvocation invk = stmt.expression;
       FunctionExpression exp = invk.argumentList.arguments[0];
-      return exp.element.type;
+      return resolutionMap.elementDeclaredByFunctionExpression(exp).type;
     }
 
     _isFunction2Of(_isInt, _isString)(literal(0));
@@ -537,7 +540,7 @@
       ExpressionStatement stmt = statements[i];
       MethodInvocation invk = stmt.expression;
       FunctionExpression exp = invk.argumentList.arguments[0];
-      return exp.element.type;
+      return resolutionMap.elementDeclaredByFunctionExpression(exp).type;
     }
 
     _isFunction2Of(_isInt, _isString)(literal(0));
@@ -566,7 +569,7 @@
       ExpressionStatement stmt = statements[i];
       MethodInvocation invk = stmt.expression;
       FunctionExpression exp = invk.argumentList.arguments[0];
-      return exp.element.type;
+      return resolutionMap.elementDeclaredByFunctionExpression(exp).type;
     }
 
     _isFunction2Of(_isInt, _isString)(literal(0));
@@ -597,7 +600,7 @@
       ExpressionStatement stmt = statements[i];
       MethodInvocation invk = stmt.expression;
       FunctionExpression exp = invk.argumentList.arguments[0];
-      return exp.element.type;
+      return resolutionMap.elementDeclaredByFunctionExpression(exp).type;
     }
 
     _isFunction2Of(_isInt, _isString)(literal(0));
@@ -628,7 +631,7 @@
       ExpressionStatement stmt = statements[i];
       MethodInvocation invk = stmt.expression;
       FunctionExpression exp = invk.argumentList.arguments[0];
-      return exp.element.type;
+      return resolutionMap.elementDeclaredByFunctionExpression(exp).type;
     }
 
     _isFunction2Of(_isInt, _isString)(literal(0));
@@ -706,8 +709,10 @@
 
     VariableDeclaration mapB = AstFinder.getFieldInClass(unit, "B", "map");
     MethodDeclaration mapC = AstFinder.getMethodInClass(unit, "C", "map");
-    assertMapOfIntToListOfInt(mapB.element.type);
-    assertMapOfIntToListOfInt(mapC.element.returnType);
+    assertMapOfIntToListOfInt(
+        resolutionMap.elementDeclaredByVariableDeclaration(mapB).type);
+    assertMapOfIntToListOfInt(
+        resolutionMap.elementDeclaredByMethodDeclaration(mapC).returnType);
 
     MapLiteral mapLiteralB = mapB.initializer;
     MapLiteral mapLiteralC = (mapC.body as ExpressionFunctionBody).expression;
diff --git a/pkg/analyzer/test/generated/test_support.dart b/pkg/analyzer/test/generated/test_support.dart
index ce0b3f0..68b7eed 100644
--- a/pkg/analyzer/test/generated/test_support.dart
+++ b/pkg/analyzer/test/generated/test_support.dart
@@ -99,8 +99,6 @@
   void setUp() {
     List<Plugin> plugins = <Plugin>[];
     plugins.addAll(AnalysisEngine.instance.requiredPlugins);
-    plugins.add(AnalysisEngine.instance.commandLinePlugin);
-    plugins.add(AnalysisEngine.instance.optionsPlugin);
     new ExtensionManager().processPlugins(plugins);
   }
 
diff --git a/pkg/analyzer/test/source/error_processor_test.dart b/pkg/analyzer/test/source/error_processor_test.dart
index fcf3f1e..c7f0852 100644
--- a/pkg/analyzer/test/source/error_processor_test.dart
+++ b/pkg/analyzer/test/source/error_processor_test.dart
@@ -153,17 +153,15 @@
 void configureOptions(String options) {
   Map<String, YamlNode> optionMap =
       optionsProvider.getOptionsFromString(options);
-  configureContextOptions(context, optionMap);
+  applyToAnalysisOptions(context.analysisOptions, optionMap);
 }
 
 ErrorProcessor getProcessor(AnalysisError error) =>
-    ErrorProcessor.getProcessor(context, error);
+    ErrorProcessor.getProcessor(context.analysisOptions, error);
 
 void oneTimeSetup() {
   List<Plugin> plugins = <Plugin>[];
   plugins.addAll(AnalysisEngine.instance.requiredPlugins);
-  plugins.add(AnalysisEngine.instance.commandLinePlugin);
-  plugins.add(AnalysisEngine.instance.optionsPlugin);
   ExtensionManager manager = new ExtensionManager();
   manager.processPlugins(plugins);
 }
diff --git a/pkg/analyzer/test/src/context/abstract_context.dart b/pkg/analyzer/test/src/context/abstract_context.dart
index ae77652..0e60d81 100644
--- a/pkg/analyzer/test/src/context/abstract_context.dart
+++ b/pkg/analyzer/test/src/context/abstract_context.dart
@@ -162,8 +162,6 @@
   void setUp() {
     List<Plugin> plugins = <Plugin>[];
     plugins.addAll(AnalysisEngine.instance.requiredPlugins);
-    plugins.add(AnalysisEngine.instance.commandLinePlugin);
-    plugins.add(AnalysisEngine.instance.optionsPlugin);
 
     ExtensionManager manager = new ExtensionManager();
     manager.processPlugins(plugins);
diff --git a/pkg/analyzer/test/src/context/builder_test.dart b/pkg/analyzer/test/src/context/builder_test.dart
index 9ddf64f..c2eb6ce 100644
--- a/pkg/analyzer/test/src/context/builder_test.dart
+++ b/pkg/analyzer/test/src/context/builder_test.dart
@@ -6,18 +6,15 @@
 
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
-import 'package:analyzer/plugin/options.dart';
 import 'package:analyzer/src/context/builder.dart';
 import 'package:analyzer/src/context/source.dart';
 import 'package:analyzer/src/generated/bazel.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/plugin/options_plugin.dart';
 import 'package:package_config/packages.dart';
 import 'package:package_config/src/packages_impl.dart';
 import 'package:path/path.dart' as path;
-import 'package:plugin/src/plugin_impl.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -144,7 +141,6 @@
     // being returned.
     AnalysisOptionsImpl defaultOptions = new AnalysisOptionsImpl();
     defaultOptions.dart2jsHint = !defaultOptions.dart2jsHint;
-    defaultOptions.enableAssertMessage = !defaultOptions.enableAssertMessage;
     defaultOptions.enableLazyAssignmentOperators =
         !defaultOptions.enableLazyAssignmentOperators;
     defaultOptions.enableStrictCallChecks =
@@ -513,8 +509,7 @@
     - empty_constructor_bodies
 ''');
 
-    AnalysisContext context = AnalysisEngine.instance.createAnalysisContext();
-    AnalysisOptions options = builder.getAnalysisOptions(context, path);
+    AnalysisOptions options = builder.getAnalysisOptions(path);
     _expectEqualOptions(options, expected);
   }
 
@@ -536,24 +531,8 @@
     enableSuperMixins : true
 ''');
 
-    AnalysisEngine engine = AnalysisEngine.instance;
-    OptionsPlugin plugin = engine.optionsPlugin;
-    plugin.registerExtensionPoints((_) {});
-    try {
-      _TestOptionsProcessor processor = new _TestOptionsProcessor();
-      processor.expectedOptions = <String, Object>{
-        'analyzer': {
-          'language': {'enableSuperMixins': true}
-        }
-      };
-      (plugin.optionsProcessorExtensionPoint as ExtensionPointImpl)
-          .add(processor);
-      AnalysisContext context = engine.createAnalysisContext();
-      AnalysisOptions options = builder.getAnalysisOptions(context, path);
-      _expectEqualOptions(options, expected);
-    } finally {
-      plugin.registerExtensionPoints((_) {});
-    }
+    AnalysisOptions options = builder.getAnalysisOptions(path);
+    _expectEqualOptions(options, expected);
   }
 
   void test_getAnalysisOptions_includes() {
@@ -589,26 +568,8 @@
     enableSuperMixins : true
 ''');
 
-    AnalysisEngine engine = AnalysisEngine.instance;
-    OptionsPlugin plugin = engine.optionsPlugin;
-    plugin.registerExtensionPoints((_) {});
-    try {
-      _TestOptionsProcessor processor = new _TestOptionsProcessor();
-      processor.expectedOptions = <String, Object>{
-        'analyzer': {
-          'language': {'enableSuperMixins': true}
-        },
-        'foo': {'bar': 'baz'},
-        'two': {'boo': 'newt'},
-      };
-      (plugin.optionsProcessorExtensionPoint as ExtensionPointImpl)
-          .add(processor);
-      AnalysisContext context = engine.createAnalysisContext();
-      AnalysisOptions options = builder.getAnalysisOptions(context, path);
-      _expectEqualOptions(options, expected);
-    } finally {
-      plugin.registerExtensionPoints((_) {});
-    }
+    AnalysisOptions options = builder.getAnalysisOptions(path);
+    _expectEqualOptions(options, expected);
   }
 
   void test_getAnalysisOptions_invalid() {
@@ -617,20 +578,8 @@
         pathContext.join(path, AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE);
     resourceProvider.newFile(filePath, ';');
 
-    AnalysisEngine engine = AnalysisEngine.instance;
-    OptionsPlugin plugin = engine.optionsPlugin;
-    plugin.registerExtensionPoints((_) {});
-    try {
-      _TestOptionsProcessor processor = new _TestOptionsProcessor();
-      (plugin.optionsProcessorExtensionPoint as ExtensionPointImpl)
-          .add(processor);
-      AnalysisContext context = engine.createAnalysisContext();
-      AnalysisOptions options = builder.getAnalysisOptions(context, path);
-      expect(options, isNotNull);
-      expect(processor.errorCount, 1);
-    } finally {
-      plugin.registerExtensionPoints((_) {});
-    }
+    AnalysisOptions options = builder.getAnalysisOptions(path);
+    expect(options, isNotNull);
   }
 
   void test_getAnalysisOptions_noDefault_noOverrides() {
@@ -645,8 +594,7 @@
     - empty_constructor_bodies
 ''');
 
-    AnalysisContext context = AnalysisEngine.instance.createAnalysisContext();
-    AnalysisOptions options = builder.getAnalysisOptions(context, path);
+    AnalysisOptions options = builder.getAnalysisOptions(path);
     _expectEqualOptions(options, new AnalysisOptionsImpl());
   }
 
@@ -664,8 +612,7 @@
     enableSuperMixins : true
 ''');
 
-    AnalysisContext context = AnalysisEngine.instance.createAnalysisContext();
-    AnalysisOptions options = builder.getAnalysisOptions(context, path);
+    AnalysisOptions options = builder.getAnalysisOptions(path);
     _expectEqualOptions(options, expected);
   }
 
@@ -732,7 +679,6 @@
     expect(actual.analyzeFunctionBodiesPredicate,
         same(expected.analyzeFunctionBodiesPredicate));
     expect(actual.dart2jsHint, expected.dart2jsHint);
-    expect(actual.enableAssertMessage, expected.enableAssertMessage);
     expect(actual.enableLazyAssignmentOperators,
         expected.enableLazyAssignmentOperators);
     expect(actual.enableStrictCallChecks, expected.enableStrictCallChecks);
@@ -783,27 +729,3 @@
     expect(locator.embedderYamls, hasLength(1));
   }
 }
-
-class _TestOptionsProcessor implements OptionsProcessor {
-  Map<String, Object> expectedOptions = null;
-
-  int errorCount = 0;
-
-  @override
-  void onError(Exception exception) {
-    errorCount++;
-  }
-
-  @override
-  void optionsProcessed(AnalysisContext context, Map<String, Object> options) {
-    if (expectedOptions == null) {
-      fail('Unexpected invocation of optionsProcessed');
-    }
-    expect(options, hasLength(expectedOptions.length));
-    for (String key in expectedOptions.keys) {
-      expect(options.containsKey(key), isTrue, reason: 'missing key $key');
-      expect(options[key], expectedOptions[key],
-          reason: 'values for key $key do not match');
-    }
-  }
-}
diff --git a/pkg/analyzer/test/src/context/context_test.dart b/pkg/analyzer/test/src/context/context_test.dart
index b9d77b1..1f612b9 100644
--- a/pkg/analyzer/test/src/context/context_test.dart
+++ b/pkg/analyzer/test/src/context/context_test.dart
@@ -8,6 +8,7 @@
 import 'dart:collection';
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/visitor.dart';
@@ -2620,7 +2621,8 @@
     CompilationUnit compilationUnit =
         context.resolveCompilationUnit2(sourceA, sourceA);
     expect(compilationUnit, isNotNull);
-    LibraryElement library = compilationUnit.element.library;
+    LibraryElement library =
+        resolutionMap.elementDeclaredByCompilationUnit(compilationUnit).library;
     List<LibraryElement> importedLibraries = library.importedLibraries;
     assertNamedElements(importedLibraries, ["dart.core", "libB"]);
   }
@@ -2632,7 +2634,8 @@
     CompilationUnit compilationUnit =
         context.resolveCompilationUnit2(sourceA, sourceA);
     expect(compilationUnit, isNotNull);
-    LibraryElement library = compilationUnit.element.library;
+    LibraryElement library =
+        resolutionMap.elementDeclaredByCompilationUnit(compilationUnit).library;
     List<LibraryElement> importedLibraries = library.importedLibraries;
     assertNamedElements(importedLibraries, ["dart.core", "libB"]);
   }
@@ -4499,7 +4502,7 @@
     expect(context.getErrors(a).errors, hasLength(0));
     expect(context.getErrors(b).errors, hasLength(0));
     var unitA = context.getResolvedCompilationUnit2(a, a);
-    var unitElementA = unitA.element;
+    var unitElementA = resolutionMap.elementDeclaredByCompilationUnit(unitA);
     var libraryElementA = unitElementA.library;
     // Update a.dart, no declaration changes.
     context.setContents(
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index 0ddaac5..30086bc 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -8,6 +8,7 @@
 import 'dart:convert';
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/file_system/file_system.dart';
@@ -214,6 +215,38 @@
     expect(allResults, hasLength(3));
   }
 
+  test_status_analyzingOnlyWhenHasFilesToAnalyze() async {
+    AnalysisDriver driver1 = newDriver();
+    AnalysisDriver driver2 = newDriver();
+
+    String a = _p('/a.dart');
+    String b = _p('/b.dart');
+    provider.newFile(a, 'class A {}');
+    provider.newFile(b, 'class B {}');
+    driver1.addFile(a);
+    driver2.addFile(b);
+
+    Monitor idleStatusMonitor = new Monitor();
+    List<AnalysisStatus> allStatuses = [];
+    scheduler.status.forEach((status) {
+      allStatuses.add(status);
+      if (status.isIdle) {
+        idleStatusMonitor.notify();
+      }
+    });
+
+    // The two added files were analyzed, and the schedule is idle.
+    await idleStatusMonitor.signal;
+    expect(allStatuses, hasLength(2));
+    expect(allStatuses[0].isAnalyzing, isTrue);
+    expect(allStatuses[1].isAnalyzing, isFalse);
+    allStatuses.clear();
+
+    // We don't transition to analysis and back to idle.
+    await driver1.getFilesReferencingName('X');
+    expect(allStatuses, isEmpty);
+  }
+
   String _p(String path) => provider.convertPath(path);
 }
 
@@ -232,6 +265,57 @@
     expect(driver.addedFiles, isNot(contains(b)));
   }
 
+  test_addFile_shouldRefresh() async {
+    var a = _p('/test/lib/a.dart');
+    var b = _p('/test/lib/b.dart');
+
+    provider.newFile(a, 'class A {}');
+    provider.newFile(
+        b,
+        r'''
+import 'a.dart';
+''');
+
+    driver.addFile(a);
+    driver.addFile(b);
+
+    void assertNumberOfErrorsInB(int n) {
+      var bResult = allResults.singleWhere((r) => r.path == b);
+      expect(bResult.errors, hasLength(n));
+      allResults.clear();
+    }
+
+    // Initial analysis, 'b' does not use 'a', so there is a hint.
+    await _waitForIdle();
+    assertNumberOfErrorsInB(1);
+
+    // Update 'b' to use 'a', no more hints.
+    provider.newFile(
+        b,
+        r'''
+import 'a.dart';
+main() {
+  print(A);
+}
+''');
+    driver.changeFile(b);
+    await _waitForIdle();
+    assertNumberOfErrorsInB(0);
+
+    // Change 'b' t have a hint again.
+    // Add and remove 'b'.
+    // The file must be refreshed, and the hint must be reported.
+    provider.newFile(
+        b,
+        r'''
+import 'a.dart';
+''');
+    driver.removeFile(b);
+    driver.addFile(b);
+    await _waitForIdle();
+    assertNumberOfErrorsInB(1);
+  }
+
   test_addFile_thenRemove() async {
     var a = _p('/test/lib/a.dart');
     var b = _p('/test/lib/b.dart');
@@ -470,15 +554,8 @@
 ''';
     addTestFile(content);
 
-    IndexResult result = await driver.getIndex(testFile);
+    AnalysisDriverUnitIndex index = await driver.getIndex(testFile);
 
-    CompilationUnitElement unitElement = result.unitElement;
-    expect(unitElement, isNotNull);
-    expect(unitElement.source.fullName, testFile);
-    expect(unitElement.functions.map((c) => c.name),
-        unorderedEquals(['foo', 'main']));
-
-    AnalysisDriverUnitIndex index = result.index;
     int unitId = index.strings.indexOf('package:test/test.dart');
     int fooId = index.strings.indexOf('foo');
     expect(unitId, isNonNegative);
@@ -587,7 +664,10 @@
     AnalysisResult result = await driver.getResult(testFile);
     expect(result.path, testFile);
     // Has only exports for valid URIs.
-    List<ExportElement> imports = result.unit.element.library.exports;
+    List<ExportElement> imports = resolutionMap
+        .elementDeclaredByCompilationUnit(result.unit)
+        .library
+        .exports;
     expect(
         imports.map((import) => import.exportedLibrary.source.uri.toString()),
         unorderedEquals(['dart:async', 'dart:math']));
@@ -604,7 +684,10 @@
     AnalysisResult result = await driver.getResult(testFile);
     expect(result.path, testFile);
     // Has only imports for valid URIs.
-    List<ImportElement> imports = result.unit.element.library.imports;
+    List<ImportElement> imports = resolutionMap
+        .elementDeclaredByCompilationUnit(result.unit)
+        .library
+        .imports;
     expect(
         imports.map((import) => import.importedLibrary.source.uri.toString()),
         unorderedEquals(['dart:async', 'dart:math', 'dart:core']));
@@ -840,27 +923,90 @@
     assertDeclarations(await driver.getTopLevelNameDeclarations('X'), [], []);
   }
 
+  test_getUnitElement() async {
+    String content = r'''
+foo(int p) {}
+main() {
+  foo(42);
+}
+''';
+    addTestFile(content);
+
+    CompilationUnitElement unitElement = await driver.getUnitElement(testFile);
+    expect(unitElement, isNotNull);
+    expect(unitElement.source.fullName, testFile);
+    expect(unitElement.functions.map((c) => c.name),
+        unorderedEquals(['foo', 'main']));
+  }
+
+  test_hasFilesToAnalyze() async {
+    // No files yet, nothing to analyze.
+    expect(driver.hasFilesToAnalyze, isFalse);
+
+    // Add a new file, it should be analyzed.
+    addTestFile('main() {}', priority: true);
+    expect(driver.hasFilesToAnalyze, isTrue);
+
+    // Wait for idle, nothing to do.
+    await _waitForIdle();
+    expect(driver.hasFilesToAnalyze, isFalse);
+
+    // Ask to analyze the file, so there is a file to analyze.
+    Future<AnalysisResult> future = driver.getResult(testFile);
+    expect(driver.hasFilesToAnalyze, isTrue);
+
+    // Once analysis is done, there is nothing to analyze.
+    await future;
+    expect(driver.hasFilesToAnalyze, isFalse);
+
+    // Request of referenced names is not analysis of a file.
+    driver.getFilesReferencingName('X');
+    expect(driver.hasFilesToAnalyze, isFalse);
+  }
+
   test_knownFiles() async {
     var a = _p('/test/lib/a.dart');
     var b = _p('/test/lib/b.dart');
+    var c = _p('/test/lib/c.dart');
 
     provider.newFile(
         a,
         r'''
 import 'b.dart';
 ''');
+    provider.newFile(b, '');
+    provider.newFile(c, '');
 
     driver.addFile(a);
+    driver.addFile(c);
     await _waitForIdle();
 
-    expect(driver.knownFiles, contains(a));
-    expect(driver.knownFiles, contains(b));
+    expect(driver.knownFiles, unorderedEquals([a, b, c]));
 
+    // Remove a.dart and analyze.
+    // Both a.dart and b.dart are not known now.
     driver.removeFile(a);
+    await _waitForIdle();
+    expect(driver.knownFiles, unorderedEquals([c]));
+  }
 
-    // a.dart was removed, but we don't clean up the file state state yet.
-    expect(driver.knownFiles, contains(a));
-    expect(driver.knownFiles, contains(b));
+  test_knownFiles_beforeAnalysis() async {
+    var a = _p('/test/lib/a.dart');
+    var b = _p('/test/lib/b.dart');
+
+    provider.newFile(a, '');
+
+    // 'a.dart' is added, but not processed yet.
+    // So, the set of known files is empty yet.
+    driver.addFile(a);
+    expect(driver.knownFiles, isEmpty);
+
+    // Remove 'a.dart'.
+    // It has been no analysis yet, so 'a.dart' is not in the file state, only
+    // in 'added' files. So, it disappears when removed.
+    driver.removeFile(a);
+    expect(driver.knownFiles, isNot(contains(a)));
+    expect(driver.knownFiles, isNot(contains(b)));
   }
 
   test_parseFile_shouldRefresh() async {
@@ -1194,6 +1340,29 @@
     expect(allResults, isEmpty);
   }
 
+  test_removeFile_invalidate_importers() async {
+    var a = _p('/test/lib/a.dart');
+    var b = _p('/test/lib/b.dart');
+
+    provider.newFile(a, 'class A {}');
+    provider.newFile(b, "import 'a.dart';  var a = new A();");
+
+    driver.addFile(a);
+    driver.addFile(b);
+    await _waitForIdle();
+
+    // b.dart s clean.
+    expect(allResults.singleWhere((r) => r.path == b).errors, isEmpty);
+    allResults.clear();
+
+    // Remove a.dart, now b.dart should be reanalyzed and has an error.
+    provider.deleteFile(a);
+    driver.removeFile(a);
+    await _waitForIdle();
+    expect(allResults.singleWhere((r) => r.path == b).errors, hasLength(2));
+    allResults.clear();
+  }
+
   test_results_priority() async {
     String content = 'int f() => 42;';
     addTestFile(content, priority: true);
@@ -1291,7 +1460,11 @@
 
   String _getClassFieldType(
       CompilationUnit unit, String className, String fieldName) {
-    return _getClassField(unit, className, fieldName).element.type.toString();
+    return resolutionMap
+        .elementDeclaredByVariableDeclaration(
+            _getClassField(unit, className, fieldName))
+        .type
+        .toString();
   }
 
   MethodDeclaration _getClassMethod(
@@ -1310,8 +1483,9 @@
 
   String _getClassMethodReturnType(
       CompilationUnit unit, String className, String fieldName) {
-    return _getClassMethod(unit, className, fieldName)
-        .element
+    return resolutionMap
+        .elementDeclaredByMethodDeclaration(
+            _getClassMethod(unit, className, fieldName))
         .type
         .returnType
         .toString();
@@ -1341,7 +1515,10 @@
   }
 
   String _getTopLevelVarType(CompilationUnit unit, String name) {
-    return _getTopLevelVar(unit, name).element.type.toString();
+    return resolutionMap
+        .elementDeclaredByVariableDeclaration(_getTopLevelVar(unit, name))
+        .type
+        .toString();
   }
 
   /**
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index 3b830fb..fd8373f 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -5,6 +5,7 @@
 import 'dart:async';
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/dart/analysis/search.dart';
@@ -177,7 +178,8 @@
     ConstructorElement element = _findElementAtString('A() {}');
 
     CompilationUnit otherUnit = (await driver.getResult(other)).unit;
-    Element main = otherUnit.element.functions[0];
+    Element main =
+        resolutionMap.elementDeclaredByCompilationUnit(otherUnit).functions[0];
     var expected = [
       new ExpectedResult(main, SearchResultKind.REFERENCE,
           otherCode.indexOf('(); // in other'), 0,
@@ -530,7 +532,7 @@
     await _resolveTestUnit('''
 class C {
   var f;
-  C({p}) : f = p + 1 {
+  C(p) : f = p + 1 {
     p = 2;
     p += 3;
     print(p);
@@ -538,20 +540,18 @@
   }
 }
 main() {
-  new C(p: 42);
+  new C(42);
 }
 ''');
     ParameterElement element = _findElement('p');
     ClassElement classC = _findElement('C');
     ConstructorElement constructorA = classC.unnamedConstructor;
-    Element mainElement = _findElement('main');
     var expected = [
       _expectId(constructorA, SearchResultKind.READ, 'p + 1 {'),
       _expectId(constructorA, SearchResultKind.WRITE, 'p = 2;'),
       _expectId(constructorA, SearchResultKind.READ_WRITE, 'p += 3;'),
       _expectId(constructorA, SearchResultKind.READ, 'p);'),
-      _expectId(constructorA, SearchResultKind.INVOCATION, 'p();'),
-      _expectIdQ(mainElement, SearchResultKind.REFERENCE, 'p: 42')
+      _expectId(constructorA, SearchResultKind.INVOCATION, 'p();')
     ];
     await _verifyReferences(element, expected);
   }
@@ -559,24 +559,22 @@
   test_searchReferences_ParameterElement_ofLocalFunction() async {
     await _resolveTestUnit('''
 main() {
-  foo({p}) {
+  foo(p) {
     p = 1;
     p += 2;
     print(p);
     p();
   }
-  foo(p: 42);
+  foo(42);
 }
 ''');
     ParameterElement element = _findElement('p');
     Element fooElement = _findElement('foo');
-    Element mainElement = _findElement('main');
     var expected = [
       _expectId(fooElement, SearchResultKind.WRITE, 'p = 1;'),
       _expectId(fooElement, SearchResultKind.READ_WRITE, 'p += 2;'),
       _expectId(fooElement, SearchResultKind.READ, 'p);'),
-      _expectId(fooElement, SearchResultKind.INVOCATION, 'p();'),
-      _expectIdQ(mainElement, SearchResultKind.REFERENCE, 'p: 42')
+      _expectId(fooElement, SearchResultKind.INVOCATION, 'p();')
     ];
     await _verifyReferences(element, expected);
   }
@@ -584,7 +582,7 @@
   test_searchReferences_ParameterElement_ofMethod() async {
     await _resolveTestUnit('''
 class C {
-  foo({p}) {
+  foo(p) {
     p = 1;
     p += 2;
     print(p);
@@ -592,24 +590,45 @@
   }
 }
 main(C c) {
-  c.foo(p: 42);
+  c.foo(42);
 }
 ''');
     ParameterElement element = _findElement('p');
     Element fooElement = _findElement('foo');
-    Element mainElement = _findElement('main');
     var expected = [
       _expectId(fooElement, SearchResultKind.WRITE, 'p = 1;'),
       _expectId(fooElement, SearchResultKind.READ_WRITE, 'p += 2;'),
       _expectId(fooElement, SearchResultKind.READ, 'p);'),
-      _expectId(fooElement, SearchResultKind.INVOCATION, 'p();'),
-      _expectIdQ(mainElement, SearchResultKind.REFERENCE, 'p: 42')
+      _expectId(fooElement, SearchResultKind.INVOCATION, 'p();')
     ];
     await _verifyReferences(element, expected);
   }
 
   test_searchReferences_ParameterElement_ofTopLevelFunction() async {
     await _resolveTestUnit('''
+foo(p) {
+  p = 1;
+  p += 2;
+  print(p);
+  p();
+}
+main() {
+  foo(42);
+}
+''');
+    ParameterElement element = _findElement('p');
+    Element fooElement = _findElement('foo');
+    var expected = [
+      _expectId(fooElement, SearchResultKind.WRITE, 'p = 1;'),
+      _expectId(fooElement, SearchResultKind.READ_WRITE, 'p += 2;'),
+      _expectId(fooElement, SearchResultKind.READ, 'p);'),
+      _expectId(fooElement, SearchResultKind.INVOCATION, 'p();')
+    ];
+    await _verifyReferences(element, expected);
+  }
+
+  test_searchReferences_ParameterElement_named() async {
+    await _resolveTestUnit('''
 foo({p}) {
   p = 1;
   p += 2;
diff --git a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
index 43dfdf7..40942d2 100644
--- a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
@@ -6,6 +6,7 @@
 
 import 'package:analyzer/context/declared_variables.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/error.dart';
@@ -1589,7 +1590,8 @@
 
   DartObjectImpl _evaluateConstant(CompilationUnit compilationUnit, String name,
       Map<String, DartObjectImpl> lexicalEnvironment) {
-    Source source = compilationUnit.element.source;
+    Source source =
+        resolutionMap.elementDeclaredByCompilationUnit(compilationUnit).source;
     Expression expression =
         findTopLevelConstantExpression(compilationUnit, name);
     GatheringErrorListener errorListener = new GatheringErrorListener();
diff --git a/pkg/analyzer/test/src/dart/sdk/patch_test.dart b/pkg/analyzer/test/src/dart/sdk/patch_test.dart
index dc3a903..a63459e 100644
--- a/pkg/analyzer/test/src/dart/sdk/patch_test.dart
+++ b/pkg/analyzer/test/src/dart/sdk/patch_test.dart
@@ -621,16 +621,18 @@
     }, throwsArgumentError);
   }
 
-  test_topLevel_fail_topLevelVariable() {
-    expect(() {
-      _doTopLevelPatching(
-          r'''
+  test_topLevel_topLevelVariable_append() {
+    CompilationUnit unit = _doTopLevelPatching(
+        r'''
 int foo() => 0;
 ''',
-          r'''
+        r'''
 int _bar;
 ''');
-    }, throwsArgumentError);
+    _assertUnitCode(unit, 'int foo() => 0; int _bar;');
+    FunctionDeclaration a = unit.declarations[0];
+    TopLevelVariableDeclaration b = unit.declarations[1];
+    _assertPrevNextToken(a.endToken, b.beginToken);
   }
 
   test_topLevel_function_append() {
diff --git a/pkg/analyzer/test/src/lint/config_test.dart b/pkg/analyzer/test/src/lint/config_test.dart
new file mode 100644
index 0000000..44f385d
--- /dev/null
+++ b/pkg/analyzer/test/src/lint/config_test.dart
@@ -0,0 +1,206 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/lint/config.dart';
+import 'package:test/test.dart';
+
+main() {
+  defineTests();
+}
+
+defineTests() {
+  const src = """
+files:
+  include: foo # un-quoted
+  exclude:
+    - 'test/**'       # file globs can be scalars or lists
+    - '**/_data.dart' # unquoted stars treated by YAML as aliases
+rules:
+  style_guide:
+    unnecessary_getters: false #disable
+    camel_case_types: true #enable
+  pub:
+    package_names: false
+""";
+
+// In the future, options might be marshaled in maps and passed to rules.
+//  acme:
+//    some_rule:
+//      some_option: # Note this nesting might be arbitrarily complex?
+//        - param1
+//        - param2
+
+  var config = new LintConfig.parse(src);
+
+  group('lint config', () {
+    group('file', () {
+      test('includes', () {
+        expect(config.fileIncludes, unorderedEquals(['foo']));
+      });
+      test('excludes', () {
+        expect(
+            config.fileExcludes, unorderedEquals(['test/**', '**/_data.dart']));
+      });
+    });
+    group('rule', () {
+      test('configs', () {
+        expect(config.ruleConfigs, hasLength(3));
+      });
+
+      test('config', () {
+        config = new LintConfig.parse('''
+rules:
+  style_guide:
+    unnecessary_getters: false''');
+        expect(config.ruleConfigs, hasLength(1));
+        var ruleConfig = config.ruleConfigs[0];
+        expect(ruleConfig.group, 'style_guide');
+        expect(ruleConfig.name, 'unnecessary_getters');
+        expect(ruleConfig.args, {'enabled': false});
+        expect(ruleConfig.disables('unnecessary_getters'), isTrue);
+      });
+    });
+  });
+
+  group('analysis options', () {
+    group('parsing', () {
+      group('groups', () {
+        test('basic', () {
+          var src = '''
+plugin_a:
+  option_a: false
+plugin_b:
+  option_b: true
+linter:
+  rules:
+    style_guide:
+      unnecessary_getters: false #disable
+      camel_case_types: true #enable
+''';
+          var config = processAnalysisOptionsFile(src);
+          var ruleNames = config.ruleConfigs.map((rc) => rc.name);
+          expect(ruleNames, hasLength(2));
+          expect(ruleNames, contains('unnecessary_getters'));
+          expect(ruleNames, contains('camel_case_types'));
+        });
+      });
+
+      group('w/o groups', () {
+        test('rule list', () {
+          var src = '''
+plugin_a:
+  option_a: false
+plugin_b:
+  option_b: true
+linter:
+  rules:
+    - camel_case_types
+''';
+          var config = processAnalysisOptionsFile(src);
+          expect(config.ruleConfigs.length, 1);
+          // Verify that defaults are enabled.
+          expect(config.ruleConfigs[0].args['enabled'], isTrue);
+        });
+
+        test('rule map (bools)', () {
+          var src = '''
+plugin_a:
+  option_a: false
+plugin_b:
+  option_b: true
+linter:
+  rules:
+    camel_case_types: true #enable
+    unnecessary_getters: false #disable
+''';
+          var config = processAnalysisOptionsFile(src);
+          var ruleConfigs = config.ruleConfigs.toList();
+          ruleConfigs.sort(
+              (RuleConfig rc1, RuleConfig rc2) => rc1.name.compareTo(rc2.name));
+          expect(ruleConfigs, hasLength(2));
+          expect(ruleConfigs[0].name, 'camel_case_types');
+          expect(config.ruleConfigs[0].args['enabled'], isFalse);
+          expect(ruleConfigs[1].name, 'unnecessary_getters');
+          expect(config.ruleConfigs[1].args['enabled'], isTrue);
+        });
+      });
+    });
+
+    test('empty file', () {
+      expect(processAnalysisOptionsFile(''), isNull);
+    });
+
+    test('bad format', () {
+      expect(processAnalysisOptionsFile('foo: '), isNull);
+    });
+  });
+
+  group('options processing', () {
+    group('raw maps', () {
+      test('rule list', () {
+        Map options = {};
+        var lintOptions = {
+          'rules': ['camel_case_types']
+        };
+        options['linter'] = lintOptions;
+
+        var config = parseConfig(options);
+        expect(config, isNotNull);
+        expect(config.ruleConfigs, hasLength(1));
+      });
+
+      test('rule map (bool)', () {
+        Map options = {};
+        var lintOptions = {
+          'rules': {'camel_case_types': true}
+        };
+        options['linter'] = lintOptions;
+
+        var config = parseConfig(options);
+        expect(config, isNotNull);
+        expect(config.ruleConfigs, hasLength(1));
+      });
+
+      test('rule map (string)', () {
+        Map options = {};
+        var lintOptions = {
+          'rules': {'camel_case_types': 'true'}
+        };
+        options['linter'] = lintOptions;
+
+        var config = parseConfig(options);
+        expect(config, isNotNull);
+        expect(config.ruleConfigs, hasLength(1));
+      });
+
+      test('nested rule map (bool)', () {
+        Map options = {};
+        var lintOptions = {
+          'rules': {
+            'style_guide': {'camel_case_types': true}
+          }
+        };
+        options['linter'] = lintOptions;
+
+        var config = parseConfig(options);
+        expect(config, isNotNull);
+        expect(config.ruleConfigs, hasLength(1));
+      });
+
+      test('nested rule map (string)', () {
+        Map options = {};
+        var lintOptions = {
+          'rules': {
+            'style_guide': {'camel_case_types': true}
+          }
+        };
+        options['linter'] = lintOptions;
+
+        var config = parseConfig(options);
+        expect(config, isNotNull);
+        expect(config.ruleConfigs, hasLength(1));
+      });
+    });
+  });
+}
diff --git a/pkg/analyzer/test/src/lint/io_test.dart b/pkg/analyzer/test/src/lint/io_test.dart
new file mode 100644
index 0000000..3a377f0
--- /dev/null
+++ b/pkg/analyzer/test/src/lint/io_test.dart
@@ -0,0 +1,89 @@
+// Copyright (c) 2015, 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:io';
+
+import 'package:analyzer/src/lint/io.dart';
+import 'package:test/test.dart';
+
+main() {
+  defineTests();
+}
+
+defineTests() {
+  // TODO: redefine tests
+
+//  group('commandline args', () {
+//    var mockFile = new File('foo.dart');
+//    when(mockFile.absolute).thenReturn(mockFile);
+//
+//    var options = new LinterOptions(() => []);
+//    var mockLinter = new MockLinter();
+//    when(mockLinter.options).thenReturn(options);
+//
+//    lintFile(mockFile,
+//        dartSdkPath: '/path/to/sdk',
+//        packageRoot: '/my/pkgs',
+//        linter: mockLinter);
+//
+//    test('dartSdkPath', () {
+//      expect(options.dartSdkPath, equals('/path/to/sdk'));
+//      expect(options.packageRootPath, equals('/my/pkgs'));
+//    });
+//
+//    test('packageRoot', () {
+//      expect(options.dartSdkPath, equals('/path/to/sdk'));
+//      expect(options.packageRootPath, equals('/my/pkgs'));
+//    });
+//
+//    test('exception handling', () {
+//      var mockErr = new MockIOSink();
+//      std_err = mockErr;
+//      when(mockLinter.lintFiles(any)).thenAnswer((_) => throw 'err');
+//      expect(lintFiles([mockFile], linter: mockLinter), isFalse);
+//      verify(std_err.writeln(any)).called(1);
+//    });
+//  });
+
+  group('processing', () {
+    group('files', () {
+      test('dart', () {
+        var file = new File('foo.dart');
+        expect(isLintable(file), isTrue);
+      });
+      test('pubspec', () {
+        var file = new File('pubspec.yaml');
+        expect(isLintable(file), isTrue);
+      });
+      test('_pubspec', () {
+        // Analyzable for testing purposes
+        var file = new File('_pubspec.yaml');
+        expect(isLintable(file), isTrue);
+      });
+      test('text', () {
+        var file = new File('foo.txt');
+        expect(isLintable(file), isFalse);
+      });
+      test('hidden dirs', () {
+        expect(isInHiddenDir('.foo/'), isTrue);
+        expect(isInHiddenDir('.foo/bar'), isTrue);
+      });
+    });
+  });
+
+  // TODO(brianwilkerson) Rewrite this to use a memory resource provider.
+//  group('collecting', () {
+//    group('files', () {
+//      test('basic', () {
+//        expect(
+//            collectFiles(p.join('test', '_data', 'p1')).map((f) => f.path),
+//            unorderedEquals([
+//              p.join('test', '_data', 'p1', 'p1.dart'),
+//              p.join('test', '_data', 'p1', '_pubspec.yaml'),
+//              p.join('test', '_data', 'p1', 'src', 'p2.dart')
+//            ]));
+//      });
+//    });
+//  });
+}
diff --git a/pkg/analyzer/test/src/lint/project_test.dart b/pkg/analyzer/test/src/lint/project_test.dart
new file mode 100644
index 0000000..76282d1
--- /dev/null
+++ b/pkg/analyzer/test/src/lint/project_test.dart
@@ -0,0 +1,61 @@
+// Copyright (c) 2015, 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:io';
+
+import 'package:analyzer/src/lint/project.dart';
+import 'package:test/test.dart';
+
+main() {
+//  defineTests();
+}
+
+defineTests() {
+  group('project', () {
+    group('basic', () {
+      // TODO(brianwilkerson) These tests fail on the bots because the cwd is
+      // not the same there as when we run tests locally.
+      group('cwd', () {
+        var project = new DartProject(null, null);
+        test('name', () {
+          expect(project.name, 'analyzer');
+        });
+        test('spec', () {
+          expect(project.pubspec, isNotNull);
+        });
+        test('root', () {
+          expect(project.root.path, Directory.current.path);
+        });
+      });
+      // TODO(brianwilkerson) Rewrite these to use a memory resource provider.
+//      group('p1', () {
+//        var project =
+//            new DartProject(null, null, dir: new Directory('test/_data/p1'));
+//        test('name', () {
+//          expect(project.name, 'p1');
+//        });
+//        test('spec', () {
+//          expect(project.pubspec, isNotNull);
+//          expect(project.pubspec.name.value.text, 'p1');
+//        });
+//        test('root', () {
+//          expect(project.root.path, 'test/_data/p1');
+//        });
+//      });
+//      group('no pubspec', () {
+//        var project = new DartProject(null, null,
+//            dir: new Directory('test/_data/p1/src'));
+//        test('name', () {
+//          expect(project.name, 'src');
+//        });
+//        test('spec', () {
+//          expect(project.pubspec, isNull);
+//        });
+//        test('root', () {
+//          expect(project.root.path, 'test/_data/p1/src');
+//        });
+//      });
+    });
+  });
+}
diff --git a/pkg/analyzer/test/src/lint/pub_test.dart b/pkg/analyzer/test/src/lint/pub_test.dart
new file mode 100644
index 0000000..5a7f721
--- /dev/null
+++ b/pkg/analyzer/test/src/lint/pub_test.dart
@@ -0,0 +1,200 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/lint/pub.dart';
+import 'package:source_span/source_span.dart';
+import 'package:test/test.dart';
+
+main() {
+  defineTests();
+}
+
+defineTests() {
+  const src = """
+name: linter
+version: 0.0.1
+author: Dart Team <misc@dartlang.org>
+authors:
+  - Bill
+  - Ted
+description: Style linter for Dart.
+documentation:
+homepage: https://github.com/dart-lang/linter
+dependencies:
+  transmogrify:
+    hosted:
+      name: transmogrify
+      url: http://your-package-server.com
+    version: '>=0.4.0 <1.0.0'
+  analyzer: '0.24.0-dev.1'
+  cli_util: '>=0.0.1 <0.1.0'
+  semver: '>=0.2.0 <0.3.0'
+  yaml: '>=2.1.2 <3.0.0'
+  kittens:
+    git:
+      url: git://github.com/munificent/kittens.git
+      ref: some-branch
+  foo: any
+dev_dependencies:
+  markdown: '>=0.7.1+2 <0.8.0'
+  unittest: '>=0.11.0 <0.12.0'
+""";
+
+  Pubspec ps = new Pubspec.parse(src);
+
+  group('pubspec', () {
+    group('basic', () {
+      test('toString()', () {
+        // For now just confirm it doesn't blow up
+        expect(ps.toString(), isNotNull);
+      });
+    });
+    group('entries', () {
+      testValue('name', ps.name, equals('linter'));
+      testKeySpan('name', ps.name, startOffset: 0, endOffset: 4);
+      testValueSpan('name', ps.name, startOffset: 6, endOffset: 12);
+      group('documentation', () {
+        test('no value', () {
+          expect(ps.documentation.value.text, isNull);
+        });
+      });
+      testValue('homepage', ps.homepage,
+          equals('https://github.com/dart-lang/linter'));
+      testValue(
+          'description', ps.description, equals('Style linter for Dart.'));
+      testValue('version', ps.version, equals('0.0.1'));
+      testValue('author', ps.author, equals('Dart Team <misc@dartlang.org>'));
+
+      group('authors', () {
+        PSNodeList authors = ps.authors;
+        test('contents', () {
+          expect(authors, isNotNull);
+          expect(authors.any((PSNode n) => n.text == 'Bill'), isTrue);
+          expect(authors.any((PSNode n) => n.text == 'Ted'), isTrue);
+        });
+      });
+
+      testDepListContains('dependencies', ps.dependencies, [
+        {'analyzer': '0.24.0-dev.1'}
+      ]);
+
+      testDepListContains('dev_dependencies', ps.devDependencies, [
+        {'markdown': '>=0.7.1+2 <0.8.0'}
+      ]);
+
+      group('hosted', () {
+        PSDependency dep =
+            findDependency(ps.dependencies, name: 'transmogrify');
+        PSHost host = dep.host;
+        testValue('name', host.name, equals('transmogrify'));
+        testValue('url', host.url, equals('http://your-package-server.com'));
+        testKeySpan('name', host.name, startOffset: 237, endOffset: 241);
+        testValueSpan('name', host.name, startOffset: 243, endOffset: 255);
+      });
+
+      group('git', () {
+        PSDependency dep = findDependency(ps.dependencies, name: 'kittens');
+        PSGitRepo git = dep.git;
+        testValue('ref', git.ref, equals('some-branch'));
+        testValue(
+            'url', git.url, equals('git://github.com/munificent/kittens.git'));
+      });
+    });
+//    group('visiting', () {
+//      test('smoke', () {
+//        var mock = new MockPubVisitor();
+//        ps.accept(mock);
+//        verify(mock.visitPackageAuthor(any)).called(1);
+//        verify(mock.visitPackageAuthors(any)).called(1);
+//        verify(mock.visitPackageDependencies(any)).called(1);
+//        verify(mock.visitPackageDependency(any)).called(7);
+//        verify(mock.visitPackageDescription(any)).called(1);
+//        verify(mock.visitPackageDevDependencies(any)).called(1);
+//        verify(mock.visitPackageDevDependency(any)).called(2);
+//        verify(mock.visitPackageDocumentation(any)).called(1);
+//        verify(mock.visitPackageHomepage(any)).called(1);
+//        verify(mock.visitPackageName(any)).called(1);
+//        verify(mock.visitPackageVersion(any)).called(1);
+//      });
+//    });
+    // TODO(brianwilkerson) Rewrite this to use a memory resource provider.
+//    group('initialization', () {
+//      test('sourceUrl', () {
+//        File ps = new File('test/_data/p1/_pubspec.yaml');
+//        Pubspec spec = new Pubspec.parse(ps.readAsStringSync(),
+//            sourceUrl: p.toUri(ps.path));
+//        expect(spec.name.key.span.sourceUrl.toFilePath(windows: false),
+//            equals('test/_data/p1/_pubspec.yaml'));
+//      });
+//    });
+//    group('parsing', () {
+//      test('bad yaml', () {
+//        File ps = new File('test/_data/p3/_pubspec.yaml');
+//        Pubspec spec = new Pubspec.parse(ps.readAsStringSync(),
+//            sourceUrl: p.toUri(ps.path));
+//        expect(spec.name, isNull);
+//        expect(spec.description, isNull);
+//      });
+//    });
+  });
+}
+
+PSDependency findDependency(PSDependencyList deps, {String name}) =>
+    deps.firstWhere((dep) => dep.name.text == name, orElse: () => null);
+
+testDepListContains(
+    String label, PSDependencyList list, List<Map<String, String>> exp) {
+  test(label, () {
+    exp.forEach((Map<String, String> entry) {
+      entry.forEach((k, v) {
+        PSDependency dep = findDependency(list, name: k);
+        expect(dep, isNotNull);
+        expect(dep.version.value.text, equals(v));
+      });
+    });
+  });
+}
+
+testEntry(String label, PSEntry node, Matcher m) {
+  group(label, () {
+    test('entry', () {
+      expect(node, m);
+    });
+  });
+}
+
+testKeySpan(String label, PSEntry node, {int startOffset, int endOffset}) {
+  group(label, () {
+    group('key', () {
+      testSpan(node.key.span, startOffset: startOffset, endOffset: endOffset);
+    });
+  });
+}
+
+testSpan(SourceSpan span, {int startOffset, int endOffset}) {
+  test('span', () {
+    var start = span.start;
+    expect(start, isNotNull);
+    expect(start.offset, equals(startOffset));
+    var end = span.end;
+    expect(end, isNotNull);
+    expect(end.offset, equals(endOffset));
+  });
+}
+
+testValue(String label, PSEntry node, Matcher m) {
+  group(label, () {
+    test('value', () {
+      expect(node.value.text, m);
+    });
+  });
+}
+
+testValueSpan(String label, PSEntry node, {int startOffset, int endOffset}) {
+  group(label, () {
+    group('value', () {
+      testSpan(node.value.span, startOffset: startOffset, endOffset: endOffset);
+    });
+  });
+}
diff --git a/pkg/analyzer/test/src/lint/test_all.dart b/pkg/analyzer/test/src/lint/test_all.dart
new file mode 100644
index 0000000..60555a3
--- /dev/null
+++ b/pkg/analyzer/test/src/lint/test_all.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'config_test.dart' as config_test;
+import 'io_test.dart' as io_test;
+import 'project_test.dart' as project_test;
+import 'pub_test.dart' as pub_test;
+
+/// Utility for manually running all tests.
+main() {
+  defineReflectiveSuite(() {
+    config_test.main();
+    io_test.main();
+    project_test.main();
+    pub_test.main();
+  }, name: 'lint');
+}
diff --git a/pkg/analyzer/test/src/plugin/plugin_config_test.dart b/pkg/analyzer/test/src/plugin/plugin_config_test.dart
deleted file mode 100644
index 84ec8c8..0000000
--- a/pkg/analyzer/test/src/plugin/plugin_config_test.dart
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library analyzer.test.src.plugin.plugin_config_test;
-
-import 'package:analyzer/source/analysis_options_provider.dart';
-import 'package:analyzer/src/plugin/plugin_configuration.dart';
-import 'package:test/test.dart';
-import 'package:yaml/yaml.dart';
-
-main() {
-  group('plugin config tests', () {
-    group('parsing', () {
-      test('plugin map', () {
-        const optionsSrc = '''
-analyzer:
-  plugins:
-    my_plugin1: ^0.1.0 #shorthand
-    my_plugin2:
-      version: ^0.2.0
-    my_plugin3:
-      class_name: MyPlugin
-      library_uri: myplugin/myplugin.dart
-      path: '/u/disk/src/'
-''';
-        var config = parseConfig(optionsSrc);
-        var plugins = pluginsSortedByName(config.plugins);
-        expect(plugins, hasLength(3));
-        expect(plugins[0].name, equals('my_plugin1'));
-        expect(plugins[0].version, equals('^0.1.0'));
-        expect(plugins[1].name, equals('my_plugin2'));
-        expect(plugins[1].version, equals('^0.2.0'));
-        expect(plugins[2].name, equals('my_plugin3'));
-        expect(plugins[2].version, isNull);
-        expect(plugins[2].path, equals('/u/disk/src/'));
-        expect(plugins[2].libraryUri, equals('myplugin/myplugin.dart'));
-        expect(plugins[2].className, equals('MyPlugin'));
-      });
-
-      test('plugin map (empty)', () {
-        const optionsSrc = '''
-analyzer:
-  plugins:
-    # my_plugin1: ^0.1.0 #shorthand
-''';
-        var config = parseConfig(optionsSrc);
-        // Commented out plugins shouldn't cause a parse failure.
-        expect(config.plugins, hasLength(0));
-      });
-
-      test('plugin manifest', () {
-        const manifestSrc = '''
-class_name: AnalyzerPlugin
-library_uri: myplugin/analyzer_plugin.dart
-contributes_to: analyzer
-''';
-        var manifest = parsePluginManifestString(manifestSrc);
-        var plugin = manifest.plugin;
-        expect(plugin.libraryUri, equals('myplugin/analyzer_plugin.dart'));
-        expect(plugin.className, equals('AnalyzerPlugin'));
-        expect(manifest.contributesTo, unorderedEquals(['analyzer']));
-      });
-
-      test('plugin manifest (contributes_to list)', () {
-        const manifestSrc = '''
-class_name: AnalyzerPlugin
-library_uri: myplugin/analyzer_plugin.dart
-contributes_to:
-  - analyzer
-  - analysis_server
-''';
-        var manifest = parsePluginManifestString(manifestSrc);
-        var plugin = manifest.plugin;
-        expect(plugin.libraryUri, equals('myplugin/analyzer_plugin.dart'));
-        expect(plugin.className, equals('AnalyzerPlugin'));
-        expect(manifest.contributesTo,
-            unorderedEquals(['analyzer', 'analysis_server']));
-      });
-
-      group('errors', () {
-        test('bad config format', () {
-          const optionsSrc = '''
-analyzer:
-  plugins:
-    - my_plugin1
-    - my_plugin2
-''';
-          try {
-            parseConfig(optionsSrc);
-            fail('expected PluginConfigFormatException');
-          } on PluginConfigFormatException catch (e) {
-            expect(
-                e.message,
-                equals(
-                    'Unrecognized plugin config format, expected `YamlMap`, got `YamlList`'));
-            expect(e.yamlNode, new isInstanceOf<YamlList>());
-          }
-        });
-        test('bad manifest format', () {
-          const manifestSource = '''
-library_uri:
- - should be a scalar uri
-''';
-          try {
-            parsePluginManifestString(manifestSource);
-            fail('expected PluginConfigFormatException');
-          } on PluginConfigFormatException catch (e) {
-            expect(
-                e.message,
-                equals(
-                    'Unable to parse pugin manifest, expected `String`, got `YamlList`'));
-            expect(e.yamlNode, new isInstanceOf<YamlList>());
-          }
-        });
-      });
-    });
-  });
-}
-
-PluginConfig parseConfig(String optionsSrc) {
-  var options = new AnalysisOptionsProvider().getOptionsFromString(optionsSrc);
-  return new PluginConfig.fromOptions(options);
-}
-
-List<PluginInfo> pluginsSortedByName(Iterable<PluginInfo> plugins) =>
-    plugins.toList()..sort((p1, p2) => p1.name.compareTo(p2.name));
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index e654efd..aa69a70 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -5,6 +5,7 @@
 library test.src.serialization.elements_test;
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/constant/value.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -393,8 +394,9 @@
         // In 'class C {static const a = 0; static const b = a;}' the reference
         // to 'a' in 'b' is serialized as a fully qualified 'C.a' reference.
         if (r.prefix.staticElement is ClassElement) {
+          Element oElement = resolutionMap.staticElementForIdentifier(o);
           compareElements(
-              r.prefix.staticElement, o.staticElement?.enclosingElement, desc);
+              r.prefix.staticElement, oElement?.enclosingElement, desc);
           compareConstAsts(r.identifier, o, desc);
         } else {
           fail('Prefix of type ${r.prefix.staticElement.runtimeType} should not'
@@ -1593,6 +1595,10 @@
     checkLibrary('class C { set x(int value) {} }');
   }
 
+  test_class_setter_invalid_no_parameter() {
+    checkLibrary('class C { void set x() {} }');
+  }
+
   test_class_setter_static() {
     checkLibrary('class C { static void set x(int value) {} }');
   }
@@ -4671,14 +4677,12 @@
 
   test_unresolved_import() {
     allowMissingFiles = true;
-    checkLibrary("import 'foo.dart';", allowErrors: true);
-  }
-
-  test_unresolved_import_deferred() {
-    allowMissingFiles = true;
     LibraryElementImpl library =
-        checkLibrary("import 'missing.dart' deferred as p;");
-    expect(library.imports[0].importedLibrary.loadLibraryFunction, isNotNull);
+        checkLibrary("import 'foo.dart';", allowErrors: true);
+    LibraryElement importedLibrary = library.imports[0].importedLibrary;
+    expect(importedLibrary.loadLibraryFunction, isNotNull);
+    expect(importedLibrary.publicNamespace, isNotNull);
+    expect(importedLibrary.exportNamespace, isNotNull);
   }
 
   test_unresolved_part() {
diff --git a/pkg/analyzer/test/src/task/dart_test.dart b/pkg/analyzer/test/src/task/dart_test.dart
index 4041961..3b81e26 100644
--- a/pkg/analyzer/test/src/task/dart_test.dart
+++ b/pkg/analyzer/test/src/task/dart_test.dart
@@ -5,6 +5,7 @@
 library analyzer.test.src.task.dart_test;
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -186,7 +187,7 @@
       unitElement.types[0].fields[0],
       unitElement.functions[0].localVariables[0],
       unitElement.types[0].constructors[0],
-      annotation.elementAnnotation,
+      resolutionMap.elementAnnotationForAnnotation(annotation),
       unitElement.types[0].constructors[0].parameters[0]
     ];
     expect(
@@ -580,7 +581,9 @@
     // Validate metadata
     expect(part.directives[0], new isInstanceOf<PartOfDirective>());
     expect(part.directives[0].element, same(libraryA));
-    expect(part.directives[0].element.metadata, isEmpty);
+    expect(
+        resolutionMap.elementDeclaredByDirective(part.directives[0]).metadata,
+        isEmpty);
   }
 
   void _assertErrorsWithCodes(List<ErrorCode> expectedErrorCodes) {
@@ -626,7 +629,8 @@
         matcher: isBuildEnumMemberElementsTask);
     CompilationUnit unit = outputs[RESOLVED_UNIT3];
     // validate Element
-    ClassElement enumElement = unit.element.getEnum('MyEnum');
+    ClassElement enumElement =
+        resolutionMap.elementDeclaredByCompilationUnit(unit).getEnum('MyEnum');
     List<FieldElement> fields = enumElement.fields;
     expect(fields, hasLength(4));
     {
@@ -832,7 +836,8 @@
     // CompilationUnitElement(s)
     CompilationUnitElement firstPart;
     CompilationUnitElement secondPart;
-    if (partUnits[0].element.uri == 'part1.dart') {
+    if (resolutionMap.elementDeclaredByCompilationUnit(partUnits[0]).uri ==
+        'part1.dart') {
       firstPart = partUnits[0].element;
       secondPart = partUnits[1].element;
     } else {
@@ -1000,10 +1005,16 @@
 '''
     });
     CompilationUnitElement unitElement1 = partUnits
-        .singleWhere((u) => u.element.name.endsWith('part1.dart'))
+        .singleWhere((u) => resolutionMap
+            .elementDeclaredByCompilationUnit(u)
+            .name
+            .endsWith('part1.dart'))
         .element;
     CompilationUnitElement unitElement2 = partUnits
-        .singleWhere((u) => u.element.name.endsWith('part2.dart'))
+        .singleWhere((u) => resolutionMap
+            .elementDeclaredByCompilationUnit(u)
+            .name
+            .endsWith('part2.dart'))
         .element;
     PropertyAccessorElement getter = unitElement1.accessors[0];
     PropertyAccessorElement setter = unitElement2.accessors[0];
@@ -1157,19 +1168,22 @@
     computeResult(librarySpecificUnit, RESOLVED_UNIT1);
     CompilationUnit unit = outputs[RESOLVED_UNIT1];
     // Find the elements for x and D's constructor, and the annotation on C.
-    List<PropertyAccessorElement> accessors = unit.element.accessors;
+    CompilationUnitElement compilationUnitElement =
+        resolutionMap.elementDeclaredByCompilationUnit(unit);
+    List<PropertyAccessorElement> accessors = compilationUnitElement.accessors;
     Element x = accessors
         .firstWhere((PropertyAccessorElement accessor) =>
             accessor.isGetter && accessor.name == 'x')
         .variable;
-    List<ClassElement> types = unit.element.types;
+    List<ClassElement> types = compilationUnitElement.types;
     Element constructorForD =
         types.firstWhere((ClassElement cls) => cls.name == 'D').constructors[0];
     Annotation annotation = findClassAnnotation(unit, 'C');
     // Now compute the dependencies for the annotation, and check that it is
     // the set [x, constructorForD].
     // TODO(paulberry): test librarySource != source
-    computeResult(annotation.elementAnnotation, CONSTANT_DEPENDENCIES,
+    computeResult(resolutionMap.elementAnnotationForAnnotation(annotation),
+        CONSTANT_DEPENDENCIES,
         matcher: isComputeConstantDependenciesTask);
     expect(
         outputs[CONSTANT_DEPENDENCIES].toSet(), [x, constructorForD].toSet());
@@ -1197,7 +1211,8 @@
     Annotation annotation = classC.members[0].metadata[0];
     // Now compute the dependencies for the annotation, and check that it is
     // the right size.
-    computeResult(annotation.elementAnnotation, CONSTANT_DEPENDENCIES,
+    computeResult(resolutionMap.elementAnnotationForAnnotation(annotation),
+        CONSTANT_DEPENDENCIES,
         matcher: isComputeConstantDependenciesTask);
     expect(outputs[CONSTANT_DEPENDENCIES], hasLength(1));
   }
@@ -1215,7 +1230,8 @@
     computeResult(librarySpecificUnit, RESOLVED_UNIT1);
     CompilationUnit unit = outputs[RESOLVED_UNIT1];
     // Find the element for x and the annotation on C.
-    List<PropertyAccessorElement> accessors = unit.element.accessors;
+    List<PropertyAccessorElement> accessors =
+        resolutionMap.elementDeclaredByCompilationUnit(unit).accessors;
     Element x = accessors
         .firstWhere((PropertyAccessorElement accessor) =>
             accessor.isGetter && accessor.name == 'x')
@@ -1223,7 +1239,8 @@
     Annotation annotation = findClassAnnotation(unit, 'C');
     // Now compute the dependencies for the annotation, and check that it is
     // the list [x].
-    computeResult(annotation.elementAnnotation, CONSTANT_DEPENDENCIES,
+    computeResult(resolutionMap.elementAnnotationForAnnotation(annotation),
+        CONSTANT_DEPENDENCIES,
         matcher: isComputeConstantDependenciesTask);
     expect(outputs[CONSTANT_DEPENDENCIES], [x]);
   }
@@ -1263,7 +1280,8 @@
     computeResult(librarySpecificUnit, RESOLVED_UNIT1);
     CompilationUnit unit = outputs[RESOLVED_UNIT1];
     // Find the elements for the constants x and y.
-    List<PropertyAccessorElement> accessors = unit.element.accessors;
+    List<PropertyAccessorElement> accessors =
+        resolutionMap.elementDeclaredByCompilationUnit(unit).accessors;
     Element x = accessors
         .firstWhere((PropertyAccessorElement accessor) =>
             accessor.isGetter && accessor.name == 'x')
@@ -1539,14 +1557,19 @@
     LibrarySpecificUnit target = new LibrarySpecificUnit(source, source);
     computeResult(target, RESOLVED_UNIT7);
     CompilationUnit unit = outputs[RESOLVED_UNIT7];
-    TopLevelVariableElement elementA = unit.element.topLevelVariables[0];
-    TopLevelVariableElement elementB = unit.element.topLevelVariables[1];
+    TopLevelVariableElement elementA = resolutionMap
+        .elementDeclaredByCompilationUnit(unit)
+        .topLevelVariables[0];
+    TopLevelVariableElement elementB = resolutionMap
+        .elementDeclaredByCompilationUnit(unit)
+        .topLevelVariables[1];
 
     computeResult(elementA, INFERABLE_STATIC_VARIABLE_DEPENDENCIES,
         matcher: isComputeInferableStaticVariableDependenciesTask);
     expect(outputs, hasLength(1));
-    List<VariableElement> dependencies = outputs[
-        INFERABLE_STATIC_VARIABLE_DEPENDENCIES] as List<VariableElement>;
+    List<VariableElement> dependencies =
+        outputs[INFERABLE_STATIC_VARIABLE_DEPENDENCIES]
+            as List<VariableElement>;
     expect(dependencies, unorderedEquals([elementB]));
   }
 }
@@ -2678,13 +2701,26 @@
     CompilationUnit unit = outputs[RESOLVED_UNIT10];
     VariableDeclaration field = AstFinder.getFieldInClass(unit, 'B', 'f');
     MethodDeclaration method = AstFinder.getMethodInClass(unit, 'B', 'm');
-    DartType typeX = AstFinder.getClass(unit, 'X').element.type;
-    DartType typeY = AstFinder.getClass(unit, 'Y').element.type;
-    DartType typeZ = AstFinder.getClass(unit, 'Z').element.type;
+    DartType typeX = resolutionMap
+        .elementDeclaredByClassDeclaration(AstFinder.getClass(unit, 'X'))
+        .type;
+    DartType typeY = resolutionMap
+        .elementDeclaredByClassDeclaration(AstFinder.getClass(unit, 'Y'))
+        .type;
+    DartType typeZ = resolutionMap
+        .elementDeclaredByClassDeclaration(AstFinder.getClass(unit, 'Z'))
+        .type;
 
-    expect(field.element.type, typeX);
-    expect(method.element.returnType, typeY);
-    expect(method.element.parameters[0].type, typeZ);
+    expect(
+        resolutionMap.elementDeclaredByVariableDeclaration(field).type, typeX);
+    expect(resolutionMap.elementDeclaredByMethodDeclaration(method).returnType,
+        typeY);
+    expect(
+        resolutionMap
+            .elementDeclaredByMethodDeclaration(method)
+            .parameters[0]
+            .type,
+        typeZ);
   }
 
   void test_perform_cross_library_const() {
@@ -2722,10 +2758,13 @@
         AstFinder.getFieldInClass(secondUnit, 'M', 'c');
     InterfaceType stringType = context.typeProvider.stringType;
 
-    expect(variableA.element.type, stringType);
-    expect(variableB.element.type, stringType);
+    expect(resolutionMap.elementDeclaredByVariableDeclaration(variableA).type,
+        stringType);
+    expect(resolutionMap.elementDeclaredByVariableDeclaration(variableB).type,
+        stringType);
     expect(variableB.initializer.staticType, stringType);
-    expect(variableC.element.type, stringType);
+    expect(resolutionMap.elementDeclaredByVariableDeclaration(variableC).type,
+        stringType);
     expect(variableC.initializer.staticType, stringType);
   }
 
@@ -2790,7 +2829,8 @@
     CompilationUnit unit = outputs[RESOLVED_UNIT8];
     VariableDeclaration declaration = AstFinder.getFieldInClass(unit, 'M', 'X');
     InterfaceType stringType = context.typeProvider.stringType;
-    expect(declaration.element.type, stringType);
+    expect(resolutionMap.elementDeclaredByVariableDeclaration(declaration).type,
+        stringType);
   }
 
   test_perform_hasParseError() {
@@ -2853,12 +2893,16 @@
     VariableDeclaration variableC =
         AstFinder.getTopLevelVariable(firstUnit, 'c');
     ClassDeclaration classM = AstFinder.getClass(secondUnit, 'M');
-    DartType typeM = classM.element.type;
+    DartType typeM =
+        resolutionMap.elementDeclaredByClassDeclaration(classM).type;
 
-    expect(variableA.element.type, typeM);
-    expect(variableB.element.type, typeM);
+    expect(resolutionMap.elementDeclaredByVariableDeclaration(variableA).type,
+        typeM);
+    expect(resolutionMap.elementDeclaredByVariableDeclaration(variableB).type,
+        typeM);
     expect(variableB.initializer.staticType, typeM);
-    expect(variableC.element.type, typeM);
+    expect(resolutionMap.elementDeclaredByVariableDeclaration(variableC).type,
+        typeM);
     expect(variableC.initializer.staticType, typeM);
   }
 
@@ -2900,8 +2944,9 @@
     expect(outputs[RESOLVED_UNIT8], isNotNull);
     expect(outputs[CREATED_RESOLVED_UNIT8], isTrue);
     // An INFERRED_TYPE_LITERAL error should be generated.
-    List<AnalysisError> errors = outputs[
-        STATIC_VARIABLE_RESOLUTION_ERRORS_IN_UNIT] as List<AnalysisError>;
+    List<AnalysisError> errors =
+        outputs[STATIC_VARIABLE_RESOLUTION_ERRORS_IN_UNIT]
+            as List<AnalysisError>;
     expect(errors, hasLength(1));
     expect(errors[0].errorCode, StrongModeCode.INFERRED_TYPE_LITERAL);
   }
@@ -4500,7 +4545,8 @@
     Identifier boundName = boundNode.name;
     expect(boundNode.type.toString(), expectedBoundTypeString);
     expect(boundName.staticType.toString(), expectedBoundTypeString);
-    expect(boundName.staticElement.displayName, expectedBoundElementName);
+    expect(resolutionMap.staticElementForIdentifier(boundName).displayName,
+        expectedBoundElementName);
   }
 }
 
@@ -4584,7 +4630,8 @@
       ClassDeclaration nodeA = unit.declarations[0];
       ClassDeclaration nodeB = unit.declarations[1];
       DartType extendsType = nodeB.extendsClause.superclass.type;
-      expect(extendsType, nodeA.element.type);
+      expect(extendsType,
+          resolutionMap.elementDeclaredByClassDeclaration(nodeA).type);
     }
     {
       FunctionDeclaration functionNode = unit.declarations[2];
@@ -4592,7 +4639,12 @@
       List<FormalParameter> parameters =
           functionNode.functionExpression.parameters.parameters;
       expect(returnType.displayName, 'int');
-      expect(parameters[0].element.type.displayName, 'String');
+      expect(
+          resolutionMap
+              .elementDeclaredByFormalParameter(parameters[0])
+              .type
+              .displayName,
+          'String');
     }
   }
 
@@ -4626,15 +4678,20 @@
     FunctionTypeAlias nodeG = unit.declarations[1];
     {
       FormalParameter parameter = nodeF.parameters.parameters[0];
-      DartType parameterType = parameter.element.type;
-      Element returnTypeElement = nodeF.returnType.type.element;
+      DartType parameterType =
+          resolutionMap.elementDeclaredByFormalParameter(parameter).type;
+      Element returnTypeElement =
+          resolutionMap.typeForTypeName(nodeF.returnType).element;
       expect(returnTypeElement.displayName, 'int');
       expect(parameterType.element, nodeG.element);
     }
     {
       FormalParameter parameter = nodeG.parameters.parameters[0];
-      DartType parameterType = parameter.element.type;
-      expect(nodeG.returnType.type.element.displayName, 'String');
+      DartType parameterType =
+          resolutionMap.elementDeclaredByFormalParameter(parameter).type;
+      expect(
+          resolutionMap.typeForTypeName(nodeG.returnType).element.displayName,
+          'String');
       expect(parameterType.element.displayName, 'int');
     }
   }
@@ -5305,7 +5362,8 @@
         AstFinder.getStatementsInTopLevelFunction(unit, "test");
     VariableDeclaration decl =
         (statements[0] as VariableDeclarationStatement).variables.variables[0];
-    expect(decl.element.type, intType);
+    expect(
+        resolutionMap.elementDeclaredByVariableDeclaration(decl).type, intType);
     expect(decl.initializer.staticType, intType);
 
     ExpressionStatement statement = statements[1];
@@ -5593,7 +5651,8 @@
 
   void assertVariableDeclarationTypes(
       VariableDeclaration decl, DartType varType, DartType initializerType) {
-    expect(decl.element.type, varType);
+    expect(
+        resolutionMap.elementDeclaredByVariableDeclaration(decl).type, varType);
     expect(decl.initializer.staticType, initializerType);
   }
 
diff --git a/pkg/analyzer/test/src/task/incremental_element_builder_test.dart b/pkg/analyzer/test/src/task/incremental_element_builder_test.dart
index 05c7a76..05b0807 100644
--- a/pkg/analyzer/test/src/task/incremental_element_builder_test.dart
+++ b/pkg/analyzer/test/src/task/incremental_element_builder_test.dart
@@ -5,6 +5,7 @@
 library analyzer.test.src.task.incremental_element_builder_test;
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/visitor.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
@@ -1244,7 +1245,9 @@
     // Set the LibraryElement and check that its nameOffset is correct.
     libraryDirective.element =
         new LibraryElementImpl.forNode(context, libraryDirective.name);
-    expect(libraryDirective.element.nameOffset, libraryDirective.name.offset);
+    expect(
+        resolutionMap.elementDeclaredByDirective(libraryDirective).nameOffset,
+        libraryDirective.name.offset);
     // Update and check again that the nameOffset is correct.
     _buildNewUnit(r'''
 #!/bin/sh
@@ -1252,7 +1255,9 @@
 library my_lib;
 class A {}
 ''');
-    expect(libraryDirective.element.nameOffset, libraryDirective.name.offset);
+    expect(
+        resolutionMap.elementDeclaredByDirective(libraryDirective).nameOffset,
+        libraryDirective.name.offset);
   }
 
   test_directives_remove() {
@@ -1350,8 +1355,10 @@
 class A {}
 ''');
     int expectedPrefixOffset = 23;
-    expect(import1.prefix.staticElement.nameOffset, expectedPrefixOffset);
-    expect(import2.prefix.staticElement.nameOffset, expectedPrefixOffset);
+    expect(resolutionMap.staticElementForIdentifier(import1.prefix).nameOffset,
+        expectedPrefixOffset);
+    expect(resolutionMap.staticElementForIdentifier(import2.prefix).nameOffset,
+        expectedPrefixOffset);
     expect(importElement1.prefix.nameOffset, expectedPrefixOffset);
     expect(importElement2.prefix.nameOffset, expectedPrefixOffset);
   }
@@ -1528,7 +1535,11 @@
       {
         var docReferences = newNode.documentationComment.references;
         expect(docReferences, hasLength(2));
-        expect(docReferences[0].identifier.staticElement.name, 'double');
+        expect(
+            resolutionMap
+                .staticElementForIdentifier(docReferences[0].identifier)
+                .name,
+            'double');
         expect(docReferences[1].identifier.staticElement,
             same(newNodes[2].element));
       }
@@ -1549,7 +1560,11 @@
       {
         var docReferences = newNode.documentationComment.references;
         expect(docReferences, hasLength(1));
-        expect(docReferences[0].identifier.staticElement.name, 'bool');
+        expect(
+            resolutionMap
+                .staticElementForIdentifier(docReferences[0].identifier)
+                .name,
+            'bool');
       }
     }
     {
@@ -1568,7 +1583,11 @@
       {
         var docReferences = newNode.documentationComment.references;
         expect(docReferences, hasLength(1));
-        expect(docReferences[0].identifier.staticElement.name, 'int');
+        expect(
+            resolutionMap
+                .staticElementForIdentifier(docReferences[0].identifier)
+                .name,
+            'int');
       }
     }
     // verify delta
@@ -2206,8 +2225,9 @@
       AstNode parent = actual.parent;
       if (parent is Declaration) {
         ElementAnnotationImpl actualElement = actual.elementAnnotation;
-        CompilationUnitElement enclosingUnitElement =
-            parent.element.getAncestor((a) => a is CompilationUnitElement);
+        CompilationUnitElement enclosingUnitElement = resolutionMap
+            .elementDeclaredByDeclaration(parent)
+            .getAncestor((a) => a is CompilationUnitElement);
         expect(actualElement.compilationUnit, same(enclosingUnitElement));
       }
     }
diff --git a/pkg/analyzer/test/src/task/options_test.dart b/pkg/analyzer/test/src/task/options_test.dart
index b8f717a..5b1e2e8 100644
--- a/pkg/analyzer/test/src/task/options_test.dart
+++ b/pkg/analyzer/test/src/task/options_test.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/src/task/options.dart';
 import 'package:analyzer/task/general.dart';
 import 'package:analyzer/task/model.dart';
+import 'package:linter/src/rules.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 import 'package:yaml/yaml.dart';
@@ -38,7 +39,7 @@
   AnalysisOptions get analysisOptions => context.analysisOptions;
 
   configureContext(String optionsSource) =>
-      configureContextOptions(context, parseOptions(optionsSource));
+      applyToAnalysisOptions(analysisOptions, parseOptions(optionsSource));
 
   Map<String, YamlNode> parseOptions(String source) =>
       optionsProvider.getOptionsFromString(source);
@@ -87,7 +88,7 @@
     unused_local_variable: error
 ''');
 
-    List<ErrorProcessor> processors = context.analysisOptions.errorProcessors;
+    List<ErrorProcessor> processors = analysisOptions.errorProcessors;
     expect(processors, hasLength(2));
 
     var unused_local = new AnalysisError(
@@ -118,7 +119,7 @@
     - 'test/**'
 ''');
 
-    List<String> excludes = context.analysisOptions.excludePatterns;
+    List<String> excludes = analysisOptions.excludePatterns;
     expect(excludes, unorderedEquals(['foo/bar.dart', 'test/**']));
   }
 
@@ -443,6 +444,7 @@
   }
 
   test_linter_supported_rules() {
+    registerLintRules();
     validate(
         '''
 linter:
diff --git a/pkg/analyzer/test/src/task/strong/strong_test_helper.dart b/pkg/analyzer/test/src/task/strong/strong_test_helper.dart
index 2b8314d..c2debb8 100644
--- a/pkg/analyzer/test/src/task/strong/strong_test_helper.dart
+++ b/pkg/analyzer/test/src/task/strong/strong_test_helper.dart
@@ -7,6 +7,7 @@
 library analyzer.test.src.task.strong.strong_test_helper;
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/error.dart';
@@ -87,7 +88,8 @@
 
   // Extract expectations from the comments in the test files, and
   // check that all errors we emit are included in the expected map.
-  var allLibraries = _reachableLibraries(initialLibrary.element.library);
+  var allLibraries = _reachableLibraries(
+      resolutionMap.elementDeclaredByCompilationUnit(initialLibrary).library);
   for (var lib in allLibraries) {
     for (var unit in lib.units) {
       var errors = <AnalysisError>[];
@@ -173,7 +175,9 @@
 
 ErrorSeverity _errorSeverity(AnalysisContext context, AnalysisError error) {
   // Attempt to process severity in a similar way to analyzer_cli and server.
-  return ErrorProcessor.getProcessor(context, error)?.severity ??
+  return ErrorProcessor
+          .getProcessor(context.analysisOptions, error)
+          ?.severity ??
       error.errorCode.errorSeverity;
 }
 
@@ -283,13 +287,14 @@
     Map<_ErrorExpectation, AnalysisError> different) {
   // Get the source code. This reads the data again, but it's safe because
   // all tests use memory file system.
-  var sourceCode = unit.element.source.contents.data;
+  var sourceCode =
+      resolutionMap.elementDeclaredByCompilationUnit(unit).source.contents.data;
 
   String formatActualError(AnalysisError error) {
     int offset = error.offset;
     int length = error.length;
-    var span = _createSpanHelper(
-        unit.lineInfo, offset, unit.element.source, sourceCode,
+    var span = _createSpanHelper(unit.lineInfo, offset,
+        resolutionMap.elementDeclaredByCompilationUnit(unit).source, sourceCode,
         end: offset + length);
     var levelName = _errorSeverity(context, error).displayName;
     return '@$offset $levelName:${_errorCodeName(error.errorCode)}\n' +
@@ -299,7 +304,10 @@
   String formatExpectedError(_ErrorExpectation error) {
     int offset = error.offset;
     var span = _createSpanHelper(
-        unit.lineInfo, offset, unit.element.source, sourceCode);
+        unit.lineInfo,
+        offset,
+        resolutionMap.elementDeclaredByCompilationUnit(unit).source,
+        sourceCode);
     var severity = error.severity.displayName;
     return '@$offset $severity:${error.typeName}\n' + span.message('');
   }
diff --git a/pkg/analyzer/test/src/test_all.dart b/pkg/analyzer/test/src/test_all.dart
index 8f727da..6287bed 100644
--- a/pkg/analyzer/test/src/test_all.dart
+++ b/pkg/analyzer/test/src/test_all.dart
@@ -9,7 +9,7 @@
 import 'command_line/test_all.dart' as command_line;
 import 'context/test_all.dart' as context;
 import 'dart/test_all.dart' as dart;
-import 'plugin/plugin_config_test.dart' as plugin;
+import 'lint/test_all.dart' as lint;
 import 'source/test_all.dart' as source;
 import 'summary/test_all.dart' as summary;
 import 'task/test_all.dart' as task;
@@ -21,7 +21,7 @@
     command_line.main();
     context.main();
     dart.main();
-    plugin.main();
+    lint.main();
     source.main();
     summary.main();
     task.main();
diff --git a/pkg/analyzer/test/utils.dart b/pkg/analyzer/test/utils.dart
index be7e64d..5bd96ff 100644
--- a/pkg/analyzer/test/utils.dart
+++ b/pkg/analyzer/test/utils.dart
@@ -5,9 +5,11 @@
 library analyzer.test.utils;
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/generated/resolver.dart' show TypeProvider;
+import 'package:front_end/src/base/source.dart';
 import 'package:test/test.dart';
 
 /**
@@ -45,7 +47,8 @@
         return unitMember;
       }
     }
-    fail('No class named $className in ${unit.element.source}');
+    Source source = resolutionMap.elementDeclaredByCompilationUnit(unit).source;
+    fail('No class named $className in $source');
     return null;
   }
 
diff --git a/pkg/analyzer_cli/BUILD.gn b/pkg/analyzer_cli/BUILD.gn
index 69993f0..76daaf8 100644
--- a/pkg/analyzer_cli/BUILD.gn
+++ b/pkg/analyzer_cli/BUILD.gn
@@ -11,10 +11,10 @@
 
   deps = [
     "//dart/pkg/analyzer",
+    "//dart/third_party/pkg/linter",
     "//third_party/dart-pkg/pub/args",
     "//third_party/dart-pkg/pub/bazel_worker",
     "//third_party/dart-pkg/pub/cli_util",
-    "//third_party/dart-pkg/pub/linter",
     "//third_party/dart-pkg/pub/package_config",
     "//third_party/dart-pkg/pub/plugin",
     "//third_party/dart-pkg/pub/protobuf",
diff --git a/pkg/analyzer_cli/lib/src/analyzer_impl.dart b/pkg/analyzer_cli/lib/src/analyzer_impl.dart
index 14b61b8..f33706c 100644
--- a/pkg/analyzer_cli/lib/src/analyzer_impl.dart
+++ b/pkg/analyzer_cli/lib/src/analyzer_impl.dart
@@ -257,7 +257,8 @@
       AnalysisError error, CommandLineOptions options,
       [AnalysisContext context]) {
     if (context != null) {
-      ErrorProcessor processor = ErrorProcessor.getProcessor(context, error);
+      ErrorProcessor processor =
+          ErrorProcessor.getProcessor(context.analysisOptions, error);
       // If there is a processor for this error, defer to it.
       if (processor != null) {
         return processor.severity;
diff --git a/pkg/analyzer_cli/lib/src/boot_loader.dart b/pkg/analyzer_cli/lib/src/boot_loader.dart
deleted file mode 100644
index 5b03f40..0000000
--- a/pkg/analyzer_cli/lib/src/boot_loader.dart
+++ /dev/null
@@ -1,211 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library analyzer_cli.src.boot_loader;
-
-import 'dart:async';
-import 'dart:isolate';
-
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/file_system/physical_file_system.dart';
-import 'package:analyzer/source/analysis_options_provider.dart';
-import 'package:analyzer/src/context/context.dart';
-import 'package:analyzer/src/generated/engine.dart' as engine;
-import 'package:analyzer/src/plugin/plugin_configuration.dart';
-import 'package:analyzer_cli/src/driver.dart';
-import 'package:analyzer_cli/src/options.dart';
-import 'package:source_span/source_span.dart';
-import 'package:yaml/src/yaml_node.dart';
-
-const _analyzerPackageName = 'analyzer';
-
-/// Return non-null if there is a validation issue with this plugin.
-String validate(PluginInfo plugin) {
-  var missing = <String>[];
-  if (plugin.className == null) {
-    missing.add('class name');
-  }
-  if (plugin.libraryUri == null) {
-    missing.add('library uri');
-  }
-  if (missing.isEmpty) {
-    // All good.
-    return null;
-  }
-  return 'Plugin ${plugin.name} skipped, config missing: ${missing.join(", ")}';
-}
-
-List<PluginInfo> _validate(Iterable<PluginInfo> plugins) {
-  List<PluginInfo> validated = <PluginInfo>[];
-  plugins.forEach((PluginInfo plugin) {
-    String validation = validate(plugin);
-    if (validation != null) {
-      errorSink.writeln(validation);
-    } else {
-      validated.add(plugin);
-    }
-  });
-  return validated;
-}
-
-/// Source code assembler.
-class Assembler {
-  /// Plugins to configure.
-  final Iterable<PluginInfo> plugins;
-
-  /// Create an assembler for the given plugin [config].
-  Assembler(this.plugins);
-
-  /// A string enumerating required package `import`s.
-  String get enumerateImports =>
-      plugins.map((PluginInfo p) => "import '${p.libraryUri}';").join('\n');
-
-  /// A string listing initialized plugin instances.
-  String get pluginList =>
-      plugins.map((PluginInfo p) => 'new ${p.className}()').join(', ');
-
-  /// Create a file containing a `main()` suitable for loading in spawned
-  /// isolate.
-  String createMain() => _generateMain();
-
-  String _generateMain() => """
-// Copyright (c) 2015, 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.
-
-// This code was auto-generated, is not intended to be edited, and is subject to
-// significant change. Please see the README file for more information.
-
-import 'package:analyzer_cli/src/driver.dart';
-
-$enumerateImports
-
-void main(List<String> args) {
-  var starter = new Driver();
-  starter.userDefinedPlugins = [$pluginList];
-  starter.start(args);
-}
-""";
-}
-
-/// Given environment information extracted from command-line `args`, creates a
-/// a loadable analyzer "image".
-class BootLoader {
-  /// Emits an error message to [errorSink] if plugin config can't be read.
-  static final ErrorHandler _pluginConfigErrorHandler = (Exception e) {
-    String details;
-    if (e is PluginConfigFormatException) {
-      details = e.message;
-      var node = e.yamlNode;
-      if (node is YamlNode) {
-        SourceLocation location = node.span.start;
-        details += ' (line ${location.line}, column ${location.column})';
-      }
-    } else {
-      details = e.toString();
-    }
-
-    errorSink.writeln('Plugin configuration skipped: $details');
-  };
-
-  /// Reads plugin config info from the analysis options file.
-  PluginConfigOptionsProcessor _pluginOptionsProcessor =
-      new PluginConfigOptionsProcessor(_pluginConfigErrorHandler);
-
-  /// Create a loadable analyzer image configured with plugins derived from
-  /// the given analyzer command-line `args`.
-  Image createImage(List<String> args) {
-    // Parse commandline options.
-    CommandLineOptions options = CommandLineOptions.parse(args);
-
-    // Process analysis options file (and notify all interested parties).
-    _processAnalysisOptions(options);
-
-    // TODO(pquitslund): Pass in .packages info
-    return new Image(_pluginOptionsProcessor.config,
-        args: args, packageRootPath: options.packageRootPath);
-  }
-
-  File _getOptionsFile(
-      CommandLineOptions options, ResourceProvider resourceProvider) {
-    String analysisOptionsFile = options.analysisOptionsFile;
-    if (analysisOptionsFile != null) {
-      return resourceProvider.getFile(analysisOptionsFile);
-    }
-    File file =
-        resourceProvider.getFile(engine.AnalysisEngine.ANALYSIS_OPTIONS_FILE);
-    if (!file.exists) {
-      file = resourceProvider
-          .getFile(engine.AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE);
-    }
-    return file;
-  }
-
-  void _processAnalysisOptions(CommandLineOptions commandLineOptions) {
-    // Determine options file path.
-    try {
-      File file = _getOptionsFile(
-          commandLineOptions, PhysicalResourceProvider.INSTANCE);
-      AnalysisOptionsProvider analysisOptionsProvider =
-          new AnalysisOptionsProvider();
-      Map<String, YamlNode> options =
-          analysisOptionsProvider.getOptionsFromFile(file);
-      //TODO(pq): thread in proper context.
-      var temporaryContext = new AnalysisContextImpl();
-      _pluginOptionsProcessor.optionsProcessed(temporaryContext, options);
-    } on Exception catch (e) {
-      _pluginOptionsProcessor.onError(e);
-    }
-  }
-}
-
-/// A loadable "image" of a a configured analyzer instance.
-class Image {
-  /// (Optional) package root path.
-  final String packageRootPath;
-
-  /// (Optional) package map.
-  final Map<String, Uri> packages;
-
-  /// (Optional) args to be passed on to the loaded main.
-  final List<String> args;
-
-  /// Plugin configuration.
-  final PluginConfig config;
-
-  /// Create an image with the given [config] and optionally [packages],
-  /// [packageRootPath], and command line [args].
-  Image(this.config, {this.packages, this.packageRootPath, this.args});
-
-  /// Load this image.
-  ///
-  /// Loading an image consists in assembling an analyzer `main()`, configured
-  /// to include the appropriate analyzer plugins as specified in
-  /// `.analyzer_options` which is then run in a spawned isolate.
-  Future load() {
-    List<PluginInfo> plugins = _validate(config.plugins);
-    String mainSource = new Assembler(plugins).createMain();
-
-    Completer completer = new Completer();
-    ReceivePort exitListener = new ReceivePort();
-    exitListener.listen((data) {
-      completer.complete();
-      exitListener.close();
-    });
-
-    Uri uri =
-        Uri.parse('data:application/dart;charset=utf-8,${Uri.encodeComponent(
-        mainSource)}');
-
-    // TODO(pquitslund): update once .packages are supported.
-    String packageRoot =
-        packageRootPath != null ? packageRootPath : './packages';
-    Uri packageUri = new Uri.file(packageRoot);
-
-    Isolate.spawnUri(uri, args, null /* msg */,
-        packageRoot: packageUri, onExit: exitListener.sendPort);
-
-    return completer.future;
-  }
-}
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index 35caf04..c9c59b6 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -12,7 +12,6 @@
 import 'package:analyzer/file_system/file_system.dart' as file_system;
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
-import 'package:analyzer/plugin/options.dart';
 import 'package:analyzer/plugin/resolver_provider.dart';
 import 'package:analyzer/source/analysis_options_provider.dart';
 import 'package:analyzer/source/package_map_provider.dart';
@@ -30,6 +29,7 @@
 import 'package:analyzer/src/generated/source_io.dart';
 import 'package:analyzer/src/generated/utilities_general.dart'
     show PerformanceTag;
+import 'package:analyzer/src/lint/registry.dart';
 import 'package:analyzer/src/services/lint.dart';
 import 'package:analyzer/src/source/source_resource.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
@@ -41,7 +41,7 @@
 import 'package:analyzer_cli/src/options.dart';
 import 'package:analyzer_cli/src/perf_report.dart';
 import 'package:analyzer_cli/starter.dart';
-import 'package:linter/src/plugin/linter_plugin.dart';
+import 'package:linter/src/rules.dart' as linter;
 import 'package:package_config/discovery.dart' as pkg_discovery;
 import 'package:package_config/packages.dart' show Packages;
 import 'package:package_config/packages_file.dart' as pkgfile show parse;
@@ -616,13 +616,12 @@
   void _processPlugins() {
     List<Plugin> plugins = <Plugin>[];
     plugins.addAll(AnalysisEngine.instance.requiredPlugins);
-    plugins.add(AnalysisEngine.instance.commandLinePlugin);
-    plugins.add(AnalysisEngine.instance.optionsPlugin);
-    plugins.add(linterPlugin);
     plugins.addAll(_userDefinedPlugins);
 
     ExtensionManager manager = new ExtensionManager();
     manager.processPlugins(plugins);
+
+    linter.registerLintRules();
   }
 
   /// Analyze a single source.
@@ -767,29 +766,21 @@
       AnalysisContext context,
       CommandLineOptions options) {
     file_system.File file = _getOptionsFile(resourceProvider, options);
-    List<OptionsProcessor> optionsProcessors =
-        AnalysisEngine.instance.optionsPlugin.optionsProcessors;
 
-    try {
-      AnalysisOptionsProvider analysisOptionsProvider =
-          new AnalysisOptionsProvider(sourceFactory);
-      Map<String, YamlNode> optionMap =
-          analysisOptionsProvider.getOptionsFromFile(file);
-      optionsProcessors.forEach(
-          (OptionsProcessor p) => p.optionsProcessed(context, optionMap));
+    AnalysisOptionsProvider analysisOptionsProvider =
+        new AnalysisOptionsProvider(sourceFactory);
+    Map<String, YamlNode> optionMap =
+        analysisOptionsProvider.getOptionsFromFile(file);
 
-      // Fill in lint rule defaults in case lints are enabled and rules are
-      // not specified in an options file.
-      if (options.lints && !containsLintRuleEntry(optionMap)) {
-        setLints(context, linterPlugin.contributedRules);
-      }
+    // Fill in lint rule defaults in case lints are enabled and rules are
+    // not specified in an options file.
+    if (options.lints && !containsLintRuleEntry(optionMap)) {
+      setLints(context, Registry.ruleRegistry.defaultRules);
+    }
 
-      // Ask engine to further process options.
-      if (optionMap != null) {
-        configureContextOptions(context, optionMap);
-      }
-    } on Exception catch (e) {
-      optionsProcessors.forEach((OptionsProcessor p) => p.onError(e));
+    // Ask engine to further process options.
+    if (optionMap != null) {
+      applyToAnalysisOptions(context.analysisOptions, optionMap);
     }
   }
 }
diff --git a/pkg/analyzer_cli/lib/src/plugin/plugin_manager.dart b/pkg/analyzer_cli/lib/src/plugin/plugin_manager.dart
deleted file mode 100644
index 7c819fd..0000000
--- a/pkg/analyzer_cli/lib/src/plugin/plugin_manager.dart
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library analyzer_cli.src.plugin.plugin_manager;
-
-import 'dart:io';
-
-import 'package:analyzer/src/plugin/plugin_configuration.dart';
-import 'package:path/path.dart' as path;
-
-const _manifestFileName = 'plugins.yaml';
-
-/// Given a local configuration (as defined in an analysis options file) and
-/// information from a plugin manifest, return plugin info appropriate for
-/// configuring this plugin.
-PluginInfo combine(PluginInfo localConfig, PluginInfo manifestInfo) {
-  return new PluginInfo(
-      name: localConfig.name,
-      version: manifestInfo.version,
-      className: manifestInfo.className,
-      libraryUri: manifestInfo.libraryUri);
-}
-
-/// Call-back to allow for the injection of manifest readers that do not need
-/// to go to disk (for testing purposes).
-typedef String ManifestReader(Uri uri);
-
-/// Wraps a [plugin] info object elaborated with any configuration information
-/// extracted from an associated manifest and [status].
-class PluginDetails {
-  /// Plugin status.
-  final PluginStatus status;
-
-  /// Plugin info.
-  final PluginInfo plugin;
-
-  /// Wrap a [plugin] with [status] info.
-  PluginDetails(this.plugin) : status = PluginStatus.Applicable;
-  PluginDetails.notApplicable(this.plugin)
-      : status = PluginStatus.NotApplicable;
-  PluginDetails.notFound(this.plugin) : status = PluginStatus.NotFound;
-}
-
-/// Manages plugin information derived from plugin manifests.
-class PluginManager {
-  /// Mapping from package name to package location.
-  final Map<String, Uri> _packageMap;
-
-  /// The package naming the app to host plugins.
-  final String hostPackage;
-
-  /// Function to perform the reading of manifest URIs. (For testing.)
-  ManifestReader _manifestReader;
-
-  /// Create a plugin manager with backing package map information.
-  PluginManager(this._packageMap, this.hostPackage,
-      [ManifestReader manifestReader]) {
-    _manifestReader =
-        manifestReader != null ? manifestReader : _findAndReadManifestAtUri;
-  }
-
-  /// Find a plugin manifest describing the given [pluginPackage].
-  PluginManifest findManifest(String pluginPackage) {
-    Uri uri = _packageMap[pluginPackage];
-    String contents = _manifestReader(uri);
-    if (contents == null) {
-      return null;
-    }
-    return parsePluginManifestString(contents);
-  }
-
-  /// Return [PluginDetails] derived from associated plugin manifests
-  /// corresponding to plugins specified in the given [config].
-  Iterable<PluginDetails> getPluginDetails(PluginConfig config) =>
-      config.plugins.map((PluginInfo localConfig) {
-        PluginManifest manifest = findManifest(localConfig.name);
-        return _getDetails(localConfig, manifest);
-      });
-
-  String _findAndReadManifestAtUri(Uri uri) {
-    File manifestFile = _findManifest(uri);
-    return manifestFile?.readAsStringSync();
-  }
-
-  File _findManifest(Uri uri) {
-    if (uri == null) {
-      return null;
-    }
-
-    Directory directory = new Directory.fromUri(uri);
-    File file = new File(path.join(directory.path, _manifestFileName));
-
-    return file.existsSync() ? file : null;
-  }
-
-  PluginDetails _getDetails(PluginInfo localConfig, PluginManifest manifest) {
-    if (manifest == null) {
-      return new PluginDetails.notFound(localConfig);
-    }
-    if (!manifest.contributesTo.contains(hostPackage)) {
-      return new PluginDetails.notApplicable(localConfig);
-    }
-
-    return new PluginDetails(combine(localConfig, manifest.plugin));
-  }
-}
-
-/// Describes plugin status.
-enum PluginStatus { Applicable, NotApplicable, NotFound }
diff --git a/pkg/analyzer_cli/test/all.dart b/pkg/analyzer_cli/test/all.dart
index 5764922..86d6d75 100644
--- a/pkg/analyzer_cli/test/all.dart
+++ b/pkg/analyzer_cli/test/all.dart
@@ -2,7 +2,6 @@
 // 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 'boot_loader_test.dart' as boot_loader;
 import 'build_mode_test.dart' as build_mode_test;
 import 'driver_test.dart' as driver;
 import 'embedder_test.dart' as embedder;
@@ -10,14 +9,12 @@
 import 'options_test.dart' as options;
 import 'package_prefix_test.dart' as package_prefix;
 import 'perf_report_test.dart' as perf;
-import 'plugin_manager_test.dart' as plugin_manager;
 import 'reporter_test.dart' as reporter;
 import 'sdk_ext_test.dart' as sdk_ext;
 import 'super_mixin_test.dart' as super_mixin;
 //import 'strong_mode_test.dart' as strong_mode;
 
 main() {
-  boot_loader.main();
   build_mode_test.main();
   driver.main();
   embedder.main();
@@ -28,7 +25,6 @@
   error.main();
   options.main();
   perf.main();
-  plugin_manager.main();
   reporter.main();
   super_mixin.main();
   package_prefix.main();
diff --git a/pkg/analyzer_cli/test/boot_loader_test.dart b/pkg/analyzer_cli/test/boot_loader_test.dart
deleted file mode 100644
index 30223fb..0000000
--- a/pkg/analyzer_cli/test/boot_loader_test.dart
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library analyzer_cli.test.boot_loader_test;
-
-import 'dart:io';
-
-import 'package:analyzer/src/plugin/plugin_configuration.dart';
-import 'package:analyzer_cli/src/boot_loader.dart';
-import 'package:analyzer_cli/src/driver.dart';
-import 'package:analyzer_cli/src/options.dart';
-import 'package:path/path.dart' as path;
-import 'package:test/test.dart';
-
-import 'utils.dart';
-
-main() {
-  StringSink savedOutSink, savedErrorSink;
-  int savedExitCode;
-  ExitHandler savedExitHandler;
-
-  /// Base setup.
-  _setUp() {
-    savedOutSink = outSink;
-    savedErrorSink = errorSink;
-    savedExitHandler = exitHandler;
-    savedExitCode = exitCode;
-    exitHandler = (code) => exitCode = code;
-    outSink = new StringBuffer();
-    errorSink = new StringBuffer();
-  }
-
-  /// Base teardown.
-  _tearDown() {
-    outSink = savedOutSink;
-    errorSink = savedErrorSink;
-    exitCode = savedExitCode;
-    exitHandler = savedExitHandler;
-  }
-
-  setUp(() => _setUp());
-
-  tearDown(() => _tearDown());
-
-  group('Bootloader', () {
-    group('plugin processing', () {
-      test('bad format', () {
-        BootLoader loader = new BootLoader();
-        loader.createImage([
-          '--options',
-          path.join(testDirectory, 'data/bad_plugin_options.yaml'),
-          path.join(testDirectory, 'data/test_file.dart')
-        ]);
-        expect(
-            errorSink.toString(),
-            'Plugin configuration skipped: Unrecognized plugin config '
-            'format, expected `YamlMap`, got `YamlList` '
-            '(line 2, column 4)\n');
-      });
-      test('plugin config', () {
-        BootLoader loader = new BootLoader();
-        Image image = loader.createImage([
-          '--options',
-          path.join(testDirectory, 'data/plugin_options.yaml'),
-          path.join(testDirectory, 'data/test_file.dart')
-        ]);
-        var plugins = image.config.plugins;
-        expect(plugins, hasLength(1));
-        expect(plugins.first.name, 'my_plugin1');
-      });
-      group('plugin validation', () {
-        test('requires class name', () {
-          expect(
-              validate(new PluginInfo(
-                  name: 'test_plugin', libraryUri: 'my_package/foo.dart')),
-              isNotNull);
-        });
-        test('requires library URI', () {
-          expect(
-              validate(
-                  new PluginInfo(name: 'test_plugin', className: 'MyPlugin')),
-              isNotNull);
-        });
-        test('check', () {
-          expect(
-              validate(new PluginInfo(
-                  name: 'test_plugin',
-                  className: 'MyPlugin',
-                  libraryUri: 'my_package/foo.dart')),
-              isNull);
-        });
-      });
-    });
-  });
-}
diff --git a/pkg/analyzer_cli/test/driver_test.dart b/pkg/analyzer_cli/test/driver_test.dart
index f582e59..0c18639 100644
--- a/pkg/analyzer_cli/test/driver_test.dart
+++ b/pkg/analyzer_cli/test/driver_test.dart
@@ -7,7 +7,6 @@
 import 'dart:io';
 
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/plugin/options.dart';
 import 'package:analyzer/source/analysis_options_provider.dart';
 import 'package:analyzer/source/error_processor.dart';
 import 'package:analyzer/src/error/codes.dart';
@@ -17,7 +16,6 @@
 import 'package:analyzer_cli/src/driver.dart';
 import 'package:analyzer_cli/src/options.dart';
 import 'package:path/path.dart' as path;
-import 'package:plugin/plugin.dart';
 import 'package:test/test.dart';
 import 'package:yaml/src/yaml_node.dart';
 
@@ -53,18 +51,6 @@
 
   group('Driver', () {
     group('options', () {
-      test('custom processor', () {
-        Driver driver = new Driver();
-        TestProcessor processor = new TestProcessor();
-        driver.userDefinedPlugins = [new TestPlugin(processor)];
-        driver.start([
-          '--options',
-          path.join(testDirectory, 'data/test_options.yaml'),
-          path.join(testDirectory, 'data/test_file.dart')
-        ]);
-        expect(processor.options['test_plugin'], isNotNull);
-        expect(processor.exception, isNull);
-      });
       test('todos', () {
         drive('data/file_with_todo.dart');
         expect(outSink.toString().contains('[info]'), isFalse);
@@ -521,39 +507,6 @@
 ErrorProcessor processorFor(AnalysisError error) =>
     processors.firstWhere((p) => p.appliesTo(error));
 
-class TestPlugin extends Plugin {
-  TestProcessor processor;
-  TestPlugin(this.processor);
-
-  @override
-  String get uniqueIdentifier => 'test_plugin.core';
-
-  @override
-  void registerExtensionPoints(RegisterExtensionPoint register) {
-    // None
-  }
-
-  @override
-  void registerExtensions(RegisterExtension register) {
-    register(OPTIONS_PROCESSOR_EXTENSION_POINT_ID, processor);
-  }
-}
-
-class TestProcessor extends OptionsProcessor {
-  Map<String, Object> options;
-  Exception exception;
-
-  @override
-  void onError(Exception exception) {
-    this.exception = exception;
-  }
-
-  @override
-  void optionsProcessed(AnalysisContext context, Map<String, Object> options) {
-    this.options = options;
-  }
-}
-
 class TestSource implements Source {
   TestSource();
 
diff --git a/pkg/analyzer_cli/test/plugin_manager_test.dart b/pkg/analyzer_cli/test/plugin_manager_test.dart
deleted file mode 100644
index e257300..0000000
--- a/pkg/analyzer_cli/test/plugin_manager_test.dart
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library analyzer_cli.test.plugin_manager_test;
-
-import 'package:analyzer/src/plugin/plugin_configuration.dart';
-import 'package:analyzer_cli/src/plugin/plugin_manager.dart';
-import 'package:test/test.dart';
-
-main() {
-  group('plugin manager tests', () {
-    test('combine plugin info', () {
-      PluginInfo localInfo = new PluginInfo(name: 'my_plugin');
-      PluginInfo manifestInfo = new PluginInfo(
-          className: 'MyPlugin', libraryUri: 'my_plugin/my_plugin.dart');
-
-      PluginInfo merged = combine(localInfo, manifestInfo);
-      expect(merged.name, equals('my_plugin'));
-      expect(merged.className, equals('MyPlugin'));
-      expect(merged.libraryUri, equals('my_plugin/my_plugin.dart'));
-    });
-
-    test('find manifest', () {
-      const manifestSrc = '''
-library_uri: 'my_plugin/my_plugin.dart'
-''';
-      var packageMap = {'my_plugin': new Uri.file('my_plugin')};
-
-      PluginManager pm =
-          new PluginManager(packageMap, 'analyzer', (Uri uri) => manifestSrc);
-
-      PluginManifest manifest = pm.findManifest('my_plugin');
-      expect(manifest, isNotNull);
-      expect(manifest.plugin.libraryUri, equals('my_plugin/my_plugin.dart'));
-    });
-
-    final plugin1Uri = new Uri.file('my_plugin1');
-    final plugin2Uri = new Uri.file('my_plugin2');
-    final plugin3Uri = new Uri.file('my_plugin3');
-
-    const serverPluginManifest = '''
-library_uri: 'my_plugin2/my_plugin2.dart'
-contributes_to: analysis_server
-''';
-    const analyzerPluginManifest = '''
-library_uri: 'my_plugin3/my_plugin3.dart'
-contributes_to: analyzer
-''';
-
-    var packageMap = {
-      'my_plugin': plugin1Uri,
-      'my_plugin2': plugin2Uri,
-      'my_plugin3': plugin3Uri
-    };
-
-    var manifestReader = (Uri uri) {
-      if (uri == plugin2Uri) return serverPluginManifest;
-      if (uri == plugin3Uri) return analyzerPluginManifest;
-      return null;
-    };
-
-    test('get plugin details', () {
-      PluginManager pm =
-          new PluginManager(packageMap, 'analysis_server', manifestReader);
-
-      PluginInfo notFound = new PluginInfo(name: 'my_plugin1');
-      PluginInfo applicable = new PluginInfo(name: 'my_plugin2');
-      PluginInfo notApplicable = new PluginInfo(name: 'my_plugin3');
-
-      PluginConfig localConfig =
-          new PluginConfig([notFound, applicable, notApplicable]);
-
-      Iterable<PluginDetails> details = pm.getPluginDetails(localConfig);
-      expect(details, hasLength(3));
-
-      List<PluginDetails> plugins = sortByName(details);
-
-      expect(plugins[0].plugin.name, equals('my_plugin1'));
-      expect(plugins[0].status, equals(PluginStatus.NotFound));
-      expect(plugins[1].plugin.name, equals('my_plugin2'));
-      expect(
-          plugins[1].plugin.libraryUri, equals('my_plugin2/my_plugin2.dart'));
-      expect(plugins[1].status, equals(PluginStatus.Applicable));
-      expect(plugins[2].plugin.name, equals('my_plugin3'));
-      expect(plugins[2].status, equals(PluginStatus.NotApplicable));
-    });
-  });
-}
-
-List<PluginDetails> sortByName(Iterable<PluginDetails> details) =>
-    details.toList()
-      ..sort((p1, p2) => p1.plugin.name.compareTo(p2.plugin.name));
diff --git a/pkg/compiler/lib/src/closure.dart b/pkg/compiler/lib/src/closure.dart
index f9885ba..2d3c15e 100644
--- a/pkg/compiler/lib/src/closure.dart
+++ b/pkg/compiler/lib/src/closure.dart
@@ -20,6 +20,7 @@
 import 'tokens/token.dart' show Token;
 import 'tree/tree.dart';
 import 'util/util.dart';
+import 'world.dart' show ClosedWorldRefiner;
 
 class ClosureTask extends CompilerTask {
   Map<Element, ClosureClassMap> _closureMappingCache =
@@ -49,9 +50,11 @@
   }
 
   /// Create [ClosureClassMap]s for all live members.
-  void createClosureClasses() {
-    compiler.enqueuer.resolution.processedElements
+  void createClosureClasses(ClosedWorldRefiner closedWorldRefiner) {
+    compiler.enqueuer.resolution.processedEntities
         .forEach((AstElement element) {
+      // TODO(johnniwinther): Typedefs should never be in processedElements.
+      if (element.isTypedef) return;
       ResolvedAst resolvedAst = element.resolvedAst;
       if (element.isAbstract) return;
       if (element.isField &&
@@ -60,11 +63,12 @@
         // Skip top-level/static fields without an initializer.
         return;
       }
-      computeClosureToClassMapping(resolvedAst);
+      computeClosureToClassMapping(resolvedAst, closedWorldRefiner);
     });
   }
 
-  ClosureClassMap computeClosureToClassMapping(ResolvedAst resolvedAst) {
+  ClosureClassMap computeClosureToClassMapping(
+      ResolvedAst resolvedAst, ClosedWorldRefiner closedWorldRefiner) {
     return measure(() {
       Element element = resolvedAst.element;
       ClosureClassMap cached = _closureMappingCache[element];
@@ -77,8 +81,8 @@
         Node node = resolvedAst.node;
         TreeElements elements = resolvedAst.elements;
 
-        ClosureTranslator translator =
-            new ClosureTranslator(compiler, elements, _closureMappingCache);
+        ClosureTranslator translator = new ClosureTranslator(
+            compiler, closedWorldRefiner, elements, _closureMappingCache);
 
         // The translator will store the computed closure-mappings inside the
         // cache. One for given node and one for each nested closure.
@@ -121,7 +125,7 @@
       throw new SpannableAssertionFailure(
           closure, 'Not a closure: $closure (${closure.runtimeType}).');
     }
-    compiler.enqueuer.codegen.forgetElement(cls, compiler);
+    compiler.enqueuer.codegen.forgetEntity(cls, compiler);
   }
 }
 
@@ -543,6 +547,7 @@
 
 class ClosureTranslator extends Visitor {
   final Compiler compiler;
+  final ClosedWorldRefiner closedWorldRefiner;
   final TreeElements elements;
   int closureFieldCounter = 0;
   int boxedFieldCounter = 0;
@@ -574,7 +579,8 @@
 
   bool insideClosure = false;
 
-  ClosureTranslator(this.compiler, this.elements, this.closureMappingCache);
+  ClosureTranslator(this.compiler, this.closedWorldRefiner, this.elements,
+      this.closureMappingCache);
 
   DiagnosticReporter get reporter => compiler.reporter;
 
@@ -1068,7 +1074,7 @@
     ClosureClassElement globalizedElement =
         new ClosureClassElement(node, closureName, compiler, element);
     // Extend [globalizedElement] as an instantiated class in the closed world.
-    compiler.inferenceWorld.registerClosureClass(globalizedElement);
+    closedWorldRefiner.registerClosureClass(globalizedElement);
     FunctionElement callElement = new SynthesizedCallMethodElementX(
         Identifiers.call, element, globalizedElement, node, elements);
     backend.maybeMarkClosureAsNeededForReflection(
diff --git a/pkg/compiler/lib/src/common/backend_api.dart b/pkg/compiler/lib/src/common/backend_api.dart
index 089058c..5fef086 100644
--- a/pkg/compiler/lib/src/common/backend_api.dart
+++ b/pkg/compiler/lib/src/common/backend_api.dart
@@ -18,6 +18,7 @@
 import '../dart_types.dart' show DartType, InterfaceType;
 import '../elements/elements.dart'
     show ClassElement, Element, FunctionElement, MethodElement, LibraryElement;
+import '../elements/entities.dart';
 import '../enqueue.dart' show Enqueuer, EnqueueTask, ResolutionEnqueuer;
 import '../io/code_output.dart' show CodeBuffer;
 import '../io/source_information.dart' show SourceInformationStrategy;
@@ -32,6 +33,7 @@
 import '../tree/tree.dart' show Node;
 import '../universe/world_impact.dart'
     show ImpactStrategy, WorldImpact, WorldImpactBuilder;
+import '../world.dart' show ClosedWorldRefiner;
 import 'codegen.dart' show CodegenWorkItem;
 import 'tasks.dart' show CompilerTask;
 
@@ -105,7 +107,7 @@
 
   List<CompilerTask> get tasks;
 
-  void onResolutionComplete() {}
+  void onResolutionComplete(ClosedWorldRefiner closedWorldRefiner) {}
   void onTypeInferenceComplete() {}
 
   bool classNeedsRti(ClassElement cls);
@@ -172,13 +174,6 @@
   /// specific [WorldImpact] of this is returned.
   WorldImpact registerGetOfStaticFunction() => const WorldImpact();
 
-  /// Called to register that the `runtimeType` property has been accessed. Any
-  /// backend specific [WorldImpact] of this is returned.
-  WorldImpact registerRuntimeType() => const WorldImpact();
-
-  /// Called to register a `noSuchMethod` implementation.
-  void registerNoSuchMethod(FunctionElement noSuchMethodElement) {}
-
   /// Called to enable support for `noSuchMethod`. Any backend specific
   /// [WorldImpact] of this is returned.
   WorldImpact enableNoSuchMethod() => const WorldImpact();
@@ -222,7 +217,7 @@
 
   /// Called to register that [element] is statically known to be used. Any
   /// backend specific [WorldImpact] of this is returned.
-  WorldImpact registerStaticUse(Element element, {bool forResolution}) =>
+  WorldImpact registerUsedElement(Element element, {bool forResolution}) =>
       const WorldImpact();
 
   /// This method is called immediately after the [LibraryElement] [library] has
@@ -305,7 +300,7 @@
   /// There is no guarantee that a class is only present once in
   /// [recentClasses], but every class seen by the [enqueuer] will be present in
   /// [recentClasses] at least once.
-  bool onQueueEmpty(Enqueuer enqueuer, Iterable<ClassElement> recentClasses) {
+  bool onQueueEmpty(Enqueuer enqueuer, Iterable<ClassEntity> recentClasses) {
     return true;
   }
 
@@ -313,11 +308,9 @@
   /// times, but [onQueueClosed] is only called once.
   void onQueueClosed() {}
 
-  /// Called when the compiler starts running the codegen enqueuer.
-  void onCodegenStart() {}
-
-  /// Called after [element] has been resolved.
-  void onElementResolved(Element element) {}
+  /// Called when the compiler starts running the codegen enqueuer. The
+  /// [WorldImpact] of enabled backend features is returned.
+  WorldImpact onCodegenStart() => const WorldImpact();
 
   // Does this element belong in the output
   bool shouldOutput(Element element) => true;
@@ -405,6 +398,7 @@
   ClassElement get numImplementation;
   ClassElement get stringImplementation;
   ClassElement get listImplementation;
+  ClassElement get mutableListImplementation;
   ClassElement get growableListImplementation;
   ClassElement get fixedListImplementation;
   ClassElement get constListImplementation;
@@ -420,4 +414,8 @@
   ClassElement get syncStarIterableImplementation;
   ClassElement get asyncFutureImplementation;
   ClassElement get asyncStarStreamImplementation;
+  ClassElement get indexableImplementation;
+  ClassElement get mutableIndexableImplementation;
+
+  bool isDefaultEqualityImplementation(Element element);
 }
diff --git a/pkg/compiler/lib/src/common/names.dart b/pkg/compiler/lib/src/common/names.dart
index 06ef360..715d8cf 100644
--- a/pkg/compiler/lib/src/common/names.dart
+++ b/pkg/compiler/lib/src/common/names.dart
@@ -162,6 +162,9 @@
   /// The URI for 'dart:html'.
   static final Uri dart_html = new Uri(scheme: 'dart', path: 'html');
 
+  /// The URI for 'dart:isolate'.
+  static final Uri dart_isolate = new Uri(scheme: 'dart', path: 'isolate');
+
   /// The URI for 'dart:mirrors'.
   static final Uri dart_mirrors = new Uri(scheme: 'dart', path: 'mirrors');
 
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index 16ef47d..82895d9 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -180,9 +180,6 @@
   MirrorUsageAnalyzerTask mirrorUsageAnalyzerTask;
   DumpInfoTask dumpInfoTask;
 
-  bool get hasFunctionApplySupport => resolverWorld.hasFunctionApplySupport;
-  bool get hasIsolateSupport => resolverWorld.hasIsolateSupport;
-
   bool get hasCrashed => _reporter.hasCrashed;
 
   Stopwatch progress;
@@ -282,13 +279,6 @@
     tasks.addAll(backend.tasks);
   }
 
-  /// The world currently being computed by resolution. This forms a basis for
-  /// the [inferenceWorld] and later the [closedWorld].
-  OpenWorld get openWorld => _world;
-
-  /// The closed world after resolution but currently refined by inference.
-  ClosedWorldRefiner get inferenceWorld => _world;
-
   /// The closed world after resolution and inference.
   ClosedWorld get closedWorld {
     assert(invariant(CURRENT_ELEMENT_SPANNABLE, _world.isClosed,
@@ -323,8 +313,7 @@
   ///
   /// Override this to mock the resolver for testing.
   ResolverTask createResolverTask() {
-    return new ResolverTask(
-        resolution, backend.constantCompilerTask, openWorld, measurer);
+    return new ResolverTask(resolution, backend.constantCompilerTask, measurer);
   }
 
   // TODO(johnniwinther): Rename these appropriately when unification of worlds/
@@ -732,10 +721,11 @@
         }
         assert(mainFunction != null);
 
-        closeResolution();
+        ClosedWorldRefiner closedWorldRefiner = closeResolution();
 
         reporter.log('Inferring types...');
-        globalInference.runGlobalTypeInference(mainFunction);
+        globalInference.runGlobalTypeInference(
+            mainFunction, closedWorld, closedWorldRefiner);
 
         if (stopAfterTypeInference) return;
 
@@ -744,11 +734,7 @@
         reporter.log('Compiling...');
         phase = PHASE_COMPILING;
 
-        backend.onCodegenStart();
-        if (hasIsolateSupport) {
-          enqueuer.codegen
-              .applyImpact(backend.enableIsolateSupport(forResolution: false));
-        }
+        enqueuer.codegen.applyImpact(backend.onCodegenStart());
         if (compileAll) {
           libraryLoader.libraries.forEach((LibraryElement library) {
             enqueuer.codegen.applyImpact(computeImpactForLibrary(library));
@@ -771,19 +757,20 @@
       });
 
   /// Perform the steps needed to fully end the resolution phase.
-  void closeResolution() {
+  ClosedWorldRefiner closeResolution() {
     phase = PHASE_DONE_RESOLVING;
 
-    openWorld.closeWorld(reporter);
+    WorldImpl world = resolverWorld.openWorld.closeWorld(reporter);
     // Compute whole-program-knowledge that the backend needs. (This might
     // require the information computed in [world.closeWorld].)
-    backend.onResolutionComplete();
+    backend.onResolutionComplete(world);
 
     deferredLoadTask.onResolutionComplete(mainFunction);
 
     // TODO(johnniwinther): Move this after rti computation but before
     // reflection members computation, and (re-)close the world afterwards.
-    closureToClassMapper.createClosureClasses();
+    closureToClassMapper.createClosureClasses(world);
+    return world;
   }
 
   /// Compute the [WorldImpact] for accessing all elements in [library].
@@ -908,7 +895,7 @@
       });
     }
     if (!REPORT_EXCESS_RESOLUTION) return;
-    var resolved = new Set.from(enqueuer.resolution.processedElements);
+    var resolved = new Set.from(enqueuer.resolution.processedEntities);
     for (Element e in enqueuer.codegen.processedEntities) {
       resolved.remove(e);
     }
@@ -939,7 +926,7 @@
       // TODO(ahe): Add structured diagnostics to the compiler API and
       // use it to separate this from the --verbose option.
       assert(phase == PHASE_RESOLVING);
-      reporter.log('Resolved ${enqueuer.resolution.processedElements.length} '
+      reporter.log('Resolved ${enqueuer.resolution.processedEntities.length} '
           'elements.');
       progress.reset();
     }
@@ -1113,7 +1100,7 @@
 
   void forgetElement(Element element) {
     resolution.forgetElement(element);
-    enqueuer.forgetElement(element);
+    enqueuer.forgetEntity(element);
     if (element is MemberElement) {
       for (Element closure in element.nestedClosures) {
         // TODO(ahe): It would be nice to reuse names of nested closures.
@@ -1983,7 +1970,7 @@
 
   @override
   void registerClass(ClassElement cls) {
-    _compiler.openWorld.registerClass(cls);
+    enqueuer.universe.openWorld.registerClass(cls);
   }
 
   @override
diff --git a/pkg/compiler/lib/src/deferred_load.dart b/pkg/compiler/lib/src/deferred_load.dart
index d2c8ddb..49e1668 100644
--- a/pkg/compiler/lib/src/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load.dart
@@ -420,7 +420,7 @@
       // If we see a class, add everything its live instance members refer
       // to.  Static members are not relevant, unless we are processing
       // extra dependencies due to mirrors.
-      void addLiveInstanceMember(Element element) {
+      void addLiveInstanceMember(_, Element element) {
         if (!compiler.enqueuer.resolution.hasBeenProcessed(element)) return;
         if (!isMirrorUsage && !element.isInstanceMember) return;
         elements.add(element);
@@ -428,11 +428,7 @@
       }
 
       ClassElement cls = element.declaration;
-      cls.forEachLocalMember(addLiveInstanceMember);
-      if (cls.implementation != cls) {
-        // TODO(ahe): Why doesn't ClassElement.forEachLocalMember do this?
-        cls.implementation.forEachLocalMember(addLiveInstanceMember);
-      }
+      cls.implementation.forEachMember(addLiveInstanceMember);
       for (var type in cls.implementation.allSupertypes) {
         elements.add(type.element.implementation);
       }
diff --git a/pkg/compiler/lib/src/dump_info.dart b/pkg/compiler/lib/src/dump_info.dart
index db6a13a..523186c 100644
--- a/pkg/compiler/lib/src/dump_info.dart
+++ b/pkg/compiler/lib/src/dump_info.dart
@@ -419,9 +419,11 @@
   }
 
   final Map<Element, Set<Element>> _dependencies = {};
-  void registerDependency(Element source, Element target) {
+  void registerDependency(Element target) {
     if (compiler.options.dumpInfo) {
-      _dependencies.putIfAbsent(source, () => new Set()).add(target);
+      _dependencies
+          .putIfAbsent(compiler.currentElement, () => new Set())
+          .add(target);
     }
   }
 
@@ -431,8 +433,8 @@
     }
   }
 
-  void unregisterImpact(Element element) {
-    impacts.remove(element);
+  void unregisterImpact(var impactSource) {
+    impacts.remove(impactSource);
   }
 
   /**
diff --git a/pkg/compiler/lib/src/elements/common.dart b/pkg/compiler/lib/src/elements/common.dart
index 6ab5de2..83eb3ea 100644
--- a/pkg/compiler/lib/src/elements/common.dart
+++ b/pkg/compiler/lib/src/elements/common.dart
@@ -601,7 +601,12 @@
   }
 }
 
-enum _FromEnvironmentState { NOT, BOOL, INT, STRING, }
+enum _FromEnvironmentState {
+  NOT,
+  BOOL,
+  INT,
+  STRING,
+}
 
 abstract class ConstructorElementCommon implements ConstructorElement {
   _FromEnvironmentState _fromEnvironmentState;
diff --git a/pkg/compiler/lib/src/enqueue.dart b/pkg/compiler/lib/src/enqueue.dart
index eb88a0b..30c5aef 100644
--- a/pkg/compiler/lib/src/enqueue.dart
+++ b/pkg/compiler/lib/src/enqueue.dart
@@ -14,7 +14,6 @@
 import 'common/work.dart' show WorkItem;
 import 'common.dart';
 import 'compiler.dart' show Compiler, GlobalDependencyRegistry;
-import 'core_types.dart' show CommonElements;
 import 'options.dart';
 import 'dart_types.dart' show DartType, InterfaceType;
 import 'elements/elements.dart'
@@ -25,8 +24,6 @@
         ConstructorElement,
         Element,
         Entity,
-        LibraryElement,
-        LocalFunctionElement,
         MemberElement;
 import 'elements/entities.dart';
 import 'native/native.dart' as native;
@@ -59,7 +56,6 @@
             : const TreeShakingEnqueuerStrategy(),
         compiler.globalDependencies,
         compiler.backend,
-        compiler.coreClasses,
         compiler.cacheStrategy);
     _codegen = compiler.backend.createCodegenEnqueuer(this, compiler);
   }
@@ -67,16 +63,16 @@
   ResolutionEnqueuer get resolution => _resolution;
   Enqueuer get codegen => _codegen;
 
-  void forgetElement(Element element) {
-    resolution.forgetElement(element, compiler);
-    codegen.forgetElement(element, compiler);
+  void forgetEntity(Entity entity) {
+    resolution.forgetEntity(entity, compiler);
+    codegen.forgetEntity(entity, compiler);
   }
 }
 
 abstract class Enqueuer {
   WorldBuilder get universe;
   native.NativeEnqueuer get nativeEnqueuer;
-  void forgetElement(Element element, Compiler compiler);
+  void forgetEntity(Entity entity, Compiler compiler);
 
   // TODO(johnniwinther): Initialize [_impactStrategy] to `null`.
   ImpactStrategy _impactStrategy = const ImpactStrategy();
@@ -107,22 +103,19 @@
   /// Apply the [worldImpact] to this enqueuer. If the [impactSource] is
   /// provided the impact strategy will remove it from the element impact cache,
   /// if it is no longer needed.
-  void applyImpact(WorldImpact worldImpact, {Element impactSource});
+  void applyImpact(WorldImpact worldImpact, {var impactSource});
   bool checkNoEnqueuedInvokedInstanceMethods();
   void logSummary(log(message));
 
-  /// Returns [:true:] if [member] has been processed by this enqueuer.
-  bool isProcessed(Element member);
-
   Iterable<Entity> get processedEntities;
 
-  Iterable<ClassElement> get processedClasses;
+  Iterable<ClassEntity> get processedClasses;
 }
 
 abstract class EnqueuerImpl extends Enqueuer {
   CompilerTask get task;
   EnqueuerStrategy get strategy;
-  void checkClass(ClassElement cls);
+  void checkClass(ClassEntity cls);
   void processStaticUse(StaticUse staticUse);
   void processTypeUse(TypeUse typeUse);
   void processDynamicUse(DynamicUse dynamicUse);
@@ -139,11 +132,10 @@
   final CompilerOptions _options;
   final Backend backend;
   final GlobalDependencyRegistry _globalDependencies;
-  final CommonElements _commonElements;
   final native.NativeEnqueuer nativeEnqueuer;
 
   final EnqueuerStrategy strategy;
-  Set<ClassElement> _recentClasses = new Setlet<ClassElement>();
+  final Set<ClassEntity> _recentClasses = new Setlet<ClassEntity>();
   final ResolutionWorldBuilderImpl _universe;
 
   bool queueIsClosed = false;
@@ -151,7 +143,7 @@
   WorldImpactVisitor _impactVisitor;
 
   /// All declaration elements that have been processed by the resolver.
-  final Set<AstElement> processedElements = new Set<AstElement>();
+  final Set<Entity> _processedElements = new Set<Entity>();
 
   final Queue<WorkItem> _queue = new Queue<WorkItem>();
 
@@ -166,7 +158,6 @@
       this.strategy,
       this._globalDependencies,
       Backend backend,
-      this._commonElements,
       CacheStrategy cacheStrategy,
       [this.name = 'resolution enqueuer'])
       : this.backend = backend,
@@ -185,9 +176,9 @@
 
   DiagnosticReporter get _reporter => _resolution.reporter;
 
-  Iterable<ClassElement> get processedClasses => _universe.processedClasses;
+  Iterable<ClassEntity> get processedClasses => _universe.processedClasses;
 
-  void applyImpact(WorldImpact worldImpact, {Element impactSource}) {
+  void applyImpact(WorldImpact worldImpact, {var impactSource}) {
     if (worldImpact.isEmpty) return;
     impactStrategy.visitImpact(
         impactSource, worldImpact, _impactVisitor, impactUse);
@@ -218,9 +209,9 @@
     return strategy.checkEnqueuerConsistency(this);
   }
 
-  void checkClass(ClassElement cls) {
+  void checkClass(ClassEntity cls) {
     _universe.processClassMembers(cls,
-        (MemberElement member, EnumSet<MemberUse> useSet) {
+        (MemberEntity member, EnumSet<MemberUse> useSet) {
       if (useSet.isNotEmpty) {
         _reporter.internalError(member,
             'Unenqueued use of $member: ${useSet.iterable(MemberUse.values)}');
@@ -228,36 +219,24 @@
     });
   }
 
-  /// Callback for applying the first seen use of a [member].
-  void _applyFirstMemberUse(MemberElement member, EnumSet<MemberUse> useSet) {
-    ClassElement cls = member.enclosingClass;
-    if (member.isFunction) {
-      MemberElement function = member;
-      if (function.name == Identifiers.noSuchMethod_) {
-        _registerNoSuchMethod(function);
-      }
-      if (function.name == Identifiers.call && !cls.typeVariables.isEmpty) {
-        _registerCallMethodWithFreeTypeVariables(function);
-      }
-    }
-    _applyMemberUse(member, useSet);
-  }
-
   /// Callback for applying the use of a [member].
   void _applyMemberUse(Entity member, EnumSet<MemberUse> useSet) {
     if (useSet.contains(MemberUse.NORMAL)) {
       _addToWorkList(member);
     }
-    if (useSet.contains(MemberUse.CLOSURIZE)) {
+    if (useSet.contains(MemberUse.CLOSURIZE_INSTANCE)) {
       _registerClosurizedMember(member);
     }
+    if (useSet.contains(MemberUse.CLOSURIZE_STATIC)) {
+      applyImpact(backend.registerGetOfStaticFunction());
+    }
   }
 
   /// Callback for applying the use of a [cls].
   void _applyClassUse(ClassEntity cls, EnumSet<ClassUse> useSet) {
     if (useSet.contains(ClassUse.INSTANTIATED)) {
       _recentClasses.add(cls);
-      _universe.processClassMembers(cls, _applyFirstMemberUse);
+      _universe.processClassMembers(cls, _applyMemberUse);
       // We only tell the backend once that [cls] was instantiated, so
       // any additional dependencies must be treated as global
       // dependencies.
@@ -275,34 +254,10 @@
   }
 
   void processStaticUse(StaticUse staticUse) {
-    Element element = staticUse.element;
-    assert(invariant(element, element.isDeclaration,
-        message: "Element ${element} is not the declaration."));
-    _universe.registerStaticUse(staticUse);
-    applyImpact(backend.registerStaticUse(element, forResolution: true));
-    bool addElement = true;
+    _universe.registerStaticUse(staticUse, _applyMemberUse);
+    // TODO(johnniwinther): Add `ResolutionWorldBuilder.registerConstructorUse`
+    // for these:
     switch (staticUse.kind) {
-      case StaticUseKind.STATIC_TEAR_OFF:
-        applyImpact(backend.registerGetOfStaticFunction());
-        break;
-      case StaticUseKind.FIELD_GET:
-      case StaticUseKind.FIELD_SET:
-      case StaticUseKind.CLOSURE:
-        // TODO(johnniwinther): Avoid this. Currently [FIELD_GET] and
-        // [FIELD_SET] contains [BoxFieldElement]s which we cannot enqueue.
-        // Also [CLOSURE] contains [LocalFunctionElement] which we cannot
-        // enqueue.
-        LocalFunctionElement closure = staticUse.element;
-        if (closure.type.containsTypeVariables) {
-          _universe.closuresWithFreeTypeVariables.add(closure);
-        }
-        addElement = false;
-        break;
-      case StaticUseKind.SUPER_FIELD_SET:
-      case StaticUseKind.SUPER_TEAR_OFF:
-      case StaticUseKind.GENERAL:
-      case StaticUseKind.DIRECT_USE:
-        break;
       case StaticUseKind.CONSTRUCTOR_INVOKE:
       case StaticUseKind.CONST_CONSTRUCTOR_INVOKE:
         _registerInstantiatedType(staticUse.type,
@@ -314,14 +269,9 @@
             globalDependency: false,
             isRedirection: true);
         break;
-      case StaticUseKind.DIRECT_INVOKE:
-        invariant(
-            element, 'Direct static use is not supported for resolution.');
+      default:
         break;
     }
-    if (addElement) {
-      _addToWorkList(element);
-    }
   }
 
   void processTypeUse(TypeUse typeUse) {
@@ -349,24 +299,21 @@
         }
         break;
       case TypeUseKind.TYPE_LITERAL:
+        if (type.isTypedef) {
+          universe.openWorld.registerTypedef(type.element);
+        }
         break;
     }
   }
 
   void _registerIsCheck(DartType type) {
-    type = _universe.registerIsCheck(type, _resolution);
+    type = _universe.registerIsCheck(type);
     // Even in checked mode, type annotations for return type and argument
     // types do not imply type checks, so there should never be a check
     // against the type variable of a typedef.
     assert(!type.isTypeVariable || !type.element.enclosingElement.isTypedef);
   }
 
-  void _registerCallMethodWithFreeTypeVariables(Element element) {
-    applyImpact(backend.registerCallMethodWithFreeTypeVariables(element,
-        forResolution: true));
-    _universe.callMethodsWithFreeTypeVariables.add(element);
-  }
-
   void _registerClosurizedMember(MemberElement element) {
     assert(element.isInstanceMember);
     if (element.type.containsTypeVariables) {
@@ -383,9 +330,9 @@
       while (_queue.isNotEmpty) {
         // TODO(johnniwinther): Find an optimal process order.
         WorkItem work = _queue.removeLast();
-        if (!isProcessed(work.element)) {
+        if (!_processedElements.contains(work.element)) {
           strategy.processWorkItem(f, work);
-          registerProcessedElement(work.element);
+          _processedElements.add(work.element);
         }
       }
       List recents = _recentClasses.toList(growable: false);
@@ -397,29 +344,30 @@
   }
 
   void logSummary(log(message)) {
-    log('Resolved ${processedElements.length} elements.');
+    log('Resolved ${_processedElements.length} elements.');
     nativeEnqueuer.logSummary(log);
   }
 
   String toString() => 'Enqueuer($name)';
 
-  Iterable<Entity> get processedEntities => processedElements;
+  Iterable<Entity> get processedEntities => _processedElements;
 
   ImpactUseCase get impactUse => IMPACT_USE;
 
   bool get isResolutionQueue => true;
 
-  bool isProcessed(Element member) => processedElements.contains(member);
-
   /// Returns `true` if [element] has been processed by the resolution enqueuer.
+  // TODO(johnniwinther): Move this to the [OpenWorld]/[ResolutionWorldBuilder].
   bool hasBeenProcessed(Element element) {
-    return processedElements.contains(element.analyzableElement.declaration);
+    assert(invariant(element, element == element.analyzableElement.declaration,
+        message: "Unexpected element $element"));
+    return _processedElements.contains(element);
   }
 
-  /// Registers [element] as processed by the resolution enqueuer.
-  void registerProcessedElement(AstElement element) {
-    processedElements.add(element);
-    backend.onElementResolved(element);
+  /// Registers [element] as processed by the resolution enqueuer. Used only for
+  /// testing.
+  void registerProcessedElementInternal(AstElement element) {
+    _processedElements.add(element);
   }
 
   /// Adds [element] to the work list if it has not already been processed.
@@ -437,67 +385,26 @@
           element, "Resolution work list is closed. Trying to add $element.");
     }
 
+    applyImpact(backend.registerUsedElement(element, forResolution: true));
     _openWorld.registerUsedElement(element);
 
     ResolutionWorkItem workItem = _resolution.createWorkItem(element);
     _queue.add(workItem);
-
-    // Enable isolate support if we start using something from the isolate
-    // library, or timers for the async library.  We exclude constant fields,
-    // which are ending here because their initializing expression is compiled.
-    LibraryElement library = element.library;
-    if (!universe.hasIsolateSupport && (!element.isField || !element.isConst)) {
-      String uri = library.canonicalUri.toString();
-      if (uri == 'dart:isolate') {
-        _enableIsolateSupport();
-      } else if (uri == 'dart:async') {
-        if (element.name == '_createTimer' ||
-            element.name == '_createPeriodicTimer') {
-          // The [:Timer:] class uses the event queue of the isolate
-          // library, so we make sure that event queue is generated.
-          _enableIsolateSupport();
-        }
-      }
-    }
-
-    if (element.isGetter && element.name == Identifiers.runtimeType_) {
-      // Enable runtime type support if we discover a getter called runtimeType.
-      // We have to enable runtime type before hitting the codegen, so
-      // that constructors know whether they need to generate code for
-      // runtime type.
-      _universe.hasRuntimeTypeSupport = true;
-      // TODO(ahe): Record precise dependency here.
-      applyImpact(backend.registerRuntimeType());
-    } else if (_commonElements.isFunctionApplyMethod(element)) {
-      _universe.hasFunctionApplySupport = true;
-    }
   }
 
-  void _registerNoSuchMethod(Element element) {
-    backend.registerNoSuchMethod(element);
-  }
-
-  void _enableIsolateSupport() {
-    _universe.hasIsolateSupport = true;
-    applyImpact(backend.enableIsolateSupport(forResolution: true));
-  }
-
-  /**
-   * Adds an action to the deferred task queue.
-   *
-   * The action is performed the next time the resolution queue has been
-   * emptied.
-   *
-   * The queue is processed in FIFO order.
-   */
-  void addDeferredAction(Element element, void action()) {
+  /// Adds an action to the deferred task queue.
+  /// The action is performed the next time the resolution queue has been
+  /// emptied.
+  ///
+  /// The queue is processed in FIFO order.
+  void addDeferredAction(Entity entity, void action()) {
     if (queueIsClosed) {
       throw new SpannableAssertionFailure(
-          element,
+          entity,
           "Resolution work list is closed. "
-          "Trying to add deferred action for $element");
+          "Trying to add deferred action for $entity");
     }
-    _deferredQueue.add(new _DeferredAction(element, action));
+    _deferredQueue.add(new _DeferredAction(entity, action));
   }
 
   /// [_onQueueEmpty] is called whenever the queue is drained. [recentClasses]
@@ -506,7 +413,7 @@
   /// the [recentClasses] have been processed and may be cleared. If [false] is
   /// returned, [_onQueueEmpty] will be called once the queue is empty again (or
   /// still empty) and [recentClasses] will be a superset of the current value.
-  bool _onQueueEmpty(Iterable<ClassElement> recentClasses) {
+  bool _onQueueEmpty(Iterable<ClassEntity> recentClasses) {
     _emptyDeferredQueue();
 
     return backend.onQueueEmpty(this, recentClasses);
@@ -521,18 +428,12 @@
     }
   }
 
-  void forgetElement(Element element, Compiler compiler) {
-    _universe.forgetElement(element, compiler);
-    processedElements.remove(element);
+  void forgetEntity(Entity entity, Compiler compiler) {
+    _universe.forgetEntity(entity, compiler);
+    _processedElements.remove(entity);
   }
 }
 
-void removeFromSet(Map<String, Set<Element>> map, Element element) {
-  Set<Element> set = map[element.name];
-  if (set == null) return;
-  set.remove(element);
-}
-
 /// Strategy used by the enqueuer to populate the world.
 class EnqueuerStrategy {
   const EnqueuerStrategy();
diff --git a/pkg/compiler/lib/src/inferrer/inferrer_visitor.dart b/pkg/compiler/lib/src/inferrer/inferrer_visitor.dart
index 7b913b0..ccc1155 100644
--- a/pkg/compiler/lib/src/inferrer/inferrer_visitor.dart
+++ b/pkg/compiler/lib/src/inferrer/inferrer_visitor.dart
@@ -751,6 +751,8 @@
 
   DiagnosticReporter get reporter => compiler.reporter;
 
+  ClosedWorld get closedWorld => compiler.closedWorld;
+
   @override
   SemanticSendVisitor get sendVisitor => this;
 
@@ -963,7 +965,6 @@
   T get thisType {
     if (_thisType != null) return _thisType;
     ClassElement cls = outermostElement.enclosingClass;
-    ClosedWorld closedWorld = compiler.closedWorld;
     if (closedWorld.isUsedAsMixin(cls)) {
       return _thisType = types.nonNullSubtype(cls);
     } else {
diff --git a/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart b/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart
index f6cdace..253e65f 100644
--- a/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart
+++ b/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart
@@ -16,14 +16,13 @@
 import '../js_backend/js_backend.dart' as js;
 import '../native/native.dart' as native;
 import '../resolution/operators.dart' as op;
-import '../resolution/tree_elements.dart' show TreeElements;
 import '../tree/tree.dart' as ast;
 import '../types/types.dart' show TypeMask, GlobalTypeInferenceElementData;
 import '../universe/call_structure.dart' show CallStructure;
 import '../universe/selector.dart' show Selector;
 import '../universe/side_effects.dart' show SideEffects;
 import '../util/util.dart' show Link, Setlet;
-import '../world.dart' show ClosedWorld;
+import '../world.dart' show ClosedWorld, ClosedWorldRefiner;
 import 'inferrer_visitor.dart';
 
 /**
@@ -35,6 +34,7 @@
     implements MinimalInferrerEngine<T> {
   final Compiler compiler;
   final ClosedWorld closedWorld;
+  final ClosedWorldRefiner closedWorldRefiner;
   final V types;
   final Map<ast.Node, T> concreteTypes = new Map<ast.Node, T>();
   final Set<Element> generativeConstructorsExposingThis = new Set<Element>();
@@ -44,9 +44,8 @@
   final Map<Element, GlobalTypeInferenceElementData> inTreeData =
       new Map<Element, GlobalTypeInferenceElementData>();
 
-  InferrerEngine(Compiler compiler, this.types)
-      : this.compiler = compiler,
-        this.closedWorld = compiler.closedWorld;
+  InferrerEngine(
+      this.compiler, this.closedWorld, this.closedWorldRefiner, this.types);
 
   CoreClasses get coreClasses => compiler.coreClasses;
 
@@ -180,7 +179,7 @@
   void forEachElementMatching(
       Selector selector, TypeMask mask, bool f(Element element)) {
     Iterable<Element> elements =
-        compiler.closedWorld.allFunctions.filter(selector, mask);
+        closedWorld.allFunctions.filter(selector, mask);
     for (Element e in elements) {
       if (!f(e.implementation)) return;
     }
@@ -219,8 +218,7 @@
       sideEffects.setAllSideEffects();
       sideEffects.setDependsOnSomething();
     } else {
-      sideEffects
-          .add(compiler.inferenceWorld.getCurrentlyKnownSideEffects(callee));
+      sideEffects.add(closedWorldRefiner.getCurrentlyKnownSideEffects(callee));
     }
   }
 
@@ -492,7 +490,7 @@
         });
       }
       if (analyzedElement.isGenerativeConstructor && cls.isAbstract) {
-        if (compiler.closedWorld.isInstantiated(cls)) {
+        if (closedWorld.isInstantiated(cls)) {
           returnType = types.nonNullSubclass(cls);
         } else {
           // TODO(johnniwinther): Avoid analyzing [analyzedElement] in this
@@ -541,7 +539,8 @@
       }
     }
 
-    compiler.inferenceWorld.registerSideEffects(analyzedElement, sideEffects);
+    inferrer.closedWorldRefiner
+        .registerSideEffects(analyzedElement, sideEffects);
     assert(breaksFor.isEmpty);
     assert(continuesFor.isEmpty);
     return returnType;
@@ -655,7 +654,7 @@
   bool isInClassOrSubclass(Element element) {
     ClassElement cls = outermostElement.enclosingClass.declaration;
     ClassElement enclosing = element.enclosingClass.declaration;
-    return compiler.closedWorld.isSubclassOf(enclosing, cls);
+    return closedWorld.isSubclassOf(enclosing, cls);
   }
 
   void checkIfExposesThis(Selector selector, TypeMask mask) {
@@ -1362,7 +1361,7 @@
           (node.asSendSet() != null) &&
           (node.asSendSet().receiver != null) &&
           node.asSendSet().receiver.isThis()) {
-        Iterable<Element> targets = compiler.closedWorld.allFunctions.filter(
+        Iterable<Element> targets = closedWorld.allFunctions.filter(
             setterSelector, types.newTypedSelector(thisType, setterMask));
         // We just recognized a field initialization of the form:
         // `this.foo = 42`. If there is only one target, we can update
@@ -1635,7 +1634,7 @@
     } else if (element != null &&
         element.isField &&
         Elements.isStaticOrTopLevelField(element) &&
-        compiler.closedWorld.fieldNeverChanges(element)) {
+        closedWorld.fieldNeverChanges(element)) {
       FieldElement fieldElement = element;
       ConstantValue value =
           compiler.backend.constants.getConstantValue(fieldElement.constant);
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
index 67f2aa0..1ac65fc 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
@@ -25,7 +25,7 @@
 import '../universe/selector.dart' show Selector;
 import '../universe/side_effects.dart' show SideEffects;
 import '../util/util.dart' show Setlet;
-import '../world.dart' show ClosedWorld;
+import '../world.dart' show ClosedWorld, ClosedWorldRefiner;
 import 'closure_tracer.dart';
 import 'debug.dart' as debug;
 import 'inferrer_visitor.dart' show ArgumentsTypes, TypeSystem;
@@ -36,9 +36,7 @@
 import 'type_graph_nodes.dart';
 
 class TypeInformationSystem extends TypeSystem<TypeInformation> {
-  final Compiler compiler;
   final ClosedWorld closedWorld;
-  final CommonMasks commonMasks;
 
   /// [ElementTypeInformation]s for elements.
   final Map<Element, TypeInformation> typeInformations =
@@ -72,12 +70,12 @@
         allocatedTypes
       ].expand((x) => x);
 
-  TypeInformationSystem(Compiler compiler, this.commonMasks)
-      : this.compiler = compiler,
-        this.closedWorld = compiler.closedWorld {
-    nonNullEmptyType = getConcreteTypeFor(const TypeMask.nonNullEmpty());
+  TypeInformationSystem(this.closedWorld) {
+    nonNullEmptyType = getConcreteTypeFor(commonMasks.emptyType);
   }
 
+  CommonMasks get commonMasks => closedWorld.commonMasks;
+
   /// Used to group [TypeInformation] nodes by the element that triggered their
   /// creation.
   MemberTypeInformation _currentMember = null;
@@ -252,8 +250,7 @@
   TypeInformation refineReceiver(Selector selector, TypeMask mask,
       TypeInformation receiver, bool isConditional) {
     if (receiver.type.isExact) return receiver;
-    TypeMask otherType =
-        compiler.closedWorld.allFunctions.receiverType(selector, mask);
+    TypeMask otherType = closedWorld.allFunctions.receiverType(selector, mask);
     // Conditional sends (a?.b) can still narrow the possible types of `a`,
     // however, we still need to consider that `a` may be null.
     if (isConditional) {
@@ -366,7 +363,7 @@
   TypeInformation allocateList(
       TypeInformation type, ast.Node node, Element enclosing,
       [TypeInformation elementType, int length]) {
-    ClassElement typedDataClass = compiler.commonElements.typedDataClass;
+    ClassElement typedDataClass = closedWorld.commonElements.typedDataClass;
     bool isTypedArray = typedDataClass != null &&
         closedWorld.isInstantiated(typedDataClass) &&
         type.type.satisfies(typedDataClass, closedWorld);
@@ -570,7 +567,6 @@
       <CallSiteTypeInformation>[];
   final WorkQueue workQueue = new WorkQueue();
   final Element mainElement;
-  final CommonMasks commonMasks;
   final Set<Element> analyzedElements = new Set<Element>();
 
   /// The maximum number of times we allow a node in the graph to
@@ -581,14 +577,15 @@
   int overallRefineCount = 0;
   int addedInGraph = 0;
 
-  TypeGraphInferrerEngine(
-      Compiler compiler, CommonMasks commonMasks, this.mainElement)
-      : commonMasks = commonMasks,
-        super(compiler, new TypeInformationSystem(compiler, commonMasks));
+  TypeGraphInferrerEngine(Compiler compiler, ClosedWorld closedWorld,
+      ClosedWorldRefiner closedWorldRefiner, this.mainElement)
+      : super(compiler, closedWorld, closedWorldRefiner,
+            new TypeInformationSystem(closedWorld));
 
   JavaScriptBackend get backend => compiler.backend;
   Annotations get annotations => backend.annotations;
   DiagnosticReporter get reporter => compiler.reporter;
+  CommonMasks get commonMasks => closedWorld.commonMasks;
 
   /**
    * A set of selector names that [List] implements, that we know return
@@ -704,7 +701,7 @@
         tracer.run();
         if (!tracer.continueAnalyzing) {
           elements.forEach((FunctionElement e) {
-            compiler.inferenceWorld.registerMightBePassedToApply(e);
+            closedWorldRefiner.registerMightBePassedToApply(e);
             if (debug.VERBOSE) print("traced closure $e as ${true} (bail)");
             e.functionSignature.forEachParameter((parameter) {
               types
@@ -724,11 +721,11 @@
             workQueue.add(info);
           });
           if (tracer.tracedType.mightBePassedToFunctionApply) {
-            compiler.inferenceWorld.registerMightBePassedToApply(e);
+            closedWorldRefiner.registerMightBePassedToApply(e);
           }
           if (debug.VERBOSE) {
             print("traced closure $e as "
-                "${compiler.inferenceWorld
+                "${closedWorldRefiner
                     .getCurrentlyKnownMightBePassedToApply(e)}");
           }
         });
@@ -915,14 +912,13 @@
     allocatedCalls.forEach((info) {
       if (!info.inLoop) return;
       if (info is StaticCallSiteTypeInformation) {
-        compiler.inferenceWorld.addFunctionCalledInLoop(info.calledElement);
-      } else if (info.mask != null &&
-          !info.mask.containsAll(compiler.closedWorld)) {
+        closedWorldRefiner.addFunctionCalledInLoop(info.calledElement);
+      } else if (info.mask != null && !info.mask.containsAll(closedWorld)) {
         // For instance methods, we only register a selector called in a
         // loop if it is a typed selector, to avoid marking too many
         // methods as being called from within a loop. This cuts down
         // on the code bloat.
-        info.targets.forEach(compiler.inferenceWorld.addFunctionCalledInLoop);
+        info.targets.forEach(closedWorldRefiner.addFunctionCalledInLoop);
       }
     });
   }
@@ -1189,7 +1185,7 @@
           arguments, sideEffects, inLoop);
     }
 
-    compiler.closedWorld.allFunctions.filter(selector, mask).forEach((callee) {
+    closedWorld.allFunctions.filter(selector, mask).forEach((callee) {
       updateSideEffects(sideEffects, selector, callee);
     });
 
@@ -1247,11 +1243,8 @@
   Iterable<ResolvedAst> sortResolvedAsts() {
     int max = 0;
     Map<int, Setlet<ResolvedAst>> methodSizes = <int, Setlet<ResolvedAst>>{};
-    compiler.enqueuer.resolution.processedElements
+    compiler.enqueuer.resolution.processedEntities
         .forEach((AstElement element) {
-      // TODO(ngeoffray): Not sure why the resolver would put a null
-      // mapping.
-      if (!compiler.enqueuer.resolution.hasBeenProcessed(element)) return;
       ResolvedAst resolvedAst = element.resolvedAst;
       element = element.implementation;
       if (element.impliesType) return;
@@ -1359,14 +1352,20 @@
 class TypeGraphInferrer implements TypesInferrer {
   TypeGraphInferrerEngine inferrer;
   final Compiler compiler;
-  final CommonMasks commonMasks;
-  TypeGraphInferrer(this.compiler, this.commonMasks);
+  final ClosedWorld closedWorld;
+  final ClosedWorldRefiner closedWorldRefiner;
+
+  TypeGraphInferrer(this.compiler, this.closedWorld, this.closedWorldRefiner);
 
   String get name => 'Graph inferrer';
+
+  CommonMasks get commonMasks => closedWorld.commonMasks;
+
   TypeMask get _dynamicType => commonMasks.dynamicType;
 
   void analyzeMain(Element main) {
-    inferrer = new TypeGraphInferrerEngine(compiler, commonMasks, main);
+    inferrer = new TypeGraphInferrerEngine(
+        compiler, closedWorld, closedWorldRefiner, main);
     inferrer.runOverAllElements();
   }
 
@@ -1417,11 +1416,11 @@
 
     TypeMask result = const TypeMask.nonNullEmpty();
     Iterable<Element> elements =
-        compiler.closedWorld.allFunctions.filter(selector, mask);
+        inferrer.closedWorld.allFunctions.filter(selector, mask);
     for (Element element in elements) {
       TypeMask type =
           inferrer.typeOfElementWithSelector(element, selector).type;
-      result = result.union(type, compiler.closedWorld);
+      result = result.union(type, inferrer.closedWorld);
     }
     return result;
   }
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
index 7e3bbd6..7cf31f0 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
@@ -522,13 +522,13 @@
       return mask;
     }
     if (element.isField) {
-      return _narrowType(compiler.closedWorld, mask, element.type);
+      return _narrowType(inferrer.closedWorld, mask, element.type);
     }
     assert(
         element.isFunction || element.isGetter || element.isFactoryConstructor);
 
     FunctionType type = element.type;
-    return _narrowType(compiler.closedWorld, mask, type.returnType);
+    return _narrowType(inferrer.closedWorld, mask, type.returnType);
   }
 
   TypeMask computeType(TypeGraphInferrerEngine inferrer) {
@@ -640,7 +640,7 @@
       giveUp(inferrer);
       return safeType(inferrer);
     }
-    if (inferrer.compiler.inferenceWorld
+    if (inferrer.closedWorldRefiner
         .getCurrentlyKnownMightBePassedToApply(declaration)) {
       giveUp(inferrer);
       return safeType(inferrer);
@@ -669,7 +669,7 @@
     // ignore type annotations to ensure that the checks are actually inserted
     // into the function body and retained until runtime.
     assert(!compiler.options.enableTypeAssertions);
-    return _narrowType(compiler.closedWorld, mask, element.type);
+    return _narrowType(inferrer.closedWorld, mask, element.type);
   }
 
   TypeMask computeType(TypeGraphInferrerEngine inferrer) {
@@ -818,8 +818,7 @@
   void addToGraph(TypeGraphInferrerEngine inferrer) {
     assert(receiver != null);
     TypeMask typeMask = computeTypedSelector(inferrer);
-    targets =
-        inferrer.compiler.closedWorld.allFunctions.filter(selector, typeMask);
+    targets = inferrer.closedWorld.allFunctions.filter(selector, typeMask);
     receiver.addUser(this);
     if (arguments != null) {
       arguments.forEach((info) => info.addUser(this));
@@ -973,16 +972,16 @@
     Compiler compiler = inferrer.compiler;
     JavaScriptBackend backend = compiler.backend;
     TypeMask maskToUse =
-        compiler.closedWorld.extendMaskIfReachesAll(selector, typeMask);
+        inferrer.closedWorld.extendMaskIfReachesAll(selector, typeMask);
     bool canReachAll = backend.hasInvokeOnSupport && (maskToUse != typeMask);
 
     // If this call could potentially reach all methods that satisfy
     // the untyped selector (through noSuchMethod's `Invocation`
     // and a call to `delegate`), we iterate over all these methods to
     // update their parameter types.
-    targets = compiler.closedWorld.allFunctions.filter(selector, maskToUse);
+    targets = inferrer.closedWorld.allFunctions.filter(selector, maskToUse);
     Iterable<Element> typedTargets = canReachAll
-        ? compiler.closedWorld.allFunctions.filter(selector, typeMask)
+        ? inferrer.closedWorld.allFunctions.filter(selector, typeMask)
         : targets;
 
     // Update the call graph if the targets could have changed.
@@ -1078,8 +1077,7 @@
     if (!abandonInferencing) {
       inferrer.updateSelectorInTree(caller, call, selector, mask);
       Iterable<Element> oldTargets = targets;
-      targets =
-          inferrer.compiler.closedWorld.allFunctions.filter(selector, mask);
+      targets = inferrer.closedWorld.allFunctions.filter(selector, mask);
       for (Element element in targets) {
         if (!oldTargets.contains(element)) {
           MemberTypeInformation callee =
diff --git a/pkg/compiler/lib/src/io/position_information.dart b/pkg/compiler/lib/src/io/position_information.dart
index cfb6657..a316930 100644
--- a/pkg/compiler/lib/src/io/position_information.dart
+++ b/pkg/compiler/lib/src/io/position_information.dart
@@ -685,7 +685,13 @@
   }
 }
 
-enum BranchKind { CONDITION, LOOP, CATCH, FINALLY, CASE, }
+enum BranchKind {
+  CONDITION,
+  LOOP,
+  CATCH,
+  FINALLY,
+  CASE,
+}
 
 enum StepKind {
   FUN_ENTRY,
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index 811096b..8b5e052 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -30,6 +30,7 @@
 import '../deferred_load.dart' show DeferredLoadTask;
 import '../dump_info.dart' show DumpInfoTask;
 import '../elements/elements.dart';
+import '../elements/entities.dart';
 import '../enqueue.dart'
     show Enqueuer, ResolutionEnqueuer, TreeShakingEnqueuerStrategy;
 import '../io/position_information.dart' show PositionSourceInformationStrategy;
@@ -63,7 +64,7 @@
         WorldImpactVisitor,
         StagedWorldImpactBuilder;
 import '../util/util.dart';
-import '../world.dart' show ClosedWorld;
+import '../world.dart' show ClosedWorld, ClosedWorldRefiner;
 import 'backend_helpers.dart';
 import 'backend_impact.dart';
 import 'backend_serialization.dart' show JavaScriptBackendSerialization;
@@ -336,74 +337,6 @@
   static const bool TRACE_CALLS =
       TRACE_METHOD == 'post' || TRACE_METHOD == 'console';
 
-  TypeMask get stringType => compiler.closedWorld.commonMasks.stringType;
-  TypeMask get doubleType => compiler.closedWorld.commonMasks.doubleType;
-  TypeMask get intType => compiler.closedWorld.commonMasks.intType;
-  TypeMask get uint32Type => compiler.closedWorld.commonMasks.uint32Type;
-  TypeMask get uint31Type => compiler.closedWorld.commonMasks.uint31Type;
-  TypeMask get positiveIntType =>
-      compiler.closedWorld.commonMasks.positiveIntType;
-  TypeMask get numType => compiler.closedWorld.commonMasks.numType;
-  TypeMask get boolType => compiler.closedWorld.commonMasks.boolType;
-  TypeMask get dynamicType => compiler.closedWorld.commonMasks.dynamicType;
-  TypeMask get nullType => compiler.closedWorld.commonMasks.nullType;
-  TypeMask get emptyType => const TypeMask.nonNullEmpty();
-  TypeMask get nonNullType => compiler.closedWorld.commonMasks.nonNullType;
-
-  TypeMask _indexablePrimitiveTypeCache;
-  TypeMask get indexablePrimitiveType {
-    if (_indexablePrimitiveTypeCache == null) {
-      _indexablePrimitiveTypeCache = new TypeMask.nonNullSubtype(
-          helpers.jsIndexableClass, compiler.closedWorld);
-    }
-    return _indexablePrimitiveTypeCache;
-  }
-
-  TypeMask _readableArrayTypeCache;
-  TypeMask get readableArrayType {
-    if (_readableArrayTypeCache == null) {
-      _readableArrayTypeCache = new TypeMask.nonNullSubclass(
-          helpers.jsArrayClass, compiler.closedWorld);
-    }
-    return _readableArrayTypeCache;
-  }
-
-  TypeMask _mutableArrayTypeCache;
-  TypeMask get mutableArrayType {
-    if (_mutableArrayTypeCache == null) {
-      _mutableArrayTypeCache = new TypeMask.nonNullSubclass(
-          helpers.jsMutableArrayClass, compiler.closedWorld);
-    }
-    return _mutableArrayTypeCache;
-  }
-
-  TypeMask _fixedArrayTypeCache;
-  TypeMask get fixedArrayType {
-    if (_fixedArrayTypeCache == null) {
-      _fixedArrayTypeCache = new TypeMask.nonNullExact(
-          helpers.jsFixedArrayClass, compiler.closedWorld);
-    }
-    return _fixedArrayTypeCache;
-  }
-
-  TypeMask _extendableArrayTypeCache;
-  TypeMask get extendableArrayType {
-    if (_extendableArrayTypeCache == null) {
-      _extendableArrayTypeCache = new TypeMask.nonNullExact(
-          helpers.jsExtendableArrayClass, compiler.closedWorld);
-    }
-    return _extendableArrayTypeCache;
-  }
-
-  TypeMask _unmodifiableArrayTypeCache;
-  TypeMask get unmodifiableArrayType {
-    if (_unmodifiableArrayTypeCache == null) {
-      _unmodifiableArrayTypeCache = new TypeMask.nonNullExact(
-          helpers.jsUnmodifiableArrayClass, compiler.closedWorld);
-    }
-    return _fixedArrayTypeCache;
-  }
-
   /// Maps special classes to their implementation (JSXxx) class.
   Map<ClassElement, ClassElement> implementationClasses;
 
@@ -522,6 +455,18 @@
   /// `true` if access to [BackendHelpers.invokeOnMethod] is supported.
   bool hasInvokeOnSupport = false;
 
+  /// `true` if tear-offs are supported for incremental compilation.
+  bool hasIncrementalTearOffSupport = false;
+
+  /// `true` of `Object.runtimeType` is supported.
+  bool hasRuntimeTypeSupport = false;
+
+  /// `true` of use of the `dart:isolate` library is supported.
+  bool hasIsolateSupport = false;
+
+  /// `true` of `Function.apply` is supported.
+  bool hasFunctionApplySupport = false;
+
   /// List of constants from metadata.  If metadata must be preserved,
   /// these constants must be registered.
   final List<Dependency> metadataConstants = <Dependency>[];
@@ -1337,8 +1282,11 @@
     return impactBuilder;
   }
 
-  onResolutionComplete() {
-    super.onResolutionComplete();
+  onResolutionComplete(ClosedWorldRefiner closedWorldRefiner) {
+    for (Entity entity in compiler.enqueuer.resolution.processedEntities) {
+      processAnnotations(entity, closedWorldRefiner);
+    }
+    super.onResolutionComplete(closedWorldRefiner);
     computeMembersNeededForReflection();
     rti.computeClassesNeedingRti();
     _registeredMetadata.clear();
@@ -1377,6 +1325,8 @@
     return impactTransformer.createImpactFor(impacts.computeSignature);
   }
 
+  /// Called to register that the `runtimeType` property has been accessed. Any
+  /// backend specific [WorldImpact] of this is returned.
   WorldImpact registerRuntimeType() {
     return impactTransformer.createImpactFor(impacts.runtimeTypeSupport);
   }
@@ -1390,7 +1340,8 @@
     return impactTransformer.createImpactFor(impacts.deferredLoading);
   }
 
-  void registerNoSuchMethod(FunctionElement noSuchMethod) {
+  /// Called to register a `noSuchMethod` implementation.
+  void registerNoSuchMethod(MethodElement noSuchMethod) {
     noSuchMethodRegistry.registerNoSuchMethod(noSuchMethod);
   }
 
@@ -1457,37 +1408,28 @@
   }
 
   bool classNeedsRti(ClassElement cls) {
-    if (compiler.resolverWorld.hasRuntimeTypeSupport) return true;
+    if (hasRuntimeTypeSupport) return true;
     return rti.classesNeedingRti.contains(cls.declaration);
   }
 
   bool classNeedsRtiField(ClassElement cls) {
     if (cls.rawType.typeArguments.isEmpty) return false;
-    if (compiler.resolverWorld.hasRuntimeTypeSupport) return true;
+    if (hasRuntimeTypeSupport) return true;
     return rti.classesNeedingRti.contains(cls.declaration);
   }
 
   bool isComplexNoSuchMethod(FunctionElement element) =>
       noSuchMethodRegistry.isComplex(element);
 
-  bool isDefaultEqualityImplementation(Element element) {
-    assert(element.name == '==');
-    ClassElement classElement = element.enclosingClass;
-    return classElement == coreClasses.objectClass ||
-        classElement == helpers.jsInterceptorClass ||
-        classElement == helpers.jsNullClass;
-  }
-
   bool methodNeedsRti(FunctionElement function) {
-    return rti.methodsNeedingRti.contains(function) ||
-        compiler.resolverWorld.hasRuntimeTypeSupport;
+    return rti.methodsNeedingRti.contains(function) || hasRuntimeTypeSupport;
   }
 
   CodegenEnqueuer get codegenEnqueuer => compiler.enqueuer.codegen;
 
   CodegenEnqueuer createCodegenEnqueuer(CompilerTask task, Compiler compiler) {
-    return new CodegenEnqueuer(
-        task, compiler, const TreeShakingEnqueuerStrategy());
+    return new CodegenEnqueuer(task, compiler.cacheStrategy, this,
+        compiler.options, const TreeShakingEnqueuerStrategy());
   }
 
   WorldImpact codegen(CodegenWorkItem work) {
@@ -1805,7 +1747,7 @@
     return compiler.closedWorld.hasOnlySubclasses(classElement);
   }
 
-  WorldImpact registerStaticUse(Element element, {bool forResolution}) {
+  WorldImpact registerUsedElement(Element element, {bool forResolution}) {
     WorldImpactBuilderImpl worldImpact = new WorldImpactBuilderImpl();
     if (element == helpers.disableTreeShakingMarker) {
       isTreeShakingDisabled = true;
@@ -1830,9 +1772,57 @@
       }
     } else if (element == helpers.requiresPreambleMarker) {
       requiresPreamble = true;
+    } else if (element == helpers.invokeOnMethod && forResolution) {
+      hasInvokeOnSupport = true;
     }
     customElementsAnalysis.registerStaticUse(element,
         forResolution: forResolution);
+
+    if (forResolution) {
+      if (element.isFunction && element.isInstanceMember) {
+        MemberElement function = element;
+        ClassElement cls = function.enclosingClass;
+        if (function.name == Identifiers.call && !cls.typeVariables.isEmpty) {
+          worldImpact.addImpact(registerCallMethodWithFreeTypeVariables(
+              function,
+              forResolution: true));
+        }
+      }
+      // Enable isolate support if we start using something from the isolate
+      // library, or timers for the async library.  We exclude constant fields,
+      // which are ending here because their initializing expression is
+      // compiled.
+      LibraryElement library = element.library;
+      if (!hasIsolateSupport && !(element.isField && element.isConst)) {
+        Uri uri = library.canonicalUri;
+        if (uri == Uris.dart_isolate) {
+          hasIsolateSupport = true;
+          worldImpact
+              .addImpact(enableIsolateSupport(forResolution: forResolution));
+        } else if (uri == Uris.dart_async) {
+          if (element.name == '_createTimer' ||
+              element.name == '_createPeriodicTimer') {
+            // The [:Timer:] class uses the event queue of the isolate
+            // library, so we make sure that event queue is generated.
+            hasIsolateSupport = true;
+            worldImpact
+                .addImpact(enableIsolateSupport(forResolution: forResolution));
+          }
+        }
+      }
+
+      if (element.isGetter && element.name == Identifiers.runtimeType_) {
+        // Enable runtime type support if we discover a getter called
+        // runtimeType. We have to enable runtime type before hitting the
+        // codegen, so that constructors know whether they need to generate code
+        // for runtime type.
+        hasRuntimeTypeSupport = true;
+        // TODO(ahe): Record precise dependency here.
+        worldImpact.addImpact(registerRuntimeType());
+      } else if (compiler.commonElements.isFunctionApplyMethod(element)) {
+        hasFunctionApplySupport = true;
+      }
+    }
     return worldImpact;
   }
 
@@ -2035,7 +2025,7 @@
    * be visible by reflection unless some other interfaces makes them
    * accessible.
    */
-  computeMembersNeededForReflection() {
+  void computeMembersNeededForReflection() {
     if (_membersNeededForReflection != null) return;
     if (compiler.commonElements.mirrorsLibrary == null) {
       _membersNeededForReflection = const ImmutableEmptySet<Element>();
@@ -2254,7 +2244,7 @@
   }
 
   /// Called when [enqueuer] is empty, but before it is closed.
-  bool onQueueEmpty(Enqueuer enqueuer, Iterable<ClassElement> recentClasses) {
+  bool onQueueEmpty(Enqueuer enqueuer, Iterable<ClassEntity> recentClasses) {
     // Add elements used synthetically, that is, through features rather than
     // syntax, for instance custom elements.
     //
@@ -2269,6 +2259,12 @@
 
     if (!enqueuer.queueIsEmpty) return false;
 
+    for (ClassElement cls in recentClasses) {
+      Element element = cls.lookupLocalMember(Identifiers.noSuchMethod_);
+      if (element != null && element.isInstanceMember && element.isFunction) {
+        registerNoSuchMethod(element);
+      }
+    }
     noSuchMethodRegistry.onQueueEmpty();
     if (!enabledNoSuchMethod &&
         (noSuchMethodRegistry.hasThrowingNoSuchMethod ||
@@ -2281,13 +2277,15 @@
       kernelTask.buildKernelIr();
     }
 
-    if (compiler.options.hasIncrementalSupport) {
+    if (compiler.options.hasIncrementalSupport &&
+        !hasIncrementalTearOffSupport) {
       // Always enable tear-off closures during incremental compilation.
       Element element = helpers.closureFromTearOff;
-      if (element != null && !enqueuer.isProcessed(element)) {
+      if (element != null) {
         enqueuer.applyImpact(
             impactTransformer.createImpactFor(impacts.closureClass));
       }
+      hasIncrementalTearOffSupport = true;
     }
 
     if (!enqueuer.isResolutionQueue && preMirrorsMethodCount == 0) {
@@ -2333,7 +2331,7 @@
 
         // TODO(johnniwinther): We should have access to all recently processed
         // elements and process these instead.
-        processMetadata(compiler.enqueuer.resolution.processedElements,
+        processMetadata(compiler.enqueuer.resolution.processedEntities,
             registerMetadataConstant);
       } else {
         for (Dependency dependency in metadataConstants) {
@@ -2347,9 +2345,9 @@
     return true;
   }
 
-  /// Call [registerMetadataConstant] on all metadata from [elements].
-  void processMetadata(Iterable<Element> elements,
-      void onMetadata(MetadataAnnotation metadata)) {
+  /// Call [registerMetadataConstant] on all metadata from [entities].
+  void processMetadata(
+      Iterable<Entity> entities, void onMetadata(MetadataAnnotation metadata)) {
     void processLibraryMetadata(LibraryElement library) {
       if (_registeredMetadata.add(library)) {
         library.metadata.forEach(onMetadata);
@@ -2377,7 +2375,7 @@
       }
     }
 
-    elements.forEach(processElementMetadata);
+    entities.forEach(processElementMetadata);
   }
 
   void onQueueClosed() {
@@ -2385,14 +2383,19 @@
     jsInteropAnalysis.onQueueClosed();
   }
 
-  void onCodegenStart() {
+  WorldImpact onCodegenStart() {
     lookupMapAnalysis.onCodegenStart();
+    if (hasIsolateSupport) {
+      return enableIsolateSupport(forResolution: false);
+    }
+    return const WorldImpact();
   }
 
-  @override
-  void onElementResolved(Element element) {
+  /// Process backend specific annotations.
+  void processAnnotations(
+      Element element, ClosedWorldRefiner closedWorldRefiner) {
     if (element.isMalformed) {
-      // Elements that are marker as malformed during parsing or resolution
+      // Elements that are marked as malformed during parsing or resolution
       // might be registered here. These should just be ignored.
       return;
     }
@@ -2444,14 +2447,14 @@
           reporter.reportHintMessage(
               element, MessageKind.GENERIC, {'text': "Cannot throw"});
         }
-        compiler.inferenceWorld.registerCannotThrow(element);
+        closedWorldRefiner.registerCannotThrow(element);
       } else if (cls == helpers.noSideEffectsClass) {
         hasNoSideEffects = true;
         if (VERBOSE_OPTIMIZER_HINTS) {
           reporter.reportHintMessage(
               element, MessageKind.GENERIC, {'text': "Has no side effects"});
         }
-        compiler.inferenceWorld.registerSideEffectsFree(element);
+        closedWorldRefiner.registerSideEffectsFree(element);
       }
     }
     if (hasForceInline && hasNoInline) {
@@ -2466,18 +2469,8 @@
       reporter.internalError(element,
           "@NoSideEffects() should always be combined with @NoInline.");
     }
-    if (element == helpers.invokeOnMethod) {
-      hasInvokeOnSupport = true;
-    }
   }
 
-/*
-  CodeBuffer codeOf(Element element) {
-    return generatedCode.containsKey(element)
-        ? jsAst.prettyPrint(generatedCode[element], compiler)
-        : null;
-  }
-*/
   FunctionElement helperForBadMain() => helpers.badMain;
 
   FunctionElement helperForMissingMain() => helpers.missingMain;
@@ -2817,9 +2810,6 @@
           break;
         case TypeUseKind.TYPE_LITERAL:
           backend.customElementsAnalysis.registerTypeLiteral(type);
-          if (type.isTypedef) {
-            backend.compiler.openWorld.registerTypedef(type.element);
-          }
           if (type.isTypeVariable && type is! MethodTypeVariableType) {
             // GENERIC_METHODS: The `is!` test above filters away method type
             // variables, because they have the value `dynamic` with the
@@ -3178,7 +3168,7 @@
       this.supportSerialization});
 
   @override
-  void visitImpact(Element element, WorldImpact impact,
+  void visitImpact(var impactSource, WorldImpact impact,
       WorldImpactVisitor visitor, ImpactUseCase impactUse) {
     // TODO(johnniwinther): Compute the application strategy once for each use.
     if (impactUse == ResolutionEnqueuer.IMPACT_USE) {
@@ -3186,8 +3176,8 @@
         impact.apply(visitor);
       } else {
         impact.apply(visitor);
-        if (element != null) {
-          resolution.uncacheWorldImpact(element);
+        if (impactSource is Element) {
+          resolution.uncacheWorldImpact(impactSource);
         }
       }
     } else if (impactUse == DeferredLoadTask.IMPACT_USE) {
@@ -3195,7 +3185,7 @@
       // Impacts are uncached globally in [onImpactUsed].
     } else if (impactUse == DumpInfoTask.IMPACT_USE) {
       impact.apply(visitor);
-      dumpInfoTask.unregisterImpact(element);
+      dumpInfoTask.unregisterImpact(impactSource);
     } else {
       impact.apply(visitor);
     }
@@ -3224,6 +3214,7 @@
   ClassElement get numImplementation => helpers.jsNumberClass;
   ClassElement get stringImplementation => helpers.jsStringClass;
   ClassElement get listImplementation => helpers.jsArrayClass;
+  ClassElement get mutableListImplementation => helpers.jsMutableArrayClass;
   ClassElement get constListImplementation => helpers.jsUnmodifiableArrayClass;
   ClassElement get fixedListImplementation => helpers.jsFixedArrayClass;
   ClassElement get growableListImplementation => helpers.jsExtendableArrayClass;
@@ -3236,4 +3227,15 @@
   ClassElement get asyncFutureImplementation => helpers.futureImplementation;
   ClassElement get asyncStarStreamImplementation => helpers.controllerStream;
   ClassElement get functionImplementation => helpers.coreClasses.functionClass;
+  ClassElement get indexableImplementation => helpers.jsIndexableClass;
+  ClassElement get mutableIndexableImplementation =>
+      helpers.jsMutableIndexableClass;
+
+  bool isDefaultEqualityImplementation(Element element) {
+    assert(element.name == '==');
+    ClassElement classElement = element.enclosingClass;
+    return classElement == helpers.coreClasses.objectClass ||
+        classElement == helpers.jsInterceptorClass ||
+        classElement == helpers.jsNullClass;
+  }
 }
diff --git a/pkg/compiler/lib/src/js_backend/backend_impact.dart b/pkg/compiler/lib/src/js_backend/backend_impact.dart
index 7b12839..cbd3752 100644
--- a/pkg/compiler/lib/src/js_backend/backend_impact.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_impact.dart
@@ -161,10 +161,16 @@
 
   BackendImpact get throwNoSuchMethod {
     return _throwNoSuchMethod ??= new BackendImpact(
+        instantiatedClasses: compiler.options.useKernel
+            ? [
+                commonElements.symbolClass,
+              ]
+            : [],
         staticUses: compiler.options.useKernel
             ? [
                 helpers.genericNoSuchMethod,
                 helpers.unresolvedConstructorError,
+                commonElements.symbolConstructor.declaration,
               ]
             : [
                 helpers.throwNoSuchMethod,
@@ -230,12 +236,21 @@
   BackendImpact _throwRuntimeError;
 
   BackendImpact get throwRuntimeError {
-    return _throwRuntimeError ??= new BackendImpact(staticUses: [
-      helpers.throwRuntimeError
-    ], otherImpacts: [
-      // Also register the types of the arguments passed to this method.
-      stringValues
-    ]);
+    return _throwRuntimeError ??= new BackendImpact(
+        staticUses: compiler.options.useKernel
+            ? [
+                // TODO(sra): Refactor impacts so that we know which of these
+                // are called.
+                helpers.malformedTypeError,
+                helpers.throwRuntimeError,
+              ]
+            : [
+                helpers.throwRuntimeError,
+              ],
+        otherImpacts: [
+          // Also register the types of the arguments passed to this method.
+          stringValues
+        ]);
   }
 
   BackendImpact _superNoSuchMethod;
diff --git a/pkg/compiler/lib/src/js_backend/enqueuer.dart b/pkg/compiler/lib/src/js_backend/enqueuer.dart
index e51a5fa..4784df0 100644
--- a/pkg/compiler/lib/src/js_backend/enqueuer.dart
+++ b/pkg/compiler/lib/src/js_backend/enqueuer.dart
@@ -6,6 +6,7 @@
 
 import 'dart:collection' show Queue;
 
+import '../cache_strategy.dart' show CacheStrategy;
 import '../common/backend_api.dart' show Backend;
 import '../common/codegen.dart' show CodegenWorkItem;
 import '../common/names.dart' show Identifiers;
@@ -14,20 +15,17 @@
 import '../common.dart';
 import '../compiler.dart' show Compiler;
 import '../dart_types.dart' show DartType, InterfaceType;
+import '../dump_info.dart';
 import '../elements/elements.dart'
     show
         ClassElement,
         Element,
-        Elements,
         Entity,
         FunctionElement,
-        LibraryElement,
-        Member,
         MemberElement,
         MethodElement,
-        Name,
-        TypedElement,
-        TypedefElement;
+        TypedElement;
+import '../elements/entities.dart';
 import '../enqueue.dart';
 import '../js/js.dart' as js;
 import '../native/native.dart' as native;
@@ -38,15 +36,13 @@
 import '../universe/use.dart'
     show DynamicUse, StaticUse, StaticUseKind, TypeUse, TypeUseKind;
 import '../universe/world_impact.dart'
-    show ImpactUseCase, ImpactStrategy, WorldImpact, WorldImpactVisitor;
+    show ImpactUseCase, WorldImpact, WorldImpactVisitor;
 import '../util/util.dart' show Setlet;
 import '../world.dart';
 
 /// [Enqueuer] which is specific to code generation.
 class CodegenEnqueuer extends EnqueuerImpl {
   final String name;
-  @deprecated
-  final Compiler _compiler; // TODO(ahe): Remove this dependency.
   final EnqueuerStrategy strategy;
   final Map<String, Set<Element>> _instanceMembersByName =
       new Map<String, Set<Element>>();
@@ -60,10 +56,12 @@
   bool queueIsClosed = false;
   final CompilerTask task;
   final native.NativeEnqueuer nativeEnqueuer;
+  final Backend _backend;
+  final CompilerOptions _options;
 
   WorldImpactVisitor _impactVisitor;
 
-  final Queue<WorkItem> queue = new Queue<WorkItem>();
+  final Queue<WorkItem> _queue = new Queue<WorkItem>();
   final Map<Element, js.Expression> generatedCode = <Element, js.Expression>{};
 
   final Set<Element> newlyEnqueuedElements;
@@ -75,24 +73,23 @@
   static const ImpactUseCase IMPACT_USE =
       const ImpactUseCase('CodegenEnqueuer');
 
-  CodegenEnqueuer(this.task, Compiler compiler, this.strategy)
-      : newlyEnqueuedElements = compiler.cacheStrategy.newSet(),
-        newlySeenSelectors = compiler.cacheStrategy.newSet(),
-        nativeEnqueuer = compiler.backend.nativeCodegenEnqueuer(),
-        this.name = 'codegen enqueuer',
-        this._compiler = compiler {
+  CodegenEnqueuer(this.task, CacheStrategy cacheStrategy, Backend backend,
+      this._options, this.strategy)
+      : newlyEnqueuedElements = cacheStrategy.newSet(),
+        newlySeenSelectors = cacheStrategy.newSet(),
+        nativeEnqueuer = backend.nativeCodegenEnqueuer(),
+        this._backend = backend,
+        this.name = 'codegen enqueuer' {
     _impactVisitor = new EnqueuerImplImpactVisitor(this);
   }
 
   CodegenWorldBuilder get universe => _universe;
 
-  Backend get _backend => _compiler.backend;
+  // TODO(johnniwinther): Remove these hacks:
+  ClosedWorld get _world => _backend.compiler.closedWorld;
+  DumpInfoTask get _dumpInfoTask => _backend.compiler.dumpInfoTask;
 
-  CompilerOptions get _options => _compiler.options;
-
-  ClosedWorld get _world => _compiler.closedWorld;
-
-  bool get queueIsEmpty => queue.isEmpty;
+  bool get queueIsEmpty => _queue.isEmpty;
 
   /// Returns [:true:] if this enqueuer is the resolution enqueuer.
   bool get isResolutionQueue => false;
@@ -124,11 +121,10 @@
       throw new SpannableAssertionFailure(
           element, "Codegen work list is closed. Trying to add $element");
     }
-    queue.add(new CodegenWorkItem(_backend, element));
+    _queue.add(new CodegenWorkItem(_backend, element));
     // TODO(sigmund): add other missing dependencies (internals, selectors
     // enqueued after allocations).
-    _compiler.dumpInfoTask
-        .registerDependency(_compiler.currentElement, element);
+    _dumpInfoTask.registerDependency(element);
   }
 
   void applyImpact(WorldImpact worldImpact, {Element impactSource}) {
@@ -350,7 +346,7 @@
     assert(invariant(element, element.isDeclaration,
         message: "Element ${element} is not the declaration."));
     _universe.registerStaticUse(staticUse);
-    applyImpact(_backend.registerStaticUse(element, forResolution: false));
+    applyImpact(_backend.registerUsedElement(element, forResolution: false));
     bool addElement = true;
     switch (staticUse.kind) {
       case StaticUseKind.STATIC_TEAR_OFF:
@@ -412,7 +408,7 @@
   }
 
   void _registerIsCheck(DartType type) {
-    type = _universe.registerIsCheck(type, _compiler.resolution);
+    type = _universe.registerIsCheck(type);
     // Even in checked mode, type annotations for return type and argument
     // types do not imply type checks, so there should never be a check
     // against the type variable of a typedef.
@@ -435,9 +431,9 @@
 
   void forEach(void f(WorkItem work)) {
     do {
-      while (queue.isNotEmpty) {
+      while (_queue.isNotEmpty) {
         // TODO(johnniwinther): Find an optimal process order.
-        WorkItem work = queue.removeLast();
+        WorkItem work = _queue.removeLast();
         if (!isProcessed(work.element)) {
           strategy.processWorkItem(f, work);
           // TODO(johnniwinther): Register the processed element here. This
@@ -447,7 +443,7 @@
       List recents = _recentClasses.toList(growable: false);
       _recentClasses.clear();
       if (!_onQueueEmpty(recents)) _recentClasses.addAll(recents);
-    } while (queue.isNotEmpty || _recentClasses.isNotEmpty);
+    } while (_queue.isNotEmpty || _recentClasses.isNotEmpty);
   }
 
   /// [_onQueueEmpty] is called whenever the queue is drained. [recentClasses]
@@ -467,13 +463,6 @@
 
   String toString() => 'Enqueuer($name)';
 
-  void _forgetElement(Element element) {
-    _universe.forgetElement(element, _compiler);
-    _processedClasses.remove(element);
-    _instanceMembersByName[element.name]?.remove(element);
-    _instanceFunctionsByName[element.name]?.remove(element);
-  }
-
   ImpactUseCase get impactUse => IMPACT_USE;
 
   bool isProcessed(Element member) =>
@@ -486,8 +475,11 @@
     }
   }
 
-  void forgetElement(Element element, Compiler compiler) {
-    _forgetElement(element);
+  void forgetEntity(Element element, Compiler compiler) {
+    _universe.forgetElement(element, compiler);
+    _processedClasses.remove(element);
+    _instanceMembersByName[element.name]?.remove(element);
+    _instanceFunctionsByName[element.name]?.remove(element);
     generatedCode.remove(element);
     if (element is MemberElement) {
       for (Element closure in element.nestedClosures) {
@@ -502,7 +494,7 @@
   Iterable<Entity> get processedEntities => generatedCode.keys;
 
   @override
-  Iterable<ClassElement> get processedClasses => _processedClasses;
+  Iterable<ClassEntity> get processedClasses => _processedClasses;
 }
 
 void removeFromSet(Map<String, Set<Element>> map, Element element) {
diff --git a/pkg/compiler/lib/src/js_backend/mirrors_analysis.dart b/pkg/compiler/lib/src/js_backend/mirrors_analysis.dart
index c66c8f1..5207421 100644
--- a/pkg/compiler/lib/src/js_backend/mirrors_analysis.dart
+++ b/pkg/compiler/lib/src/js_backend/mirrors_analysis.dart
@@ -8,6 +8,7 @@
 import '../common/resolution.dart';
 import '../diagnostics/diagnostic_listener.dart';
 import '../elements/elements.dart';
+import '../elements/entities.dart';
 import '../universe/selector.dart';
 import '../universe/use.dart';
 import '../universe/world_impact.dart';
@@ -24,8 +25,8 @@
   /// Compute the impact for elements that are matched by the mirrors used
   /// annotation or, in lack thereof, all elements.
   WorldImpact computeImpactForReflectiveElements(
-      Iterable<ClassElement> recents,
-      Iterable<ClassElement> processedClasses,
+      Iterable<ClassEntity> recents,
+      Iterable<ClassEntity> processedClasses,
       Iterable<LibraryElement> loadedLibraries,
       {bool forResolution}) {
     MirrorsHandler handler = forResolution ? resolutionHandler : codegenHandler;
@@ -135,7 +136,7 @@
   /// [enclosingWasIncluded] provides a hint whether the enclosing element was
   /// needed for reflection.
   void _enqueueReflectiveElementsInClass(
-      ClassElement cls, Iterable<ClassElement> recents,
+      ClassElement cls, Iterable<ClassEntity> recents,
       {bool enclosingWasIncluded}) {
     if (cls.library.isInternalLibrary || cls.isInjected) return;
     bool includeClass = _shouldIncludeElementDueToMirrors(cls,
@@ -184,7 +185,7 @@
   /// Enqeue all local members of the library [lib] if they are required for
   /// reflection.
   void _enqueueReflectiveElementsInLibrary(
-      LibraryElement lib, Iterable<ClassElement> recents) {
+      LibraryElement lib, Iterable<ClassEntity> recents) {
     bool includeLibrary =
         _shouldIncludeElementDueToMirrors(lib, includedEnclosing: false);
     lib.forEachLocalMember((Element member) {
@@ -207,8 +208,8 @@
   /// annotation or, in lack thereof, all elements.
   // TODO(johnniwinther): Compute [WorldImpact] instead of enqueuing directly.
   void enqueueReflectiveElements(
-      Iterable<ClassElement> recents,
-      Iterable<ClassElement> processedClasses,
+      Iterable<ClassEntity> recents,
+      Iterable<ClassEntity> processedClasses,
       Iterable<LibraryElement> loadedLibraries) {
     if (!hasEnqueuedReflectiveElements) {
       _logEnqueueReflectiveAction("!START enqueueAll");
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index 23740b3..590e99f 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -181,7 +181,7 @@
         InterfaceType interface = type;
         do {
           for (DartType argument in interface.typeArguments) {
-            universe.registerIsCheck(argument, compiler.resolution);
+            universe.registerIsCheck(argument);
           }
           interface = interface.element.supertype;
         } while (interface != null && !instantiatedTypes.contains(interface));
@@ -204,7 +204,7 @@
             InterfaceType instance = current.asInstanceOf(cls);
             if (instance == null) break;
             for (DartType argument in instance.typeArguments) {
-              universe.registerIsCheck(argument, compiler.resolution);
+              universe.registerIsCheck(argument);
             }
             current = current.element.supertype;
           } while (current != null && !instantiatedTypes.contains(current));
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
index a5e7b4c..af5e764 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
@@ -1152,7 +1152,7 @@
         .add(new jsAst.FunctionDeclaration(constructorName, constructorAst));
 
     String fieldNamesProperty = FIELD_NAMES_PROPERTY_NAME;
-    bool hasIsolateSupport = compiler.resolverWorld.hasIsolateSupport;
+    bool hasIsolateSupport = backend.hasIsolateSupport;
     jsAst.Node fieldNamesArray;
     if (hasIsolateSupport) {
       fieldNamesArray =
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/setup_program_builder.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/setup_program_builder.dart
index 95c7dc4..68c2451 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/setup_program_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/setup_program_builder.dart
@@ -138,7 +138,7 @@
         js.quoteName(namer.runtimeTypeName(compiler.coreClasses.objectClass)),
     'needsStructuredMemberInfo': emitter.needsStructuredMemberInfo,
     'usesMangledNames': compiler.commonElements.mirrorsLibrary != null ||
-        compiler.hasFunctionApplySupport,
+        backend.hasFunctionApplySupport,
     'tearOffCode': buildTearOffCode(backend),
     'nativeInfoHandler': nativeInfoHandler,
     'operatorIsPrefix': js.string(namer.operatorIsPrefix),
diff --git a/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
index 55824e8..d104cd4 100644
--- a/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
@@ -28,7 +28,7 @@
   jsAst.Statement generateInvokeMain() {
     Element main = compiler.mainFunction;
     jsAst.Expression mainCallClosure = null;
-    if (compiler.resolverWorld.hasIsolateSupport) {
+    if (backend.hasIsolateSupport) {
       Element isolateMain =
           helpers.isolateHelperLibrary.find(BackendHelpers.START_ROOT_ISOLATE);
       mainCallClosure = _buildIsolateSetupClosure(main, isolateMain);
diff --git a/pkg/compiler/lib/src/js_emitter/metadata_collector.dart b/pkg/compiler/lib/src/js_emitter/metadata_collector.dart
index d918135..94b014a 100644
--- a/pkg/compiler/lib/src/js_emitter/metadata_collector.dart
+++ b/pkg/compiler/lib/src/js_emitter/metadata_collector.dart
@@ -247,8 +247,8 @@
       int i = source.requiredParameterCount;
       for (ParameterElement element in source.orderedOptionalParameters) {
         if (i >= target.requiredParameterCount && i < target.parameterCount) {
-          map[element] = target.orderedOptionalParameters[
-              i - target.requiredParameterCount];
+          map[element] = target
+              .orderedOptionalParameters[i - target.requiredParameterCount];
         }
         ++i;
       }
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
index 3fac271..1ee47ed 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
@@ -184,7 +184,7 @@
         _buildTypeToInterceptorMap(), _task.metadataCollector, finalizers,
         needsNativeSupport: needsNativeSupport,
         outputContainsConstantList: collector.outputContainsConstantList,
-        hasIsolateSupport: _compiler.hasIsolateSupport);
+        hasIsolateSupport: backend.hasIsolateSupport);
   }
 
   void _markEagerClasses() {
@@ -675,7 +675,7 @@
   }
 
   bool _methodCanBeApplied(FunctionElement method) {
-    return _compiler.hasFunctionApplySupport &&
+    return backend.hasFunctionApplySupport &&
         _compiler.closedWorld.getMightBePassedToApply(method);
   }
 
diff --git a/pkg/compiler/lib/src/kernel/kernel_visitor.dart b/pkg/compiler/lib/src/kernel/kernel_visitor.dart
index 37d813e..a58ec7f 100644
--- a/pkg/compiler/lib/src/kernel/kernel_visitor.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_visitor.dart
@@ -1230,11 +1230,11 @@
   @override
   ir.Expression visitCompoundIndexSet(SendSet node, Node receiver, Node index,
       AssignmentOperator operator, Node rhs, _) {
-    // TODO(sra): Find binary operator.
-    return buildIndexAccessor(receiver, index).buildCompoundAssignment(
+    return buildCompoundAssignment(
+        node,
+        buildIndexAccessor(receiver, index),
         kernel.irName(operator.selectorName, currentElement),
-        visitForValue(rhs),
-        voidContext: isVoidContext);
+        visitForValue(rhs));
   }
 
   @override
@@ -1513,7 +1513,12 @@
   @override
   ir.Expression visitIfNotNullDynamicPropertyGet(
       Send node, Node receiver, Name name, _) {
-    return buildNullAwarePropertyAccessor(receiver, name).buildSimpleRead();
+    Accessor accessor = buildNullAwarePropertyAccessor(receiver, name);
+    ir.Expression result = accessor.buildSimpleRead();
+    if (accessor.builtGetter != null) {
+      kernel.nodeToAst[accessor.builtGetter] = node;
+    }
+    return result;
   }
 
   @override
@@ -1526,8 +1531,10 @@
         new ir.ConditionalExpression(
             buildIsNull(new ir.VariableGet(receiver)),
             new ir.NullLiteral(),
-            buildInvokeSelector(new ir.VariableGet(receiver), selector,
-                buildArguments(arguments)),
+            associateNode(
+                buildInvokeSelector(new ir.VariableGet(receiver), selector,
+                                    buildArguments(arguments)),
+                receiverNode),
             null));
   }
 
@@ -1583,26 +1590,30 @@
         buildIndexAccessor(receiver, index).buildSimpleRead(), node);
   }
 
-  ir.Expression buildIndexPostfix(Accessor accessor, IncDecOperator operator) {
+  ir.Expression buildIndexPostfix(
+      Send node, Accessor accessor, IncDecOperator operator) {
     ir.Name name = kernel.irName(operator.selectorName, currentElement);
-    return accessor.buildPostfixIncrement(name, voidContext: isVoidContext);
+    return buildPostfixIncrement(node, accessor, name);
   }
 
   @override
   ir.Expression visitIndexPostfix(
       Send node, Node receiver, Node index, IncDecOperator operator, _) {
-    return buildIndexPostfix(buildIndexAccessor(receiver, index), operator);
+    return buildIndexPostfix(
+        node, buildIndexAccessor(receiver, index), operator);
   }
 
-  ir.Expression buildIndexPrefix(Accessor accessor, IncDecOperator operator) {
+  ir.Expression buildIndexPrefix(
+      Send node, Accessor accessor, IncDecOperator operator) {
     ir.Name name = kernel.irName(operator.selectorName, currentElement);
-    return accessor.buildPrefixIncrement(name, voidContext: isVoidContext);
+    return buildPrefixIncrement(node, accessor, name);
   }
 
   @override
   ir.Expression visitIndexPrefix(
       Send node, Node receiver, Node index, IncDecOperator operator, _) {
-    return buildIndexPrefix(buildIndexAccessor(receiver, index), operator);
+    return buildIndexPrefix(
+        node, buildIndexAccessor(receiver, index), operator);
   }
 
   @override
@@ -1725,29 +1736,49 @@
   ir.Expression buildCompound(
       Accessor accessor, CompoundRhs rhs, SendSet node) {
     ir.Name name = kernel.irName(rhs.operator.selectorName, currentElement);
-    ir.Expression result;
     switch (rhs.kind) {
       case CompoundKind.POSTFIX:
-        result =
-            accessor.buildPostfixIncrement(name, voidContext: isVoidContext);
-        break;
+        return buildPostfixIncrement(node, accessor, name);
 
       case CompoundKind.PREFIX:
-        result =
-            accessor.buildPrefixIncrement(name, voidContext: isVoidContext);
-        break;
+        return buildPrefixIncrement(node, accessor, name);
 
       case CompoundKind.ASSIGNMENT:
-        result = accessor.buildCompoundAssignment(name, visitForValue(rhs.rhs),
-            voidContext: isVoidContext);
-        break;
+        return buildCompoundAssignment(
+            node, accessor, name, visitForValue(rhs.rhs));
     }
+  }
+
+  ir.Expression buildCompoundAssignment(
+      SendSet node, Accessor accessor, ir.Name name, ir.Expression rhs) {
+    ir.Expression result =
+        accessor.buildCompoundAssignment(name, rhs, voidContext: isVoidContext);
+    associateCompoundComponents(accessor, node);
+    return result;
+  }
+
+  ir.Expression buildPrefixIncrement(
+      SendSet node, Accessor accessor, ir.Name name) {
+    ir.Expression result =
+        accessor.buildPrefixIncrement(name, voidContext: isVoidContext);
+    associateCompoundComponents(accessor, node);
+    return result;
+  }
+
+  ir.Expression buildPostfixIncrement(
+      SendSet node, Accessor accessor, ir.Name name) {
+    ir.Expression result =
+        accessor.buildPostfixIncrement(name, voidContext: isVoidContext);
+    associateCompoundComponents(accessor, node);
+    return result;
+  }
+
+  void associateCompoundComponents(Accessor accessor, Node node) {
     assert(accessor.builtBinary != null);
     kernel.nodeToAstOperator[accessor.builtBinary] = node;
     if (accessor.builtGetter != null) {
       kernel.nodeToAst[accessor.builtGetter] = node;
     }
-    return result;
   }
 
   @override
@@ -2252,12 +2283,11 @@
       AssignmentOperator operator,
       Node rhs,
       _) {
-    // TODO(sra): Find binary operator.
-    return buildSuperIndexAccessor(index, getter, setter)
-        .buildCompoundAssignment(
-            kernel.irName(operator.selectorName, currentElement),
-            visitForValue(rhs),
-            voidContext: isVoidContext);
+    return buildCompoundAssignment(
+        node,
+        buildSuperIndexAccessor(index, getter, setter),
+        kernel.irName(operator.selectorName, currentElement),
+        visitForValue(rhs));
   }
 
   @override
@@ -2436,7 +2466,7 @@
       MethodElement indexSetFunction, Node index, IncDecOperator operator, _) {
     Accessor accessor =
         buildSuperIndexAccessor(index, indexFunction, indexSetFunction);
-    return buildIndexPostfix(accessor, operator);
+    return buildIndexPostfix(node, accessor, operator);
   }
 
   @override
@@ -2444,7 +2474,7 @@
       MethodElement indexSetFunction, Node index, IncDecOperator operator, _) {
     Accessor accessor =
         buildSuperIndexAccessor(index, indexFunction, indexSetFunction);
-    return buildIndexPrefix(accessor, operator);
+    return buildIndexPrefix(node, accessor, operator);
   }
 
   @override
diff --git a/pkg/compiler/lib/src/native/ssa.dart b/pkg/compiler/lib/src/native/ssa.dart
index f3134c3..945995d 100644
--- a/pkg/compiler/lib/src/native/ssa.dart
+++ b/pkg/compiler/lib/src/native/ssa.dart
@@ -101,7 +101,7 @@
         // be proportional to the number of native methods, which is bounded
         // by the dart: libraries.
         js.js.uncachedExpressionTemplate(nativeMethodCall),
-        backend.dynamicType,
+        builder.commonMasks.dynamicType,
         inputs,
         effects: new SideEffects()));
     // TODO(johnniwinther): Provide source information.
@@ -122,6 +122,6 @@
         <HInstruction>[],
         new SideEffects(),
         null,
-        backend.dynamicType));
+        builder.commonMasks.dynamicType));
   }
 }
diff --git a/pkg/compiler/lib/src/resolution/operators.dart b/pkg/compiler/lib/src/resolution/operators.dart
index 499192f..b5d83d9 100644
--- a/pkg/compiler/lib/src/resolution/operators.dart
+++ b/pkg/compiler/lib/src/resolution/operators.dart
@@ -8,7 +8,11 @@
 import '../universe/call_structure.dart' show CallStructure;
 import '../universe/selector.dart' show Selector, SelectorKind;
 
-enum UnaryOperatorKind { NOT, NEGATE, COMPLEMENT, }
+enum UnaryOperatorKind {
+  NOT,
+  NEGATE,
+  COMPLEMENT,
+}
 
 class UnaryOperator {
   final UnaryOperatorKind kind;
diff --git a/pkg/compiler/lib/src/resolution/resolution.dart b/pkg/compiler/lib/src/resolution/resolution.dart
index d5334f1..923952c 100644
--- a/pkg/compiler/lib/src/resolution/resolution.dart
+++ b/pkg/compiler/lib/src/resolution/resolution.dart
@@ -64,10 +64,8 @@
 class ResolverTask extends CompilerTask {
   final ConstantCompiler constantCompiler;
   final Resolution resolution;
-  final OpenWorld world;
 
-  ResolverTask(
-      this.resolution, this.constantCompiler, this.world, Measurer measurer)
+  ResolverTask(this.resolution, this.constantCompiler, Measurer measurer)
       : super(measurer);
 
   String get name => 'Resolver';
@@ -80,6 +78,7 @@
   ParsingContext get parsingContext => resolution.parsingContext;
   CompilerOptions get options => resolution.options;
   ResolutionEnqueuer get enqueuer => resolution.enqueuer;
+  OpenWorld get world => enqueuer.universe.openWorld;
 
   ResolutionImpact resolve(Element element) {
     return measure(() {
diff --git a/pkg/compiler/lib/src/resolution/resolution_result.dart b/pkg/compiler/lib/src/resolution/resolution_result.dart
index b034712..c3ba485 100644
--- a/pkg/compiler/lib/src/resolution/resolution_result.dart
+++ b/pkg/compiler/lib/src/resolution/resolution_result.dart
@@ -10,7 +10,14 @@
 import '../tree/tree.dart';
 import '../universe/call_structure.dart' show CallStructure;
 
-enum ResultKind { NONE, ELEMENT, TYPE, ASSERT, CONSTANT, PREFIX, }
+enum ResultKind {
+  NONE,
+  ELEMENT,
+  TYPE,
+  ASSERT,
+  CONSTANT,
+  PREFIX,
+}
 
 /// The result of resolving a node.
 abstract class ResolutionResult {
diff --git a/pkg/compiler/lib/src/resolution/send_structure.dart b/pkg/compiler/lib/src/resolution/send_structure.dart
index 52bf4dd..0d0de9f 100644
--- a/pkg/compiler/lib/src/resolution/send_structure.dart
+++ b/pkg/compiler/lib/src/resolution/send_structure.dart
@@ -2059,7 +2059,11 @@
   }
 }
 
-enum NewStructureKind { NEW_INVOKE, CONST_INVOKE, LATE_CONST, }
+enum NewStructureKind {
+  NEW_INVOKE,
+  CONST_INVOKE,
+  LATE_CONST,
+}
 
 /// The structure for a [NewExpression] of a new invocation.
 abstract class NewStructure<R, A> implements SemanticSendStructure<R, A> {
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index 2fee721..d630c95 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -408,7 +408,7 @@
       List<HInstruction> providedArguments, ast.Node currentNode,
       {InterfaceType instanceType}) {
     registry
-        .addImpact(backend.registerStaticUse(element, forResolution: false));
+        .addImpact(backend.registerUsedElement(element, forResolution: false));
 
     if (backend.isJsInterop(element) && !element.isFactoryConstructor) {
       // We only inline factory JavaScript interop constructors.
@@ -441,8 +441,7 @@
           message: "Missing selector for inlining of $element."));
       if (selector != null) {
         if (!selector.applies(function)) return false;
-        if (mask != null &&
-            !mask.canHit(function, selector, compiler.closedWorld)) {
+        if (mask != null && !mask.canHit(function, selector, closedWorld)) {
           return false;
         }
       }
@@ -567,7 +566,7 @@
           !element.isGenerativeConstructorBody &&
           (mask == null || mask.isNullable)) {
         addWithPosition(
-            new HFieldGet(null, providedArguments[0], backend.dynamicType,
+            new HFieldGet(null, providedArguments[0], commonMasks.dynamicType,
                 isAssignable: false),
             currentNode);
       }
@@ -685,7 +684,7 @@
    */
   HGraph buildMethod(FunctionElement functionElement) {
     assert(invariant(functionElement, functionElement.isImplementation));
-    graph.calledInLoop = compiler.closedWorld.isCalledInLoop(functionElement);
+    graph.calledInLoop = closedWorld.isCalledInLoop(functionElement);
     ast.FunctionExpression function = resolvedAst.node;
     assert(function != null);
     assert(elements.getFunctionDefinition(function) != null);
@@ -711,7 +710,7 @@
             visitCondition: () {
               HParameterValue parameter = parameters.values.first;
               push(new HIdentity(parameter, graph.addConstantNull(compiler),
-                  null, backend.boolType));
+                  null, commonMasks.boolType));
             },
             visitThen: () {
               closeAndGotoExit(new HReturn(
@@ -744,7 +743,7 @@
   // TODO(sra): Figure out how to keep comment anchored without effects.
   void addComment(String text) {
     add(new HForeignCode(js.js.statementTemplateYielding(new js.Comment(text)),
-        backend.dynamicType, <HInstruction>[],
+        commonMasks.dynamicType, <HInstruction>[],
         isStatement: true));
   }
 
@@ -754,7 +753,8 @@
     HInstruction thisInstruction = localsHandler.readThis();
     // Use dynamic type because the type computed by the inferrer is
     // narrowed to the type annotation.
-    HInstruction parameter = new HParameterValue(field, backend.dynamicType);
+    HInstruction parameter =
+        new HParameterValue(field, commonMasks.dynamicType);
     // Add the parameter as the last instruction of the entry block.
     // If the method is intercepted, we want the actual receiver
     // to be the first parameter.
@@ -1284,8 +1284,8 @@
     }, includeSuperAndInjectedMembers: true);
 
     InterfaceType type = classElement.thisType;
-    TypeMask ssaType = new TypeMask.nonNullExact(
-        classElement.declaration, compiler.closedWorld);
+    TypeMask ssaType =
+        new TypeMask.nonNullExact(classElement.declaration, closedWorld);
     List<DartType> instantiatedTypes;
     addInlinedInstantiation(type);
     if (!currentInlinedInstantiations.isEmpty) {
@@ -1311,7 +1311,7 @@
             TypeInfoExpressionKind.INSTANCE,
             classElement.thisType,
             typeArguments,
-            backend.dynamicType);
+            commonMasks.dynamicType);
         add(typeInfo);
         constructorArguments.add(typeInfo);
       }
@@ -1331,7 +1331,7 @@
       // Null guard ensures an error if we are being called from an explicit
       // 'new' of the constructor instead of via an upgrade. It is optimized out
       // if there are field initializers.
-      add(new HFieldGet(null, newObject, backend.dynamicType,
+      add(new HFieldGet(null, newObject, commonMasks.dynamicType,
           isAssignable: false));
       for (int i = 0; i < fields.length; i++) {
         add(new HFieldSet(fields[i], newObject, constructorArguments[i]));
@@ -1398,9 +1398,8 @@
         pop();
       } else {
         HInvokeConstructorBody invoke = new HInvokeConstructorBody(
-            body.declaration, bodyCallInputs, backend.nonNullType);
-        invoke.sideEffects =
-            compiler.closedWorld.getSideEffectsOfElement(constructor);
+            body.declaration, bodyCallInputs, commonMasks.nonNullType);
+        invoke.sideEffects = closedWorld.getSideEffectsOfElement(constructor);
         add(invoke);
       }
     }
@@ -1437,7 +1436,7 @@
         backend.classNeedsRti(enclosing)) {
       enclosing.typeVariables.forEach((TypeVariableType typeVariable) {
         HParameterValue param =
-            addParameter(typeVariable.element, backend.nonNullType);
+            addParameter(typeVariable.element, commonMasks.nonNullType);
         localsHandler.directLocals[
             localsHandler.getTypeVariableAsLocal(typeVariable)] = param;
       });
@@ -1501,7 +1500,7 @@
           "${n(element)}";
       HConstant nameConstant = addConstantString(name);
       add(new HInvokeStatic(backend.helpers.traceHelper,
-          <HInstruction>[nameConstant], backend.dynamicType));
+          <HInstruction>[nameConstant], commonMasks.dynamicType));
     }
   }
 
@@ -1512,7 +1511,7 @@
       HConstant idConstant = graph.addConstantInt(element.hashCode, compiler);
       HConstant nameConstant = addConstantString(element.name);
       add(new HInvokeStatic(backend.helpers.traceHelper,
-          <HInstruction>[idConstant, nameConstant], backend.dynamicType));
+          <HInstruction>[idConstant, nameConstant], commonMasks.dynamicType));
     }
   }
 
@@ -1558,7 +1557,7 @@
           value, compiler.coreTypes.boolType,
           kind: HTypeConversion.BOOLEAN_CONVERSION_CHECK);
     }
-    HInstruction result = new HBoolify(value, backend.boolType);
+    HInstruction result = new HBoolify(value, commonMasks.boolType);
     add(result);
     return result;
   }
@@ -1871,8 +1870,7 @@
       capturedVariables.add(localsHandler.readLocal(capturedLocal));
     });
 
-    TypeMask type =
-        new TypeMask.nonNullExact(closureClassElement, compiler.closedWorld);
+    TypeMask type = new TypeMask.nonNullExact(closureClassElement, closedWorld);
     push(new HCreate(closureClassElement, capturedVariables, type)
       ..sourceInformation = sourceInformationBuilder.buildCreate(node));
 
@@ -1976,7 +1974,7 @@
     visit(expression);
     SourceInformation sourceInformation =
         sourceInformationBuilder.buildGeneric(node);
-    push(new HNot(popBoolified(), backend.boolType)
+    push(new HNot(popBoolified(), commonMasks.boolType)
       ..sourceInformation = sourceInformation);
   }
 
@@ -2021,7 +2019,8 @@
   @override
   void visitNotEquals(ast.Send node, ast.Node left, ast.Node right, _) {
     handleBinary(node, left, right);
-    pushWithPosition(new HNot(popBoolified(), backend.boolType), node.selector);
+    pushWithPosition(
+        new HNot(popBoolified(), commonMasks.boolType), node.selector);
   }
 
   void handleBinary(ast.Send node, ast.Node left, ast.Node right) {
@@ -2137,8 +2136,7 @@
     // handler in the case of lists, because the constant handler
     // does not look at elements in the list.
     TypeMask type = TypeMaskFactory.inferredTypeForElement(field, compiler);
-    if (!type.containsAll(compiler.closedWorld) &&
-        !instruction.isConstantNull()) {
+    if (!type.containsAll(closedWorld) && !instruction.isConstantNull()) {
       // TODO(13429): The inferrer should know that an element
       // cannot be null.
       instruction.instructionType = type.nonNullable();
@@ -2202,7 +2200,7 @@
     // creating an [HStatic].
     SourceInformation sourceInformation =
         sourceInformationBuilder.buildGet(node);
-    push(new HStatic(method, backend.nonNullType)
+    push(new HStatic(method, commonMasks.nonNullType)
       ..sourceInformation = sourceInformation);
   }
 
@@ -2376,13 +2374,14 @@
   }
 
   HInstruction invokeInterceptor(HInstruction receiver) {
-    HInterceptor interceptor = new HInterceptor(receiver, backend.nonNullType);
+    HInterceptor interceptor =
+        new HInterceptor(receiver, commonMasks.nonNullType);
     add(interceptor);
     return interceptor;
   }
 
   HLiteralList buildLiteralList(List<HInstruction> inputs) {
-    return new HLiteralList(inputs, backend.extendableArrayType);
+    return new HLiteralList(inputs, commonMasks.extendableArrayType);
   }
 
   @override
@@ -2417,7 +2416,7 @@
     HInstruction expressionInstruction = visitAndPop(expression);
     HInstruction instruction = buildIsNode(node, type, expressionInstruction);
     add(instruction);
-    push(new HNot(instruction, backend.boolType));
+    push(new HNot(instruction, commonMasks.boolType));
   }
 
   HInstruction buildIsNode(
@@ -2435,7 +2434,7 @@
       }
       generateTypeError(node, message);
       HInstruction call = pop();
-      return new HIs.compound(type, expression, call, backend.boolType);
+      return new HIs.compound(type, expression, call, commonMasks.boolType);
     } else if (type.isFunctionType) {
       List arguments = [buildFunctionType(type), expression];
       pushInvokeDynamic(
@@ -2444,15 +2443,15 @@
               CallStructure.ONE_ARG),
           null,
           arguments);
-      return new HIs.compound(type, expression, pop(), backend.boolType);
+      return new HIs.compound(type, expression, pop(), commonMasks.boolType);
     } else if (type.isTypeVariable) {
       HInstruction runtimeType =
           typeBuilder.addTypeVariableReference(type, sourceElement);
       Element helper = helpers.checkSubtypeOfRuntimeType;
       List<HInstruction> inputs = <HInstruction>[expression, runtimeType];
-      pushInvokeStatic(null, helper, inputs, typeMask: backend.boolType);
+      pushInvokeStatic(null, helper, inputs, typeMask: commonMasks.boolType);
       HInstruction call = pop();
-      return new HIs.variable(type, expression, call, backend.boolType);
+      return new HIs.variable(type, expression, call, commonMasks.boolType);
     } else if (RuntimeTypes.hasTypeArguments(type)) {
       ClassElement element = type.element;
       Element helper = helpers.checkSubtype;
@@ -2461,8 +2460,7 @@
       add(representations);
       js.Name operator = backend.namer.operatorIs(element);
       HInstruction isFieldName = addConstantStringFromName(operator);
-      HInstruction asFieldName = compiler.closedWorld
-              .hasAnyStrictSubtype(element)
+      HInstruction asFieldName = closedWorld.hasAnyStrictSubtype(element)
           ? addConstantStringFromName(backend.namer.substitutionName(element))
           : graph.addConstantNull(compiler);
       List<HInstruction> inputs = <HInstruction>[
@@ -2471,17 +2469,17 @@
         representations,
         asFieldName
       ];
-      pushInvokeStatic(node, helper, inputs, typeMask: backend.boolType);
+      pushInvokeStatic(node, helper, inputs, typeMask: commonMasks.boolType);
       HInstruction call = pop();
-      return new HIs.compound(type, expression, call, backend.boolType);
+      return new HIs.compound(type, expression, call, commonMasks.boolType);
     } else {
       if (backend.hasDirectCheckFor(type)) {
-        return new HIs.direct(type, expression, backend.boolType);
+        return new HIs.direct(type, expression, commonMasks.boolType);
       }
       // The interceptor is not always needed.  It is removed by optimization
       // when the receiver type or tested type permit.
-      return new HIs.raw(
-          type, expression, invokeInterceptor(expression), backend.boolType);
+      return new HIs.raw(type, expression, invokeInterceptor(expression),
+          commonMasks.boolType);
     }
   }
 
@@ -2698,7 +2696,7 @@
     if (inputs.length != 2) {
       reporter.internalError(node.argumentsNode, 'Two arguments expected.');
     }
-    push(new HStringConcat(inputs[0], inputs[1], backend.stringType));
+    push(new HStringConcat(inputs[0], inputs[1], commonMasks.stringType));
   }
 
   void handleForeignJsCurrentIsolateContext(ast.Send node) {
@@ -2707,12 +2705,12 @@
           node, 'Too many arguments to JS_CURRENT_ISOLATE_CONTEXT.');
     }
 
-    if (!compiler.hasIsolateSupport) {
+    if (!backend.hasIsolateSupport) {
       // If the isolate library is not used, we just generate code
       // to fetch the static state.
       String name = backend.namer.staticStateHolder;
       push(new HForeignCode(
-          js.js.parseForeignJS(name), backend.dynamicType, <HInstruction>[],
+          js.js.parseForeignJS(name), commonMasks.dynamicType, <HInstruction>[],
           nativeBehavior: native.NativeBehavior.DEPENDS_OTHER));
     } else {
       // Call a helper method from the isolate library. The isolate
@@ -2722,7 +2720,7 @@
       if (element == null) {
         reporter.internalError(node, 'Isolate library and compiler mismatch.');
       }
-      pushInvokeStatic(null, element, [], typeMask: backend.dynamicType);
+      pushInvokeStatic(null, element, [], typeMask: commonMasks.dynamicType);
     }
   }
 
@@ -2903,12 +2901,12 @@
 
   void handleForeignJsCallInIsolate(ast.Send node) {
     Link<ast.Node> link = node.arguments;
-    if (!compiler.hasIsolateSupport) {
+    if (!backend.hasIsolateSupport) {
       // If the isolate library is not used, we just invoke the
       // closure.
       visit(link.tail.head);
       push(new HInvokeClosure(new Selector.callClosure(0),
-          <HInstruction>[pop()], backend.dynamicType));
+          <HInstruction>[pop()], commonMasks.dynamicType));
     } else {
       // Call a helper method from the isolate library.
       Element element = helpers.callInIsolate;
@@ -2917,7 +2915,8 @@
       }
       List<HInstruction> inputs = <HInstruction>[];
       addGenericSendArgumentsToList(link, inputs);
-      pushInvokeStatic(node, element, inputs, typeMask: backend.dynamicType);
+      pushInvokeStatic(node, element, inputs,
+          typeMask: commonMasks.dynamicType);
     }
   }
 
@@ -2947,7 +2946,7 @@
     push(new HForeignCode(
         js.js.expressionTemplateYielding(
             backend.emitter.staticFunctionAccess(function)),
-        backend.dynamicType,
+        commonMasks.dynamicType,
         <HInstruction>[],
         nativeBehavior: native.NativeBehavior.PURE));
     return params;
@@ -2970,7 +2969,7 @@
     SideEffects sideEffects = new SideEffects.empty();
     sideEffects.setAllSideEffects();
     push(new HForeignCode(js.js.parseForeignJS("$isolateName = #"),
-        backend.dynamicType, <HInstruction>[pop()],
+        commonMasks.dynamicType, <HInstruction>[pop()],
         nativeBehavior: native.NativeBehavior.CHANGES_OTHER,
         effects: sideEffects));
   }
@@ -2980,7 +2979,7 @@
       reporter.internalError(node.argumentsNode, 'Too many arguments.');
     }
     push(new HForeignCode(js.js.parseForeignJS(backend.namer.staticStateHolder),
-        backend.dynamicType, <HInstruction>[],
+        commonMasks.dynamicType, <HInstruction>[],
         nativeBehavior: native.NativeBehavior.DEPENDS_OTHER));
   }
 
@@ -3030,7 +3029,7 @@
     var inputs = [
       graph.addConstantString(new ast.DartString.literal(loadId), compiler)
     ];
-    push(new HInvokeStatic(loadFunction, inputs, backend.nonNullType,
+    push(new HInvokeStatic(loadFunction, inputs, commonMasks.nonNullType,
         targetCanThrow: false)..sourceInformation = sourceInformation);
   }
 
@@ -3085,7 +3084,7 @@
           argumentsInstruction,
           argumentNamesInstruction
         ],
-        typeMask: backend.dynamicType);
+        typeMask: commonMasks.dynamicType);
 
     var inputs = <HInstruction>[pop()];
     push(buildInvokeSuper(Selectors.noSuchMethod_, element, inputs));
@@ -3233,7 +3232,8 @@
   void visitSuperNotEquals(
       ast.Send node, MethodElement method, ast.Node argument, _) {
     handleSuperMethodInvoke(node, method);
-    pushWithPosition(new HNot(popBoolified(), backend.boolType), node.selector);
+    pushWithPosition(
+        new HNot(popBoolified(), commonMasks.boolType), node.selector);
   }
 
   @override
@@ -3262,11 +3262,9 @@
   }
 
   bool needsSubstitutionForTypeVariableAccess(ClassElement cls) {
-    ClosedWorld closedWorld = compiler.closedWorld;
     if (closedWorld.isUsedAsMixin(cls)) return true;
 
-    return compiler.closedWorld.anyStrictSubclassOf(cls,
-        (ClassElement subclass) {
+    return closedWorld.anyStrictSubclassOf(cls, (ClassElement subclass) {
       return !rti.isTrivialSubstitution(subclass, cls);
     });
   }
@@ -3292,7 +3290,7 @@
     Element typeInfoSetterElement = helpers.setRuntimeTypeInfo;
     pushInvokeStatic(
         null, typeInfoSetterElement, <HInstruction>[newObject, typeInfo],
-        typeMask: backend.dynamicType,
+        typeMask: commonMasks.dynamicType,
         sourceInformation: newObject.sourceInformation);
 
     // The new object will now be referenced through the
@@ -3324,13 +3322,13 @@
               originalElement, send, compiler)) {
         isFixedList = true;
         TypeMask inferred = _inferredTypeOfNewList(send);
-        return inferred.containsAll(compiler.closedWorld)
-            ? backend.fixedArrayType
+        return inferred.containsAll(closedWorld)
+            ? commonMasks.fixedArrayType
             : inferred;
       } else if (isGrowableListConstructorCall) {
         TypeMask inferred = _inferredTypeOfNewList(send);
-        return inferred.containsAll(compiler.closedWorld)
-            ? backend.extendableArrayType
+        return inferred.containsAll(closedWorld)
+            ? commonMasks.extendableArrayType
             : inferred;
       } else if (Elements.isConstructorOfTypedArraySubclass(
           originalElement, compiler)) {
@@ -3338,9 +3336,8 @@
         TypeMask inferred = _inferredTypeOfNewList(send);
         ClassElement cls = element.enclosingClass;
         assert(backend.isNative(cls.thisType.element));
-        return inferred.containsAll(compiler.closedWorld)
-            ? new TypeMask.nonNullExact(
-                cls.thisType.element, compiler.closedWorld)
+        return inferred.containsAll(closedWorld)
+            ? new TypeMask.nonNullExact(cls.thisType.element, closedWorld)
             : inferred;
       } else if (element.isGenerativeConstructor) {
         ClassElement cls = element.enclosingClass;
@@ -3348,8 +3345,7 @@
           // An error will be thrown.
           return new TypeMask.nonNullEmpty();
         } else {
-          return new TypeMask.nonNullExact(
-              cls.thisType.element, compiler.closedWorld);
+          return new TypeMask.nonNullExact(cls.thisType.element, closedWorld);
         }
       } else {
         return TypeMaskFactory.inferredReturnTypeForElement(
@@ -3427,7 +3423,7 @@
       return;
     }
 
-    var inputs = <HInstruction>[];
+    List<HInstruction> inputs = <HInstruction>[];
     if (constructor.isGenerativeConstructor &&
         backend.isNativeOrExtendsNative(constructor.enclosingClass) &&
         !backend.isJsInterop(constructor)) {
@@ -3439,9 +3435,12 @@
 
     TypeMask elementType = computeType(constructor);
     if (isFixedListConstructorCall) {
-      if (!inputs[0].isNumber(compiler)) {
-        HTypeConversion conversion = new HTypeConversion(null,
-            HTypeConversion.ARGUMENT_TYPE_CHECK, backend.numType, inputs[0]);
+      if (!inputs[0].isNumber(closedWorld)) {
+        HTypeConversion conversion = new HTypeConversion(
+            null,
+            HTypeConversion.ARGUMENT_TYPE_CHECK,
+            commonMasks.numType,
+            inputs[0]);
         add(conversion);
         inputs[0] = conversion;
       }
@@ -3453,7 +3452,7 @@
       // TODO(sra): Array allocation should be an instruction so that canThrow
       // can depend on a length type discovered in optimization.
       bool canThrow = true;
-      if (inputs[0].isInteger(compiler) && inputs[0] is HConstant) {
+      if (inputs[0].isInteger(closedWorld) && inputs[0] is HConstant) {
         var constant = inputs[0];
         int value = constant.constant.primitiveValue;
         if (0 <= value && value < 0x100000000) canThrow = false;
@@ -3468,7 +3467,7 @@
         js.Template code = js.js.parseForeignJS(r'#.fixed$length = Array');
         // We set the instruction as [canThrow] to avoid it being dead code.
         // We need a finer grained side effect.
-        add(new HForeignCode(code, backend.nullType, [stack.last],
+        add(new HForeignCode(code, commonMasks.nullType, [stack.last],
             throwBehavior: native.NativeThrowBehavior.MAY));
       }
     } else if (isGrowableListConstructorCall) {
@@ -3593,7 +3592,8 @@
 
     if (function == compiler.commonElements.identicalFunction) {
       pushWithPosition(
-          new HIdentity(inputs[0], inputs[1], null, backend.boolType), node);
+          new HIdentity(inputs[0], inputs[1], null, commonMasks.boolType),
+          node);
       return;
     } else {
       pushInvokeStatic(node, function, inputs,
@@ -3798,7 +3798,7 @@
       HInstruction value = typeBuilder.analyzeTypeArgument(type, sourceElement,
           sourceInformation: sourceInformationBuilder.buildGet(node));
       pushInvokeStatic(node, helpers.runtimeTypeToString, [value],
-          typeMask: backend.stringType);
+          typeMask: commonMasks.stringType);
       pushInvokeStatic(node, helpers.createRuntimeType, [pop()]);
     }
   }
@@ -3821,7 +3821,7 @@
     List<HInstruction> inputs = <HInstruction>[target];
     addDynamicSendArgumentsToList(node, inputs);
     push(new HInvokeClosure(
-        new Selector.callClosureFrom(selector), inputs, backend.dynamicType)
+        new Selector.callClosureFrom(selector), inputs, commonMasks.dynamicType)
       ..sourceInformation = sourceInformation);
   }
 
@@ -3970,11 +3970,10 @@
     bool isOptimizableOperationOnIndexable(Selector selector, Element element) {
       bool isLength = selector.isGetter && selector.name == "length";
       if (isLength || selector.isIndex) {
-        return compiler.closedWorld.isSubtypeOf(
+        return closedWorld.isSubtypeOf(
             element.enclosingClass.declaration, helpers.jsIndexableClass);
       } else if (selector.isIndexSet) {
-        return compiler.closedWorld.isSubtypeOf(
-            element.enclosingClass.declaration,
+        return closedWorld.isSubtypeOf(element.enclosingClass.declaration,
             helpers.jsMutableIndexableClass);
       } else {
         return false;
@@ -3997,7 +3996,7 @@
       return false;
     }
 
-    Element element = compiler.closedWorld.locateSingleElement(selector, mask);
+    Element element = closedWorld.locateSingleElement(selector, mask);
     if (element != null &&
         !element.isField &&
         !(element.isGetter && selector.isCall) &&
@@ -4067,14 +4066,14 @@
         nativeBehavior.typesReturned.add(constructor.enclosingClass.thisType);
       }
       return new HForeignCode(
-          codeTemplate, backend.dynamicType, filteredArguments,
+          codeTemplate, commonMasks.dynamicType, filteredArguments,
           nativeBehavior: nativeBehavior)
         ..sourceInformation = sourceInformation;
     }
     var target = new HForeignCode(
         js.js.parseForeignJS("${backend.namer.fixedBackendPath(element)}."
             "${backend.nativeData.getFixedBackendName(element)}"),
-        backend.dynamicType,
+        commonMasks.dynamicType,
         <HInstruction>[]);
     add(target);
     // Strip off trailing arguments that were not specified.
@@ -4125,7 +4124,7 @@
     js.Template codeTemplate = js.js.parseForeignJS(code);
     nativeBehavior.codeTemplate = codeTemplate;
 
-    return new HForeignCode(codeTemplate, backend.dynamicType, inputs,
+    return new HForeignCode(codeTemplate, commonMasks.dynamicType, inputs,
         nativeBehavior: nativeBehavior)..sourceInformation = sourceInformation;
   }
 
@@ -4145,7 +4144,7 @@
       typeMask =
           TypeMaskFactory.inferredReturnTypeForElement(element, compiler);
     }
-    bool targetCanThrow = !compiler.closedWorld.getCannotThrow(element);
+    bool targetCanThrow = !closedWorld.getCannotThrow(element);
     // TODO(5346): Try to avoid the need for calling [declaration] before
     var instruction;
     if (backend.isJsInterop(element)) {
@@ -4160,8 +4159,7 @@
         instruction.instantiatedTypes =
             new List<DartType>.from(currentInlinedInstantiations);
       }
-      instruction.sideEffects =
-          compiler.closedWorld.getSideEffectsOfElement(element);
+      instruction.sideEffects = closedWorld.getSideEffectsOfElement(element);
     }
     if (location == null) {
       push(instruction);
@@ -4195,7 +4193,7 @@
         selector, inputs, type, sourceInformation,
         isSetter: selector.isSetter || selector.isIndexSet);
     instruction.sideEffects =
-        compiler.closedWorld.getSideEffectsOfSelector(selector, null);
+        closedWorld.getSideEffectsOfSelector(selector, null);
     return instruction;
   }
 
@@ -5199,8 +5197,8 @@
     visit(node.expression);
     HInstruction awaited = pop();
     // TODO(herhut): Improve this type.
-    push(new HAwait(awaited,
-        new TypeMask.subclass(coreClasses.objectClass, compiler.closedWorld)));
+    push(new HAwait(
+        awaited, new TypeMask.subclass(coreClasses.objectClass, closedWorld)));
   }
 
   visitTypeAnnotation(ast.TypeAnnotation node) {
@@ -5259,15 +5257,14 @@
     }
 
     TypeMask type = _inferredTypeOfNewList(node);
-    if (!type.containsAll(compiler.closedWorld)) {
+    if (!type.containsAll(closedWorld)) {
       instruction.instructionType = type;
     }
     stack.add(instruction);
   }
 
   _inferredTypeOfNewList(ast.Node node) =>
-      _resultOf(sourceElement).typeOfNewList(node) ??
-      compiler.closedWorld.commonMasks.dynamicType;
+      _resultOf(sourceElement).typeOfNewList(node) ?? commonMasks.dynamicType;
 
   visitConditional(ast.Conditional node) {
     SsaBranchBuilder brancher = new SsaBranchBuilder(this, compiler, node);
@@ -5366,9 +5363,7 @@
       pushInvokeDynamic(node, selector, mask, [streamIterator]);
       HInstruction future = pop();
       push(new HAwait(
-          future,
-          new TypeMask.subclass(
-              coreClasses.objectClass, compiler.closedWorld)));
+          future, new TypeMask.subclass(coreClasses.objectClass, closedWorld)));
       return popBoolified();
     }
 
@@ -5404,9 +5399,7 @@
     }, () {
       pushInvokeDynamic(node, Selectors.cancel, null, [streamIterator]);
       push(new HAwait(
-          pop(),
-          new TypeMask.subclass(
-              coreClasses.objectClass, compiler.closedWorld)));
+          pop(), new TypeMask.subclass(coreClasses.objectClass, closedWorld)));
       pop();
     });
   }
@@ -5424,7 +5417,6 @@
 
     TypeMask mask = elementInferenceResults.typeOfIterator(node);
 
-    ClosedWorld closedWorld = compiler.closedWorld;
     if (mask != null &&
         mask.satisfies(helpers.jsIndexableClass, closedWorld) &&
         // String is indexable but not iterable.
@@ -5503,7 +5495,7 @@
     //     }
     Element loopVariable = elements.getForInVariable(node);
     SyntheticLocal indexVariable = new SyntheticLocal('_i', loopVariable);
-    TypeMask boolType = backend.boolType;
+    TypeMask boolType = commonMasks.boolType;
 
     // These variables are shared by initializer, condition, body and update.
     HInstruction array; // Set in buildInitializer.
@@ -5513,7 +5505,7 @@
     HInstruction buildGetLength() {
       MemberElement lengthElement = helpers.jsIndexableLength;
       HFieldGet result = new HFieldGet(
-          lengthElement, array, backend.positiveIntType,
+          lengthElement, array, commonMasks.positiveIntType,
           isAssignable: !isFixed);
       add(result);
       return result;
@@ -5584,7 +5576,7 @@
       HInstruction index = localsHandler.readLocal(indexVariable);
       HInstruction one = graph.addConstantInt(1, compiler);
       HInstruction addInstruction =
-          new HAdd(index, one, null, backend.positiveIntType);
+          new HAdd(index, one, null, commonMasks.positiveIntType);
       add(addInstruction);
       localsHandler.updateLocal(indexVariable, addInstruction);
     }
@@ -5705,12 +5697,12 @@
     // The instruction type will always be a subtype of the mapLiteralClass, but
     // type inference might discover a more specific type, or find nothing (in
     // dart2js unit tests).
-    TypeMask mapType = new TypeMask.nonNullSubtype(
-        helpers.mapLiteralClass, compiler.closedWorld);
+    TypeMask mapType =
+        new TypeMask.nonNullSubtype(helpers.mapLiteralClass, closedWorld);
     TypeMask returnTypeMask =
         TypeMaskFactory.inferredReturnTypeForElement(constructor, compiler);
     TypeMask instructionType =
-        mapType.intersection(returnTypeMask, compiler.closedWorld);
+        mapType.intersection(returnTypeMask, closedWorld);
 
     addInlinedInstantiation(expectedType);
     pushInvokeStatic(node, constructor, inputs,
@@ -5946,7 +5938,7 @@
       void buildCondition() {
         js.Template code = js.js.parseForeignJS('#');
         push(new HForeignCode(
-            code, backend.boolType, [localsHandler.readLocal(switchTarget)],
+            code, commonMasks.boolType, [localsHandler.readLocal(switchTarget)],
             nativeBehavior: native.NativeBehavior.PURE));
       }
 
@@ -6228,7 +6220,7 @@
       // Note that the name of this local is irrelevant.
       SyntheticLocal local =
           new SyntheticLocal('exception', localsHandler.executableContext);
-      exception = new HLocalValue(local, backend.nonNullType);
+      exception = new HLocalValue(local, commonMasks.nonNullType);
       add(exception);
       HInstruction oldRethrowableException = rethrowableException;
       rethrowableException = exception;
@@ -6538,7 +6530,7 @@
     //      conversions.
     //   2. The value can be primitive, because the library stringifier has
     //      fast-path code for most primitives.
-    if (expression.canBePrimitive(compiler)) {
+    if (expression.canBePrimitive(builder.closedWorld)) {
       append(stringify(node, expression));
       return;
     }
@@ -6548,7 +6540,7 @@
     Selector selector = Selectors.toString_;
     TypeMask type = TypeMaskFactory.inferredTypeForSelector(
         selector, expression.instructionType, compiler);
-    if (type.containsOnlyString(compiler.closedWorld)) {
+    if (type.containsOnlyString(builder.closedWorld)) {
       builder.pushInvokeDynamic(node, selector, expression.instructionType,
           <HInstruction>[expression]);
       append(builder.pop());
@@ -6581,14 +6573,14 @@
 
   HInstruction concat(HInstruction left, HInstruction right) {
     HInstruction instruction =
-        new HStringConcat(left, right, builder.backend.stringType);
+        new HStringConcat(left, right, builder.commonMasks.stringType);
     builder.add(instruction);
     return instruction;
   }
 
   HInstruction stringify(ast.Node node, HInstruction expression) {
     HInstruction instruction =
-        new HStringify(expression, builder.backend.stringType);
+        new HStringify(expression, builder.commonMasks.stringType);
     builder.add(instruction);
     return instruction;
   }
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 44c1c55..f3e651b 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:kernel/ast.dart' as ir;
+import 'package:kernel/text/ast_to_text.dart' show debugNodeToString;
 
 import '../closure.dart';
 import '../common.dart';
@@ -31,6 +32,7 @@
 import '../universe/selector.dart';
 import '../universe/use.dart' show StaticUse, TypeUse;
 import '../universe/side_effects.dart' show SideEffects;
+import '../world.dart' show ClosedWorld;
 import 'graph_builder.dart';
 import 'kernel_ast_adapter.dart';
 import 'kernel_string_builder.dart';
@@ -57,7 +59,25 @@
       Kernel kernel = backend.kernelTask.kernel;
       KernelSsaBuilder builder = new KernelSsaBuilder(element, work.resolvedAst,
           backend.compiler, work.registry, sourceInformationFactory, kernel);
-      return builder.build();
+      HGraph graph = builder.build();
+
+      if (backend.compiler.tracer.isEnabled) {
+        String name;
+        if (element.isClassMember) {
+          String className = element.enclosingClass.name;
+          String memberName = element.name;
+          name = "$className.$memberName";
+          if (element.isGenerativeConstructorBody) {
+            name = "$name (body)";
+          }
+        } else {
+          name = "${element.name}";
+        }
+        backend.compiler.tracer.traceCompilation(name);
+        backend.compiler.tracer.traceGraph('builder', graph);
+      }
+
+      return graph;
     });
   }
 }
@@ -88,7 +108,6 @@
   @override
   TreeElements get elements => resolvedAst.elements;
 
-
   SourceInformationBuilder sourceInformationBuilder;
   KernelAstAdapter astAdapter;
   LoopHandler<ir.Node> loopHandler;
@@ -97,6 +116,10 @@
   final Map<ir.VariableDeclaration, HInstruction> letBindings =
       <ir.VariableDeclaration, HInstruction>{};
 
+  /// True if we are visiting the expression of a throw statement; we assume
+  /// this is a slow path.
+  bool _inExpressionOfThrow = false;
+
   KernelSsaBuilder(
       this.targetElement,
       this.resolvedAst,
@@ -162,6 +185,10 @@
     openFunction();
     if (field.initializer != null) {
       field.initializer.accept(this);
+      HInstruction fieldValue = pop();
+      HInstruction checkInstruction = typeBuilder.potentiallyCheckOrTrustType(
+          fieldValue, astAdapter.getDartType(field.type));
+      stack.add(checkInstruction);
     } else {
       stack.add(graph.addConstantNull(compiler));
     }
@@ -181,7 +208,7 @@
           value, compiler.coreTypes.boolType,
           kind: HTypeConversion.BOOLEAN_CONVERSION_CHECK);
     }
-    HInstruction result = new HBoolify(value, backend.boolType);
+    HInstruction result = new HBoolify(value, commonMasks.boolType);
     add(result);
     return result;
   }
@@ -218,8 +245,7 @@
         astAdapter.getClass(constructor.enclosingClass),
         constructorArguments,
         new TypeMask.nonNullExact(
-            astAdapter.getClass(constructor.enclosingClass),
-            compiler.closedWorld),
+            astAdapter.getClass(constructor.enclosingClass), closedWorld),
         instantiatedTypes: <DartType>[
           astAdapter.getClass(constructor.enclosingClass).thisType
         ],
@@ -400,19 +426,28 @@
 
   /// Pushes a boolean checking [expression] against null.
   pushCheckNull(HInstruction expression) {
-    push(new HIdentity(
-        expression, graph.addConstantNull(compiler), null, backend.boolType));
+    push(new HIdentity(expression, graph.addConstantNull(compiler), null,
+        commonMasks.boolType));
   }
 
   @override
   void defaultExpression(ir.Expression expression) {
     // TODO(het): This is only to get tests working.
-    String message = 'Unhandled ir.${expression.runtimeType}  $expression';
+    _trap('Unhandled ir.${expression.runtimeType}  $expression');
+  }
+
+  @override
+  void defaultStatement(ir.Statement statement) {
+    _trap('Unhandled ir.${statement.runtimeType}  $statement');
+    pop();
+  }
+
+  void _trap(String message) {
     HInstruction nullValue = graph.addConstantNull(compiler);
     HInstruction errorMessage =
         graph.addConstantString(new DartString.literal(message), compiler);
     HInstruction trap = new HForeignCode(js.js.parseForeignJS("#.#"),
-        backend.dynamicType, <HInstruction>[nullValue, errorMessage]);
+        commonMasks.dynamicType, <HInstruction>[nullValue, errorMessage]);
     trap.sideEffects
       ..setAllSideEffects()
       ..setDependsOnSomething();
@@ -448,9 +483,22 @@
   }
 
   @override
+  void visitEmptyStatement(ir.EmptyStatement statement) {
+    // Empty statement adds no instructions to current block.
+  }
+
+  @override
   void visitExpressionStatement(ir.ExpressionStatement exprStatement) {
-    exprStatement.expression.accept(this);
-    pop();
+    if (!isReachable) return;
+    ir.Expression expression = exprStatement.expression;
+    if (expression is ir.Throw) {
+      // TODO(sra): Prevent generating a statement when inlining.
+      _visitThrowExpression(expression.expression);
+      closeAndGotoExit(new HThrow(pop(), null));
+    } else {
+      expression.accept(this);
+      pop();
+    }
   }
 
   @override
@@ -461,8 +509,8 @@
     } else {
       assert(_targetFunction != null && _targetFunction is ir.FunctionNode);
       returnStatement.expression.accept(this);
-      value = typeBuilder.potentiallyCheckOrTrustType(pop(),
-          astAdapter.getFunctionReturnType(_targetFunction));
+      value = typeBuilder.potentiallyCheckOrTrustType(
+          pop(), astAdapter.getFunctionReturnType(_targetFunction));
     }
     // TODO(het): Add source information
     // TODO(het): Set a return value instead of closing the function when we
@@ -542,7 +590,7 @@
 
     HInstruction buildGetLength() {
       HFieldGet result = new HFieldGet(
-          astAdapter.jsIndexableLength, array, backend.positiveIntType,
+          astAdapter.jsIndexableLength, array, commonMasks.positiveIntType,
           isAssignable: !isFixed);
       add(result);
       return result;
@@ -556,7 +604,7 @@
       //     array.length == _end || throwConcurrentModificationError(array)
       //
       HInstruction length = buildGetLength();
-      push(new HIdentity(length, originalLength, null, backend.boolType));
+      push(new HIdentity(length, originalLength, null, commonMasks.boolType));
       _pushStaticInvocation(
           astAdapter.checkConcurrentModificationError,
           [pop(), array],
@@ -576,7 +624,8 @@
     HInstruction buildCondition() {
       HInstruction index = localsHandler.readLocal(indexVariable);
       HInstruction length = buildGetLength();
-      HInstruction compare = new HLess(index, length, null, backend.boolType);
+      HInstruction compare =
+          new HLess(index, length, null, commonMasks.boolType);
       add(compare);
       return compare;
     }
@@ -615,7 +664,7 @@
       HInstruction index = localsHandler.readLocal(indexVariable);
       HInstruction one = graph.addConstantInt(1, compiler);
       HInstruction addInstruction =
-          new HAdd(index, one, null, backend.positiveIntType);
+          new HAdd(index, one, null, commonMasks.positiveIntType);
       add(addInstruction);
       localsHandler.updateLocal(indexVariable, addInstruction);
     }
@@ -670,7 +719,7 @@
     ir.Procedure typeInfoSetterFn = astAdapter.setRuntimeTypeInfo;
     // TODO(efortuna): Insert source information in this static invocation.
     _pushStaticInvocation(typeInfoSetterFn, <HInstruction>[newObject, typeInfo],
-        backend.dynamicType);
+        commonMasks.dynamicType);
 
     // The new object will now be referenced through the
     // `setRuntimeTypeInfo` call. We therefore set the type of that
@@ -847,14 +896,15 @@
         element.accept(this);
         elements.add(pop());
       }
-      listInstruction = new HLiteralList(elements, backend.extendableArrayType);
+      listInstruction =
+          new HLiteralList(elements, commonMasks.extendableArrayType);
       add(listInstruction);
       listInstruction =
           setListRuntimeTypeInfoIfNeeded(listInstruction, listLiteral);
     }
 
     TypeMask type = astAdapter.typeOfListLiteral(targetElement, listLiteral);
-    if (!type.containsAll(compiler.closedWorld)) {
+    if (!type.containsAll(closedWorld)) {
       listInstruction.instructionType = type;
     }
     stack.add(listInstruction);
@@ -884,7 +934,7 @@
     } else {
       constructor = astAdapter.mapLiteralConstructor;
       HLiteralList argList =
-          new HLiteralList(constructorArgs, backend.extendableArrayType);
+          new HLiteralList(constructorArgs, commonMasks.extendableArrayType);
       add(argList);
       inputs.add(argList);
     }
@@ -925,12 +975,11 @@
     // type inference might discover a more specific type, or find nothing (in
     // dart2js unit tests).
     TypeMask mapType = new TypeMask.nonNullSubtype(
-        astAdapter.getElement(astAdapter.mapLiteralClass),
-        compiler.closedWorld);
+        astAdapter.getElement(astAdapter.mapLiteralClass), closedWorld);
     TypeMask returnTypeMask = TypeMaskFactory.inferredReturnTypeForElement(
         astAdapter.getElement(constructor), compiler);
     TypeMask instructionType =
-        mapType.intersection(returnTypeMask, compiler.closedWorld);
+        mapType.intersection(returnTypeMask, closedWorld);
 
     addImplicitInstantiation(type);
     _pushStaticInvocation(constructor, inputs, instructionType);
@@ -954,8 +1003,16 @@
       return;
     }
     if (type is ir.TypeParameterType) {
-      // TODO(27394): Load type parameter from current 'this' object.
-      defaultExpression(typeLiteral);
+      // TODO(sra): Convert the type logic here to use ir.DartType.
+      DartType dartType = astAdapter.getDartType(type);
+      dartType = localsHandler.substInContext(dartType);
+      HInstruction value = typeBuilder.analyzeTypeArgument(
+          dartType, sourceElement,
+          sourceInformation: null);
+      _pushStaticInvocation(astAdapter.runtimeTypeToString,
+          <HInstruction>[value], commonMasks.stringType);
+      _pushStaticInvocation(astAdapter.createRuntimeType, <HInstruction>[pop()],
+          astAdapter.createRuntimeTypeReturnType);
       return;
     }
     // TODO(27394): 'dynamic' and function types observed. Where are they from?
@@ -1060,7 +1117,6 @@
       HInstruction initialValue = graph.addConstantNull(compiler);
       localsHandler.updateLocal(local, initialValue);
     } else {
-      // TODO(het): handle case where the variable is top-level or static
       declaration.initializer.accept(this);
       HInstruction initialValue = pop();
 
@@ -1072,7 +1128,6 @@
   }
 
   void _visitLocalSetter(ir.VariableDeclaration variable, HInstruction value) {
-    // TODO(het): handle case where the variable is top-level or static
     LocalElement local = astAdapter.getElement(variable);
 
     // Give the value a name if it doesn't have one already.
@@ -1315,12 +1370,12 @@
       return;
     }
 
-    if (!compiler.hasIsolateSupport) {
+    if (!backend.hasIsolateSupport) {
       // If the isolate library is not used, we just generate code
       // to fetch the static state.
       String name = backend.namer.staticStateHolder;
       push(new HForeignCode(
-          js.js.parseForeignJS(name), backend.dynamicType, <HInstruction>[],
+          js.js.parseForeignJS(name), commonMasks.dynamicType, <HInstruction>[],
           nativeBehavior: native.NativeBehavior.DEPENDS_OTHER));
     } else {
       // Call a helper method from the isolate library. The isolate library uses
@@ -1331,7 +1386,7 @@
         compiler.reporter.internalError(astAdapter.getNode(invocation),
             'Isolate library and compiler mismatch.');
       }
-      _pushStaticInvocation(target, <HInstruction>[], backend.dynamicType);
+      _pushStaticInvocation(target, <HInstruction>[], commonMasks.dynamicType);
     }
   }
 
@@ -1343,11 +1398,11 @@
 
     List<HInstruction> inputs = _visitPositionalArguments(invocation.arguments);
 
-    if (!compiler.hasIsolateSupport) {
+    if (!backend.hasIsolateSupport) {
       // If the isolate library is not used, we ignore the isolate argument and
       // just invoke the closure.
       push(new HInvokeClosure(new Selector.callClosure(0),
-          <HInstruction>[inputs[1]], backend.dynamicType));
+          <HInstruction>[inputs[1]], commonMasks.dynamicType));
     } else {
       // Call a helper method from the isolate library.
       ir.Procedure callInIsolate = astAdapter.callInIsolate;
@@ -1355,7 +1410,7 @@
         compiler.reporter.internalError(astAdapter.getNode(invocation),
             'Isolate library and compiler mismatch.');
       }
-      _pushStaticInvocation(callInIsolate, inputs, backend.dynamicType);
+      _pushStaticInvocation(callInIsolate, inputs, commonMasks.dynamicType);
     }
   }
 
@@ -1389,7 +1444,7 @@
             push(new HForeignCode(
                 js.js.expressionTemplateYielding(backend.emitter
                     .staticFunctionAccess(astAdapter.getMember(staticTarget))),
-                backend.dynamicType,
+                commonMasks.dynamicType,
                 <HInstruction>[],
                 nativeBehavior: native.NativeBehavior.PURE));
             return;
@@ -1416,8 +1471,8 @@
     String isolateName = backend.namer.staticStateHolder;
     SideEffects sideEffects = new SideEffects.empty();
     sideEffects.setAllSideEffects();
-    push(new HForeignCode(
-        js.js.parseForeignJS("$isolateName = #"), backend.dynamicType, inputs,
+    push(new HForeignCode(js.js.parseForeignJS("$isolateName = #"),
+        commonMasks.dynamicType, inputs,
         nativeBehavior: native.NativeBehavior.CHANGES_OTHER,
         effects: sideEffects));
   }
@@ -1429,7 +1484,7 @@
     }
 
     push(new HForeignCode(js.js.parseForeignJS(backend.namer.staticStateHolder),
-        backend.dynamicType, <HInstruction>[],
+        commonMasks.dynamicType, <HInstruction>[],
         nativeBehavior: native.NativeBehavior.DEPENDS_OTHER));
   }
 
@@ -1616,7 +1671,7 @@
       return;
     }
     List<HInstruction> inputs = _visitPositionalArguments(invocation.arguments);
-    push(new HStringConcat(inputs[0], inputs[1], backend.stringType));
+    push(new HStringConcat(inputs[0], inputs[1], commonMasks.stringType));
   }
 
   void _pushStaticInvocation(
@@ -1682,8 +1737,7 @@
       capturedVariables.add(localsHandler.readLocal(capturedLocal));
     });
 
-    TypeMask type =
-        new TypeMask.nonNullExact(closureClassElement, compiler.closedWorld);
+    TypeMask type = new TypeMask.nonNullExact(closureClassElement, closedWorld);
     // TODO(efortuna): Add source information here.
     push(new HCreate(closureClassElement, capturedVariables, type));
 
@@ -1694,8 +1748,8 @@
   visitFunctionDeclaration(ir.FunctionDeclaration declaration) {
     assert(isReachable);
     declaration.function.accept(this);
-    LocalFunctionElement localFunction = astAdapter.getElement(
-        declaration.function);
+    LocalFunctionElement localFunction =
+        astAdapter.getElement(declaration.function);
     localsHandler.updateLocal(localFunction, pop());
   }
 
@@ -1744,7 +1798,7 @@
 
   HInterceptor _interceptorFor(HInstruction intercepted) {
     HInterceptor interceptor =
-        new HInterceptor(intercepted, backend.nonNullType);
+        new HInterceptor(intercepted, commonMasks.nonNullType);
     add(interceptor);
     return interceptor;
   }
@@ -1781,7 +1835,7 @@
         null,
         isSetter: selector.isSetter || selector.isIndexSet);
     instruction.sideEffects =
-        compiler.closedWorld.getSideEffectsOfSelector(selector, null);
+        closedWorld.getSideEffectsOfSelector(selector, null);
     push(instruction);
   }
 
@@ -1792,7 +1846,7 @@
     List<HInstruction> arguments =
         _visitArgumentsForStaticTarget(target.function, invocation.arguments);
     TypeMask typeMask = new TypeMask.nonNullExact(
-        astAdapter.getElement(target.enclosingClass), compiler.closedWorld);
+        astAdapter.getElement(target.enclosingClass), closedWorld);
     _pushStaticInvocation(target, arguments, typeMask);
   }
 
@@ -1814,17 +1868,17 @@
     if (type is MalformedType) {
       ErroneousElement element = type.element;
       generateTypeError(isExpression, element.message);
-      push(new HIs.compound(type, expression, pop(), backend.boolType));
+      push(new HIs.compound(type, expression, pop(), commonMasks.boolType));
       return;
     }
 
     if (type.isFunctionType) {
       List arguments = <HInstruction>[buildFunctionType(type), expression];
-      _pushDynamicInvocation(isExpression, backend.boolType, arguments,
+      _pushDynamicInvocation(isExpression, commonMasks.boolType, arguments,
           selector: new Selector.call(
               new PrivateName('_isTest', astAdapter.jsHelperLibrary),
               CallStructure.ONE_ARG));
-      push(new HIs.compound(type, expression, pop(), backend.boolType));
+      push(new HIs.compound(type, expression, pop(), commonMasks.boolType));
       return;
     }
 
@@ -1832,34 +1886,43 @@
       HInstruction runtimeType =
           typeBuilder.addTypeVariableReference(type, sourceElement);
       _pushStaticInvocation(astAdapter.checkSubtypeOfRuntimeType,
-          <HInstruction>[expression, runtimeType], backend.boolType);
-      push(new HIs.variable(type, expression, pop(), backend.boolType));
+          <HInstruction>[expression, runtimeType], commonMasks.boolType);
+      push(new HIs.variable(type, expression, pop(), commonMasks.boolType));
       return;
     }
 
     // TODO(sra): Type with type parameters.
 
     if (backend.hasDirectCheckFor(type)) {
-      push(new HIs.direct(type, expression, backend.boolType));
+      push(new HIs.direct(type, expression, commonMasks.boolType));
       return;
     }
 
     // The interceptor is not always needed.  It is removed by optimization
     // when the receiver type or tested type permit.
     HInterceptor interceptor = _interceptorFor(expression);
-    push(new HIs.raw(type, expression, interceptor, backend.boolType));
+    push(new HIs.raw(type, expression, interceptor, commonMasks.boolType));
   }
 
   @override
   void visitThrow(ir.Throw throwNode) {
-    throwNode.expression.accept(this);
-    HInstruction expression = pop();
+    _visitThrowExpression(throwNode.expression);
     if (isReachable) {
-      push(new HThrowExpression(expression, null));
+      push(new HThrowExpression(pop(), null));
       isReachable = false;
     }
   }
 
+  void _visitThrowExpression(ir.Expression expression) {
+    bool old = _inExpressionOfThrow;
+    try {
+      _inExpressionOfThrow = true;
+      expression.accept(this);
+    } finally {
+      _inExpressionOfThrow = old;
+    }
+  }
+
   @override
   void visitThisExpression(ir.ThisExpression thisExpression) {
     stack.add(localsHandler.readThis());
@@ -1868,7 +1931,7 @@
   @override
   void visitNot(ir.Not not) {
     not.operand.accept(this);
-    push(new HNot(popBoolified(), backend.boolType));
+    push(new HNot(popBoolified(), commonMasks.boolType));
   }
 
   @override
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index cd9d7c0..83a0f7f 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -179,6 +179,8 @@
 
   Compiler get compiler => backend.compiler;
 
+  ClosedWorld get closedWorld => compiler.closedWorld;
+
   NativeEmitter get nativeEmitter => backend.emitter.nativeEmitter;
 
   CodegenRegistry get registry => work.registry;
@@ -261,8 +263,8 @@
     return MAX;
   }
 
-  bool requiresUintConversion(instruction) {
-    if (instruction.isUInt31(compiler)) return false;
+  bool requiresUintConversion(HInstruction instruction) {
+    if (instruction.isUInt31(closedWorld)) return false;
     if (bitWidth(instruction) <= 31) return false;
     // If the result of a bit-operation is only used by other bit
     // operations, we do not have to convert to an unsigned integer.
@@ -1381,11 +1383,11 @@
   visitShiftRight(HShiftRight node) => visitBitInvokeBinary(node, '>>>');
 
   visitTruncatingDivide(HTruncatingDivide node) {
-    assert(node.isUInt31(compiler));
+    assert(node.isUInt31(closedWorld));
     // TODO(karlklose): Enable this assertion again when type propagation is
     // fixed. Issue 23555.
 //    assert(node.left.isUInt32(compiler));
-    assert(node.right.isPositiveInteger(compiler));
+    assert(node.right.isPositiveInteger(closedWorld));
     use(node.left);
     js.Expression jsLeft = pop();
     use(node.right);
@@ -1709,22 +1711,20 @@
       // type because our optimizations might end up in a state where the
       // invoke dynamic knows more than the receiver.
       ClassElement enclosing = node.element.enclosingClass;
-      if (compiler.closedWorld.isInstantiated(enclosing)) {
-        return new TypeMask.nonNullExact(
-            enclosing.declaration, compiler.closedWorld);
+      if (closedWorld.isInstantiated(enclosing)) {
+        return new TypeMask.nonNullExact(enclosing.declaration, closedWorld);
       } else {
         // The element is mixed in so a non-null subtype mask is the most
         // precise we have.
-        assert(invariant(node, compiler.closedWorld.isUsedAsMixin(enclosing),
+        assert(invariant(node, closedWorld.isUsedAsMixin(enclosing),
             message: "Element ${node.element} from $enclosing expected "
                 "to be mixed in."));
-        return new TypeMask.nonNullSubtype(
-            enclosing.declaration, compiler.closedWorld);
+        return new TypeMask.nonNullSubtype(enclosing.declaration, closedWorld);
       }
     }
     // If [JSInvocationMirror._invokeOn] is enabled, and this call
     // might hit a `noSuchMethod`, we register an untyped selector.
-    return compiler.closedWorld.extendMaskIfReachesAll(selector, mask);
+    return closedWorld.extendMaskIfReachesAll(selector, mask);
   }
 
   void registerMethodInvoke(HInvokeDynamic node) {
@@ -2098,13 +2098,14 @@
 
       HInstruction left = relational.left;
       HInstruction right = relational.right;
-      if (left.isStringOrNull(compiler) && right.isStringOrNull(compiler)) {
+      if (left.isStringOrNull(closedWorld) &&
+          right.isStringOrNull(closedWorld)) {
         return true;
       }
 
       // This optimization doesn't work for NaN, so we only do it if the
       // type is known to be an integer.
-      return left.isInteger(compiler) && right.isInteger(compiler);
+      return left.isInteger(closedWorld) && right.isInteger(closedWorld);
     }
 
     bool handledBySpecialCase = false;
@@ -2240,13 +2241,13 @@
       js.Expression over;
       if (node.staticChecks != HBoundsCheck.ALWAYS_ABOVE_ZERO) {
         use(node.index);
-        if (node.index.isInteger(compiler)) {
+        if (node.index.isInteger(closedWorld)) {
           under = js.js("# < 0", pop());
         } else {
           js.Expression jsIndex = pop();
           under = js.js("# >>> 0 !== #", [jsIndex, jsIndex]);
         }
-      } else if (!node.index.isInteger(compiler)) {
+      } else if (!node.index.isInteger(closedWorld)) {
         checkInt(node.index, '!==');
         under = pop();
       }
@@ -2376,9 +2377,9 @@
 
   void visitStringify(HStringify node) {
     HInstruction input = node.inputs.first;
-    if (input.isString(compiler)) {
+    if (input.isString(closedWorld)) {
       use(input);
-    } else if (input.isInteger(compiler) || input.isBoolean(compiler)) {
+    } else if (input.isInteger(closedWorld) || input.isBoolean(closedWorld)) {
       // JavaScript's + operator with a string for the left operand will convert
       // the right operand to a string, and the conversion result is correct.
       use(input);
@@ -2761,8 +2762,8 @@
       } else if (type.isFunctionType) {
         checkType(input, interceptor, type, sourceInformation,
             negative: negative);
-      } else if ((input.canBePrimitive(compiler) &&
-              !input.canBePrimitiveArray(compiler)) ||
+      } else if ((input.canBePrimitive(closedWorld) &&
+              !input.canBePrimitiveArray(closedWorld)) ||
           input.canBeNull()) {
         checkObject(input, relation, node.sourceInformation);
         js.Expression objectTest = pop();
@@ -2787,14 +2788,13 @@
 
   js.Expression generateReceiverOrArgumentTypeTest(
       HInstruction input, TypeMask checkedType) {
-    ClosedWorld closedWorld = compiler.closedWorld;
     TypeMask inputType = input.instructionType;
     // Figure out if it is beneficial to turn this into a null check.
     // V8 generally prefers 'typeof' checks, but for integers and
     // indexable primitives we cannot compile this test into a single
     // typeof check so the null check is cheaper.
     bool isIntCheck = checkedType.containsOnlyInt(closedWorld);
-    bool turnIntoNumCheck = isIntCheck && input.isIntegerOrNull(compiler);
+    bool turnIntoNumCheck = isIntCheck && input.isIntegerOrNull(closedWorld);
     bool turnIntoNullCheck = !turnIntoNumCheck &&
         (checkedType.nullable() == inputType) &&
         (isIntCheck ||
@@ -2827,12 +2827,11 @@
 
   void visitTypeConversion(HTypeConversion node) {
     if (node.isArgumentTypeCheck || node.isReceiverTypeCheck) {
-      ClosedWorld closedWorld = compiler.closedWorld;
       // An int check if the input is not int or null, is not
       // sufficient for doing an argument or receiver check.
       assert(compiler.options.trustTypeAnnotations ||
           !node.checkedType.containsOnlyInt(closedWorld) ||
-          node.checkedInput.isIntegerOrNull(compiler));
+          node.checkedInput.isIntegerOrNull(closedWorld));
       js.Expression test = generateReceiverOrArgumentTypeTest(
           node.checkedInput, node.checkedType);
       js.Block oldContainer = currentContainer;
@@ -3010,7 +3009,6 @@
   bool typeVariableAccessNeedsSubstitution(
       TypeVariableElement element, TypeMask receiverMask) {
     ClassElement cls = element.enclosingClass;
-    ClosedWorld closedWorld = compiler.closedWorld;
 
     // See if the receiver type narrows the set of classes to ones that can be
     // indexed.
diff --git a/pkg/compiler/lib/src/ssa/codegen_helpers.dart b/pkg/compiler/lib/src/ssa/codegen_helpers.dart
index 34d156b..04fdb11 100644
--- a/pkg/compiler/lib/src/ssa/codegen_helpers.dart
+++ b/pkg/compiler/lib/src/ssa/codegen_helpers.dart
@@ -8,6 +8,7 @@
 import '../js_backend/js_backend.dart';
 import '../types/types.dart';
 import '../universe/selector.dart' show Selector;
+import '../world.dart' show ClosedWorld;
 import 'nodes.dart';
 
 /**
@@ -22,6 +23,8 @@
 
   JavaScriptBackend get backend => compiler.backend;
 
+  ClosedWorld get closedWorld => compiler.closedWorld;
+
   void visitGraph(HGraph graph) {
     this.graph = graph;
     visitDominatorTree(graph);
@@ -67,7 +70,7 @@
       HInstruction interceptor = node.interceptor;
       if (interceptor != null) {
         return new HIsViaInterceptor(
-            node.typeExpression, interceptor, backend.boolType);
+            node.typeExpression, interceptor, closedWorld.commonMasks.boolType);
       }
     }
     return node;
@@ -86,7 +89,7 @@
     if (leftType.isNullable && rightType.isNullable) {
       if (left.isConstantNull() ||
           right.isConstantNull() ||
-          (left.isPrimitive(compiler) && leftType == rightType)) {
+          (left.isPrimitive(closedWorld) && leftType == rightType)) {
         return '==';
       }
       return null;
@@ -242,7 +245,7 @@
     HInstruction bitop(String assignOp) {
       // HBitAnd, HBitOr etc. are more difficult because HBitAnd(a.x, y)
       // sometimes needs to be forced to unsigned: a.x = (a.x & y) >>> 0.
-      if (op.isUInt31(compiler)) return simpleBinary(assignOp);
+      if (op.isUInt31(closedWorld)) return simpleBinary(assignOp);
       return noMatchingRead();
     }
 
diff --git a/pkg/compiler/lib/src/ssa/graph_builder.dart b/pkg/compiler/lib/src/ssa/graph_builder.dart
index e5dce33..c35e34f 100644
--- a/pkg/compiler/lib/src/ssa/graph_builder.dart
+++ b/pkg/compiler/lib/src/ssa/graph_builder.dart
@@ -42,6 +42,10 @@
 
   CodegenRegistry get registry;
 
+  ClosedWorld get closedWorld => compiler.closedWorld;
+
+  CommonMasks get commonMasks => closedWorld.commonMasks;
+
   /// Used to track the locals while building the graph.
   LocalsHandler localsHandler;
 
@@ -75,8 +79,8 @@
 
   /// Pushes a boolean checking [expression] against null.
   pushCheckNull(HInstruction expression) {
-    push(new HIdentity(
-        expression, graph.addConstantNull(compiler), null, backend.boolType));
+    push(new HIdentity(expression, graph.addConstantNull(compiler), null,
+        closedWorld.commonMasks.boolType));
   }
 
   void dup() {
@@ -225,7 +229,7 @@
         TypeInfoExpressionKind.INSTANCE,
         (type.element as ClassElement).thisType,
         rtiInputs,
-        backend.dynamicType);
+        closedWorld.commonMasks.dynamicType);
     add(typeInfo);
     return callSetRuntimeTypeInfo(typeInfo, newObject);
   }
diff --git a/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart b/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
index 1716c7f..d35ee86 100644
--- a/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
+++ b/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
@@ -97,7 +97,7 @@
 
   bool canUseSelfForInterceptor(
       HInstruction receiver, Set<ClassElement> interceptedClasses) {
-    if (receiver.canBePrimitive(compiler)) {
+    if (receiver.canBePrimitive(closedWorld)) {
       // Primitives always need interceptors.
       return false;
     }
@@ -312,9 +312,9 @@
     if (receiver.canBeNull()) {
       if (!interceptedClasses.contains(helpers.jsNullClass)) {
         // Can use `(receiver && C)` only if receiver is either null or truthy.
-        if (!(receiver.canBePrimitiveNumber(compiler) ||
-            receiver.canBePrimitiveBoolean(compiler) ||
-            receiver.canBePrimitiveString(compiler))) {
+        if (!(receiver.canBePrimitiveNumber(closedWorld) ||
+            receiver.canBePrimitiveBoolean(closedWorld) ||
+            receiver.canBePrimitiveString(closedWorld))) {
           ClassElement interceptorClass = tryComputeConstantInterceptorFromType(
               receiver.instructionType.nonNullable(), interceptedClasses);
           if (interceptorClass != null) {
diff --git a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
index 63e3a26..e413748 100644
--- a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
+++ b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
@@ -24,13 +24,13 @@
   const InvokeDynamicSpecializer();
 
   TypeMask computeTypeFromInputTypes(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     return TypeMaskFactory.inferredTypeForSelector(
         instruction.selector, instruction.mask, compiler);
   }
 
   HInstruction tryConvertToBuiltin(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     return null;
   }
 
@@ -85,9 +85,9 @@
   const IndexAssignSpecializer();
 
   HInstruction tryConvertToBuiltin(
-      HInvokeDynamic instruction, Compiler compiler) {
-    if (instruction.inputs[1].isMutableIndexable(compiler)) {
-      if (!instruction.inputs[2].isInteger(compiler) &&
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
+    if (instruction.inputs[1].isMutableIndexable(closedWorld)) {
+      if (!instruction.inputs[2].isInteger(closedWorld) &&
           compiler.options.enableTypeAssertions) {
         // We want the right checked mode error.
         return null;
@@ -103,9 +103,9 @@
   const IndexSpecializer();
 
   HInstruction tryConvertToBuiltin(
-      HInvokeDynamic instruction, Compiler compiler) {
-    if (!instruction.inputs[1].isIndexablePrimitive(compiler)) return null;
-    if (!instruction.inputs[2].isInteger(compiler) &&
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
+    if (!instruction.inputs[1].isIndexablePrimitive(closedWorld)) return null;
+    if (!instruction.inputs[2].isInteger(closedWorld) &&
         compiler.options.enableTypeAssertions) {
       // We want the right checked mode error.
       return null;
@@ -127,22 +127,21 @@
   }
 
   TypeMask computeTypeFromInputTypes(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     // All bitwise operations on primitive types either produce an
     // integer or throw an error.
-    JavaScriptBackend backend = compiler.backend;
-    if (instruction.inputs[1].isPrimitiveOrNull(compiler)) {
-      return backend.uint32Type;
+    if (instruction.inputs[1].isPrimitiveOrNull(closedWorld)) {
+      return closedWorld.commonMasks.uint32Type;
     }
-    return super.computeTypeFromInputTypes(instruction, compiler);
+    return super.computeTypeFromInputTypes(instruction, compiler, closedWorld);
   }
 
   HInstruction tryConvertToBuiltin(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     HInstruction input = instruction.inputs[1];
-    if (input.isNumber(compiler)) {
+    if (input.isNumber(closedWorld)) {
       return new HBitNot(input, instruction.selector,
-          computeTypeFromInputTypes(instruction, compiler));
+          computeTypeFromInputTypes(instruction, compiler, closedWorld));
     }
     return null;
   }
@@ -156,16 +155,16 @@
   }
 
   TypeMask computeTypeFromInputTypes(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     TypeMask operandType = instruction.inputs[1].instructionType;
-    if (instruction.inputs[1].isNumberOrNull(compiler)) return operandType;
-    return super.computeTypeFromInputTypes(instruction, compiler);
+    if (instruction.inputs[1].isNumberOrNull(closedWorld)) return operandType;
+    return super.computeTypeFromInputTypes(instruction, compiler, closedWorld);
   }
 
   HInstruction tryConvertToBuiltin(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     HInstruction input = instruction.inputs[1];
-    if (input.isNumber(compiler)) {
+    if (input.isNumber(closedWorld)) {
       return new HNegate(input, instruction.selector, input.instructionType);
     }
     return null;
@@ -176,31 +175,33 @@
   const BinaryArithmeticSpecializer();
 
   TypeMask computeTypeFromInputTypes(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
-    JavaScriptBackend backend = compiler.backend;
-    if (left.isIntegerOrNull(compiler) && right.isIntegerOrNull(compiler)) {
-      return backend.intType;
+    if (left.isIntegerOrNull(closedWorld) &&
+        right.isIntegerOrNull(closedWorld)) {
+      return closedWorld.commonMasks.intType;
     }
-    if (left.isNumberOrNull(compiler)) {
-      if (left.isDoubleOrNull(compiler) || right.isDoubleOrNull(compiler)) {
-        return backend.doubleType;
+    if (left.isNumberOrNull(closedWorld)) {
+      if (left.isDoubleOrNull(closedWorld) ||
+          right.isDoubleOrNull(closedWorld)) {
+        return closedWorld.commonMasks.doubleType;
       }
-      return backend.numType;
+      return closedWorld.commonMasks.numType;
     }
-    return super.computeTypeFromInputTypes(instruction, compiler);
+    return super.computeTypeFromInputTypes(instruction, compiler, closedWorld);
   }
 
-  bool isBuiltin(HInvokeDynamic instruction, Compiler compiler) {
-    return instruction.inputs[1].isNumber(compiler) &&
-        instruction.inputs[2].isNumber(compiler);
+  bool isBuiltin(HInvokeDynamic instruction, ClosedWorld closedWorld) {
+    return instruction.inputs[1].isNumber(closedWorld) &&
+        instruction.inputs[2].isNumber(closedWorld);
   }
 
   HInstruction tryConvertToBuiltin(
-      HInvokeDynamic instruction, Compiler compiler) {
-    if (isBuiltin(instruction, compiler)) {
-      HInstruction builtin = newBuiltinVariant(instruction, compiler);
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
+    if (isBuiltin(instruction, closedWorld)) {
+      HInstruction builtin =
+          newBuiltinVariant(instruction, compiler, closedWorld);
       if (builtin != null) return builtin;
       // Even if there is no builtin equivalent instruction, we know
       // the instruction does not have any side effect, and that it
@@ -210,20 +211,22 @@
     return null;
   }
 
-  bool inputsArePositiveIntegers(HInstruction instruction, Compiler compiler) {
+  bool inputsArePositiveIntegers(
+      HInstruction instruction, ClosedWorld closedWorld) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
-    return left.isPositiveIntegerOrNull(compiler) &&
-        right.isPositiveIntegerOrNull(compiler);
+    return left.isPositiveIntegerOrNull(closedWorld) &&
+        right.isPositiveIntegerOrNull(closedWorld);
   }
 
-  bool inputsAreUInt31(HInstruction instruction, Compiler compiler) {
+  bool inputsAreUInt31(HInstruction instruction, ClosedWorld closedWorld) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
-    return left.isUInt31(compiler) && right.isUInt31(compiler);
+    return left.isUInt31(closedWorld) && right.isUInt31(closedWorld);
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction, Compiler compiler);
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld);
 
   Selector renameToOptimizedSelector(
       String name, Selector selector, Compiler compiler) {
@@ -239,16 +242,14 @@
   const AddSpecializer();
 
   TypeMask computeTypeFromInputTypes(
-      HInvokeDynamic instruction, Compiler compiler) {
-    if (inputsAreUInt31(instruction, compiler)) {
-      JavaScriptBackend backend = compiler.backend;
-      return backend.uint32Type;
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
+    if (inputsAreUInt31(instruction, closedWorld)) {
+      return closedWorld.commonMasks.uint32Type;
     }
-    if (inputsArePositiveIntegers(instruction, compiler)) {
-      JavaScriptBackend backend = compiler.backend;
-      return backend.positiveIntType;
+    if (inputsArePositiveIntegers(instruction, closedWorld)) {
+      return closedWorld.commonMasks.positiveIntType;
     }
-    return super.computeTypeFromInputTypes(instruction, compiler);
+    return super.computeTypeFromInputTypes(instruction, compiler, closedWorld);
   }
 
   BinaryOperation operation(ConstantSystem constantSystem) {
@@ -256,9 +257,12 @@
   }
 
   HInstruction newBuiltinVariant(
-      HInvokeDynamic instruction, Compiler compiler) {
-    return new HAdd(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, computeTypeFromInputTypes(instruction, compiler));
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
+    return new HAdd(
+        instruction.inputs[1],
+        instruction.inputs[2],
+        instruction.selector,
+        computeTypeFromInputTypes(instruction, compiler, closedWorld));
   }
 }
 
@@ -270,20 +274,18 @@
   }
 
   TypeMask computeTypeFromInputTypes(
-      HInstruction instruction, Compiler compiler) {
+      HInstruction instruction, Compiler compiler, ClosedWorld closedWorld) {
     HInstruction left = instruction.inputs[1];
-    JavaScriptBackend backend = compiler.backend;
-    if (left.isNumberOrNull(compiler)) {
-      return backend.doubleType;
+    if (left.isNumberOrNull(closedWorld)) {
+      return closedWorld.commonMasks.doubleType;
     }
-    return super.computeTypeFromInputTypes(instruction, compiler);
+    return super.computeTypeFromInputTypes(instruction, compiler, closedWorld);
   }
 
   HInstruction newBuiltinVariant(
-      HInvokeDynamic instruction, Compiler compiler) {
-    JavaScriptBackend backend = compiler.backend;
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     return new HDivide(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, backend.doubleType);
+        instruction.selector, closedWorld.commonMasks.doubleType);
   }
 }
 
@@ -291,12 +293,11 @@
   const ModuloSpecializer();
 
   TypeMask computeTypeFromInputTypes(
-      HInvokeDynamic instruction, Compiler compiler) {
-    if (inputsArePositiveIntegers(instruction, compiler)) {
-      JavaScriptBackend backend = compiler.backend;
-      return backend.positiveIntType;
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
+    if (inputsArePositiveIntegers(instruction, closedWorld)) {
+      return closedWorld.commonMasks.positiveIntType;
     }
-    return super.computeTypeFromInputTypes(instruction, compiler);
+    return super.computeTypeFromInputTypes(instruction, compiler, closedWorld);
   }
 
   BinaryOperation operation(ConstantSystem constantSystem) {
@@ -304,7 +305,7 @@
   }
 
   HInstruction newBuiltinVariant(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     // Modulo cannot be mapped to the native operator (different semantics).
     // TODO(sra): For non-negative values we can use JavaScript's %.
     return null;
@@ -319,18 +320,20 @@
   }
 
   TypeMask computeTypeFromInputTypes(
-      HInvokeDynamic instruction, Compiler compiler) {
-    if (inputsArePositiveIntegers(instruction, compiler)) {
-      JavaScriptBackend backend = compiler.backend;
-      return backend.positiveIntType;
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
+    if (inputsArePositiveIntegers(instruction, closedWorld)) {
+      return closedWorld.commonMasks.positiveIntType;
     }
-    return super.computeTypeFromInputTypes(instruction, compiler);
+    return super.computeTypeFromInputTypes(instruction, compiler, closedWorld);
   }
 
   HInstruction newBuiltinVariant(
-      HInvokeDynamic instruction, Compiler compiler) {
-    return new HMultiply(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, computeTypeFromInputTypes(instruction, compiler));
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
+    return new HMultiply(
+        instruction.inputs[1],
+        instruction.inputs[2],
+        instruction.selector,
+        computeTypeFromInputTypes(instruction, compiler, closedWorld));
   }
 }
 
@@ -342,9 +345,12 @@
   }
 
   HInstruction newBuiltinVariant(
-      HInvokeDynamic instruction, Compiler compiler) {
-    return new HSubtract(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, computeTypeFromInputTypes(instruction, compiler));
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
+    return new HSubtract(
+        instruction.inputs[1],
+        instruction.inputs[2],
+        instruction.selector,
+        computeTypeFromInputTypes(instruction, compiler, closedWorld));
   }
 }
 
@@ -356,18 +362,17 @@
   }
 
   TypeMask computeTypeFromInputTypes(
-      HInvokeDynamic instruction, Compiler compiler) {
-    JavaScriptBackend backend = compiler.backend;
-    if (hasUint31Result(instruction, compiler)) {
-      return backend.uint31Type;
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
+    if (hasUint31Result(instruction, closedWorld)) {
+      return closedWorld.commonMasks.uint31Type;
     }
-    if (inputsArePositiveIntegers(instruction, compiler)) {
-      return backend.positiveIntType;
+    if (inputsArePositiveIntegers(instruction, closedWorld)) {
+      return closedWorld.commonMasks.positiveIntType;
     }
-    return super.computeTypeFromInputTypes(instruction, compiler);
+    return super.computeTypeFromInputTypes(instruction, compiler, closedWorld);
   }
 
-  bool isNotZero(HInstruction instruction, Compiler compiler) {
+  bool isNotZero(HInstruction instruction) {
     if (!instruction.isConstantInteger()) return false;
     HConstant rightConstant = instruction;
     IntConstantValue intConstant = rightConstant.constant;
@@ -375,7 +380,7 @@
     return count != 0;
   }
 
-  bool isTwoOrGreater(HInstruction instruction, Compiler compiler) {
+  bool isTwoOrGreater(HInstruction instruction) {
     if (!instruction.isConstantInteger()) return false;
     HConstant rightConstant = instruction;
     IntConstantValue intConstant = rightConstant.constant;
@@ -383,14 +388,14 @@
     return count >= 2;
   }
 
-  bool hasUint31Result(HInstruction instruction, Compiler compiler) {
+  bool hasUint31Result(HInstruction instruction, ClosedWorld closedWorld) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
-    if (right.isPositiveInteger(compiler)) {
-      if (left.isUInt31(compiler) && isNotZero(right, compiler)) {
+    if (right.isPositiveInteger(closedWorld)) {
+      if (left.isUInt31(closedWorld) && isNotZero(right)) {
         return true;
       }
-      if (left.isUInt32(compiler) && isTwoOrGreater(right, compiler)) {
+      if (left.isUInt32(closedWorld) && isTwoOrGreater(right)) {
         return true;
       }
     }
@@ -398,12 +403,12 @@
   }
 
   HInstruction tryConvertToBuiltin(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     HInstruction right = instruction.inputs[2];
-    if (isBuiltin(instruction, compiler)) {
-      if (right.isPositiveInteger(compiler) && isNotZero(right, compiler)) {
-        if (hasUint31Result(instruction, compiler)) {
-          return newBuiltinVariant(instruction, compiler);
+    if (isBuiltin(instruction, closedWorld)) {
+      if (right.isPositiveInteger(closedWorld) && isNotZero(right)) {
+        if (hasUint31Result(instruction, closedWorld)) {
+          return newBuiltinVariant(instruction, compiler, closedWorld);
         }
         // We can call _tdivFast because the rhs is a 32bit integer
         // and not 0, nor -1.
@@ -416,9 +421,12 @@
   }
 
   HInstruction newBuiltinVariant(
-      HInvokeDynamic instruction, Compiler compiler) {
-    return new HTruncatingDivide(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, computeTypeFromInputTypes(instruction, compiler));
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
+    return new HTruncatingDivide(
+        instruction.inputs[1],
+        instruction.inputs[2],
+        instruction.selector,
+        computeTypeFromInputTypes(instruction, compiler, closedWorld));
   }
 }
 
@@ -426,15 +434,14 @@
   const BinaryBitOpSpecializer();
 
   TypeMask computeTypeFromInputTypes(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     // All bitwise operations on primitive types either produce an
     // integer or throw an error.
     HInstruction left = instruction.inputs[1];
-    JavaScriptBackend backend = compiler.backend;
-    if (left.isPrimitiveOrNull(compiler)) {
-      return backend.uint32Type;
+    if (left.isPrimitiveOrNull(closedWorld)) {
+      return closedWorld.commonMasks.uint32Type;
     }
-    return super.computeTypeFromInputTypes(instruction, compiler);
+    return super.computeTypeFromInputTypes(instruction, compiler, closedWorld);
   }
 
   bool argumentLessThan32(HInstruction instruction) {
@@ -445,10 +452,10 @@
     return count >= 0 && count <= 31;
   }
 
-  bool isPositive(HInstruction instruction, Compiler compiler) {
+  bool isPositive(HInstruction instruction, ClosedWorld closedWorld) {
     // TODO: We should use the value range analysis. Currently, ranges
     // are discarded just after the analysis.
-    return instruction.isPositiveInteger(compiler);
+    return instruction.isPositiveInteger(closedWorld);
   }
 }
 
@@ -460,18 +467,18 @@
   }
 
   HInstruction tryConvertToBuiltin(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
-    if (left.isNumber(compiler)) {
+    if (left.isNumber(closedWorld)) {
       if (argumentLessThan32(right)) {
-        return newBuiltinVariant(instruction, compiler);
+        return newBuiltinVariant(instruction, compiler, closedWorld);
       }
       // Even if there is no builtin equivalent instruction, we know
       // the instruction does not have any side effect, and that it
       // can be GVN'ed.
       clearAllSideEffects(instruction);
-      if (isPositive(right, compiler)) {
+      if (isPositive(right, closedWorld)) {
         instruction.selector = renameToOptimizedSelector(
             '_shlPositive', instruction.selector, compiler);
       }
@@ -480,9 +487,12 @@
   }
 
   HInstruction newBuiltinVariant(
-      HInvokeDynamic instruction, Compiler compiler) {
-    return new HShiftLeft(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, computeTypeFromInputTypes(instruction, compiler));
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
+    return new HShiftLeft(
+        instruction.inputs[1],
+        instruction.inputs[2],
+        instruction.selector,
+        computeTypeFromInputTypes(instruction, compiler, closedWorld));
   }
 }
 
@@ -490,31 +500,31 @@
   const ShiftRightSpecializer();
 
   TypeMask computeTypeFromInputTypes(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     HInstruction left = instruction.inputs[1];
-    if (left.isUInt32(compiler)) return left.instructionType;
-    return super.computeTypeFromInputTypes(instruction, compiler);
+    if (left.isUInt32(closedWorld)) return left.instructionType;
+    return super.computeTypeFromInputTypes(instruction, compiler, closedWorld);
   }
 
   HInstruction tryConvertToBuiltin(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
-    if (left.isNumber(compiler)) {
-      if (argumentLessThan32(right) && isPositive(left, compiler)) {
-        return newBuiltinVariant(instruction, compiler);
+    if (left.isNumber(closedWorld)) {
+      if (argumentLessThan32(right) && isPositive(left, closedWorld)) {
+        return newBuiltinVariant(instruction, compiler, closedWorld);
       }
       // Even if there is no builtin equivalent instruction, we know
       // the instruction does not have any side effect, and that it
       // can be GVN'ed.
       clearAllSideEffects(instruction);
-      if (isPositive(right, compiler) && isPositive(left, compiler)) {
+      if (isPositive(right, closedWorld) && isPositive(left, closedWorld)) {
         instruction.selector = renameToOptimizedSelector(
             '_shrBothPositive', instruction.selector, compiler);
-      } else if (isPositive(left, compiler) && right.isNumber(compiler)) {
+      } else if (isPositive(left, closedWorld) && right.isNumber(closedWorld)) {
         instruction.selector = renameToOptimizedSelector(
             '_shrReceiverPositive', instruction.selector, compiler);
-      } else if (isPositive(right, compiler)) {
+      } else if (isPositive(right, closedWorld)) {
         instruction.selector = renameToOptimizedSelector(
             '_shrOtherPositive', instruction.selector, compiler);
       }
@@ -523,9 +533,12 @@
   }
 
   HInstruction newBuiltinVariant(
-      HInvokeDynamic instruction, Compiler compiler) {
-    return new HShiftRight(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, computeTypeFromInputTypes(instruction, compiler));
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
+    return new HShiftRight(
+        instruction.inputs[1],
+        instruction.inputs[2],
+        instruction.selector,
+        computeTypeFromInputTypes(instruction, compiler, closedWorld));
   }
 
   BinaryOperation operation(ConstantSystem constantSystem) {
@@ -541,20 +554,22 @@
   }
 
   TypeMask computeTypeFromInputTypes(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
-    JavaScriptBackend backend = compiler.backend;
-    if (left.isUInt31(compiler) && right.isUInt31(compiler)) {
-      return backend.uint31Type;
+    if (left.isUInt31(closedWorld) && right.isUInt31(closedWorld)) {
+      return closedWorld.commonMasks.uint31Type;
     }
-    return super.computeTypeFromInputTypes(instruction, compiler);
+    return super.computeTypeFromInputTypes(instruction, compiler, closedWorld);
   }
 
   HInstruction newBuiltinVariant(
-      HInvokeDynamic instruction, Compiler compiler) {
-    return new HBitOr(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, computeTypeFromInputTypes(instruction, compiler));
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
+    return new HBitOr(
+        instruction.inputs[1],
+        instruction.inputs[2],
+        instruction.selector,
+        computeTypeFromInputTypes(instruction, compiler, closedWorld));
   }
 }
 
@@ -566,21 +581,23 @@
   }
 
   TypeMask computeTypeFromInputTypes(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
-    JavaScriptBackend backend = compiler.backend;
-    if (left.isPrimitiveOrNull(compiler) &&
-        (left.isUInt31(compiler) || right.isUInt31(compiler))) {
-      return backend.uint31Type;
+    if (left.isPrimitiveOrNull(closedWorld) &&
+        (left.isUInt31(closedWorld) || right.isUInt31(closedWorld))) {
+      return closedWorld.commonMasks.uint31Type;
     }
-    return super.computeTypeFromInputTypes(instruction, compiler);
+    return super.computeTypeFromInputTypes(instruction, compiler, closedWorld);
   }
 
   HInstruction newBuiltinVariant(
-      HInvokeDynamic instruction, Compiler compiler) {
-    return new HBitAnd(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, computeTypeFromInputTypes(instruction, compiler));
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
+    return new HBitAnd(
+        instruction.inputs[1],
+        instruction.inputs[2],
+        instruction.selector,
+        computeTypeFromInputTypes(instruction, compiler, closedWorld));
   }
 }
 
@@ -592,20 +609,22 @@
   }
 
   TypeMask computeTypeFromInputTypes(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
-    JavaScriptBackend backend = compiler.backend;
-    if (left.isUInt31(compiler) && right.isUInt31(compiler)) {
-      return backend.uint31Type;
+    if (left.isUInt31(closedWorld) && right.isUInt31(closedWorld)) {
+      return closedWorld.commonMasks.uint31Type;
     }
-    return super.computeTypeFromInputTypes(instruction, compiler);
+    return super.computeTypeFromInputTypes(instruction, compiler, closedWorld);
   }
 
   HInstruction newBuiltinVariant(
-      HInvokeDynamic instruction, Compiler compiler) {
-    return new HBitXor(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, computeTypeFromInputTypes(instruction, compiler));
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
+    return new HBitXor(
+        instruction.inputs[1],
+        instruction.inputs[2],
+        instruction.selector,
+        computeTypeFromInputTypes(instruction, compiler, closedWorld));
   }
 }
 
@@ -613,47 +632,46 @@
   const RelationalSpecializer();
 
   TypeMask computeTypeFromInputTypes(
-      HInvokeDynamic instruction, Compiler compiler) {
-    JavaScriptBackend backend = compiler.backend;
-    if (instruction.inputs[1].isPrimitiveOrNull(compiler)) {
-      return backend.boolType;
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
+    if (instruction.inputs[1].isPrimitiveOrNull(closedWorld)) {
+      return closedWorld.commonMasks.boolType;
     }
-    return super.computeTypeFromInputTypes(instruction, compiler);
+    return super.computeTypeFromInputTypes(instruction, compiler, closedWorld);
   }
 
   HInstruction tryConvertToBuiltin(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
-    if (left.isNumber(compiler) && right.isNumber(compiler)) {
-      return newBuiltinVariant(instruction, compiler);
+    if (left.isNumber(closedWorld) && right.isNumber(closedWorld)) {
+      return newBuiltinVariant(instruction, closedWorld);
     }
     return null;
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction, Compiler compiler);
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, ClosedWorld closedWorld);
 }
 
 class EqualsSpecializer extends RelationalSpecializer {
   const EqualsSpecializer();
 
   HInstruction tryConvertToBuiltin(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
     TypeMask instructionType = left.instructionType;
-    if (right.isConstantNull() || left.isPrimitiveOrNull(compiler)) {
-      return newBuiltinVariant(instruction, compiler);
+    if (right.isConstantNull() || left.isPrimitiveOrNull(closedWorld)) {
+      return newBuiltinVariant(instruction, closedWorld);
     }
-    ClosedWorld world = compiler.closedWorld;
-    JavaScriptBackend backend = compiler.backend;
     Iterable<Element> matches =
-        world.allFunctions.filter(instruction.selector, instructionType);
+        closedWorld.allFunctions.filter(instruction.selector, instructionType);
     // This test relies the on `Object.==` and `Interceptor.==` always being
     // implemented because if the selector matches by subtype, it still will be
     // a regular object or an interceptor.
-    if (matches.every(backend.isDefaultEqualityImplementation)) {
-      return newBuiltinVariant(instruction, compiler);
+    if (matches
+        .every(closedWorld.backendClasses.isDefaultEqualityImplementation)) {
+      return newBuiltinVariant(instruction, closedWorld);
     }
     return null;
   }
@@ -663,10 +681,9 @@
   }
 
   HInstruction newBuiltinVariant(
-      HInvokeDynamic instruction, Compiler compiler) {
-    JavaScriptBackend backend = compiler.backend;
+      HInvokeDynamic instruction, ClosedWorld closedWorld) {
     return new HIdentity(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, backend.boolType);
+        instruction.selector, closedWorld.commonMasks.boolType);
   }
 }
 
@@ -678,10 +695,9 @@
   }
 
   HInstruction newBuiltinVariant(
-      HInvokeDynamic instruction, Compiler compiler) {
-    JavaScriptBackend backend = compiler.backend;
+      HInvokeDynamic instruction, ClosedWorld closedWorld) {
     return new HLess(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, backend.boolType);
+        instruction.selector, closedWorld.commonMasks.boolType);
   }
 }
 
@@ -693,10 +709,9 @@
   }
 
   HInstruction newBuiltinVariant(
-      HInvokeDynamic instruction, Compiler compiler) {
-    JavaScriptBackend backend = compiler.backend;
+      HInvokeDynamic instruction, ClosedWorld closedWorld) {
     return new HGreater(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, backend.boolType);
+        instruction.selector, closedWorld.commonMasks.boolType);
   }
 }
 
@@ -708,10 +723,9 @@
   }
 
   HInstruction newBuiltinVariant(
-      HInvokeDynamic instruction, Compiler compiler) {
-    JavaScriptBackend backend = compiler.backend;
+      HInvokeDynamic instruction, ClosedWorld closedWorld) {
     return new HGreaterEqual(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, backend.boolType);
+        instruction.selector, closedWorld.commonMasks.boolType);
   }
 }
 
@@ -723,10 +737,9 @@
   }
 
   HInstruction newBuiltinVariant(
-      HInvokeDynamic instruction, Compiler compiler) {
-    JavaScriptBackend backend = compiler.backend;
+      HInvokeDynamic instruction, ClosedWorld closedWorld) {
     return new HLessEqual(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, backend.boolType);
+        instruction.selector, closedWorld.commonMasks.boolType);
   }
 }
 
@@ -738,11 +751,11 @@
   }
 
   HInstruction tryConvertToBuiltin(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     // TODO(sra): Implement a builtin HCodeUnitAt instruction and the same index
     // bounds checking optimizations as for HIndex.
     HInstruction receiver = instruction.getDartReceiver(compiler);
-    if (receiver.isStringOrNull(compiler)) {
+    if (receiver.isStringOrNull(closedWorld)) {
       // Even if there is no builtin equivalent instruction, we know
       // String.codeUnitAt does not have any side effect (other than throwing),
       // and that it can be GVN'ed.
@@ -760,9 +773,9 @@
   }
 
   HInstruction tryConvertToBuiltin(
-      HInvokeDynamic instruction, Compiler compiler) {
+      HInvokeDynamic instruction, Compiler compiler, ClosedWorld closedWorld) {
     HInstruction receiver = instruction.getDartReceiver(compiler);
-    if (receiver.isNumberOrNull(compiler)) {
+    if (receiver.isNumberOrNull(closedWorld)) {
       // Even if there is no builtin equivalent instruction, we know the
       // instruction does not have any side effect, and that it can be GVN'ed.
       clearAllSideEffects(instruction);
diff --git a/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart b/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart
index 1343be0..4c2309e 100644
--- a/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart
+++ b/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart
@@ -67,6 +67,7 @@
   TreeElements get elements => _resolvedAst.elements;
   DiagnosticReporter get reporter => _compiler.reporter;
   Element get _target => _resolvedAst.element;
+  ClosedWorld get _closedWorld => _compiler.closedWorld;
 
   GlobalTypeInferenceElementResult _resultOf(Element e) =>
       _compiler.globalInference.results.resultOf(e);
@@ -127,7 +128,7 @@
 
   bool getCanThrow(ir.Node procedure) {
     FunctionElement function = getElement(procedure);
-    return !_compiler.closedWorld.getCannotThrow(function);
+    return !_closedWorld.getCannotThrow(function);
   }
 
   TypeMask returnTypeOf(ir.Member node) {
@@ -136,7 +137,7 @@
   }
 
   SideEffects getSideEffects(ir.Node node) {
-    return _compiler.closedWorld.getSideEffectsOfElement(getElement(node));
+    return _closedWorld.getSideEffectsOfElement(getElement(node));
   }
 
   CallStructure getCallStructure(ir.Arguments arguments) {
@@ -198,11 +199,14 @@
     return new Selector.setter(name);
   }
 
-  TypeMask typeOfInvocation(ir.Expression send) {
+  TypeMask typeOfInvocation(ir.MethodInvocation send) {
     ast.Node operatorNode = kernel.nodeToAstOperator[send];
     if (operatorNode != null) {
       return _resultOf(_target).typeOfOperator(operatorNode);
     }
+    if (send.name.name == '[]=') {
+      return _compiler.closedWorld.commonMasks.dynamicType;
+    }
     return _resultOf(_target).typeOfSend(getNode(send));
   }
 
@@ -211,7 +215,7 @@
   }
 
   TypeMask typeOfSet(ir.PropertySet setter) {
-    return _compiler.closedWorld.commonMasks.dynamicType;
+    return _closedWorld.commonMasks.dynamicType;
   }
 
   TypeMask typeOfSend(ir.Expression send) {
@@ -223,10 +227,10 @@
     ast.Node node = getNodeOrNull(listLiteral);
     if (node == null) {
       assertNodeIsSynthetic(listLiteral);
-      return _compiler.closedWorld.commonMasks.growableListType;
+      return _closedWorld.commonMasks.growableListType;
     }
     return _resultOf(owner).typeOfNewList(getNode(listLiteral)) ??
-        _compiler.closedWorld.commonMasks.dynamicType;
+        _closedWorld.commonMasks.dynamicType;
   }
 
   TypeMask typeOfIterator(ir.ForInStatement forInStatement) {
@@ -243,24 +247,24 @@
 
   bool isJsIndexableIterator(ir.ForInStatement forInStatement) {
     TypeMask mask = typeOfIterator(forInStatement);
-    ClosedWorld closedWorld = _compiler.closedWorld;
     return mask != null &&
-        mask.satisfies(_backend.helpers.jsIndexableClass, closedWorld) &&
+        mask.satisfies(_backend.helpers.jsIndexableClass, _closedWorld) &&
         // String is indexable but not iterable.
-        !mask.satisfies(_backend.helpers.jsStringClass, closedWorld);
+        !mask.satisfies(_backend.helpers.jsStringClass, _closedWorld);
   }
 
   bool isFixedLength(TypeMask mask) {
-    ClosedWorld closedWorld = _compiler.closedWorld;
     JavaScriptBackend backend = _compiler.backend;
     if (mask.isContainer && (mask as ContainerTypeMask).length != null) {
       // A container on which we have inferred the length.
       return true;
     }
     // TODO(sra): Recognize any combination of fixed length indexables.
-    if (mask.containsOnly(backend.helpers.jsFixedArrayClass) ||
-        mask.containsOnly(backend.helpers.jsUnmodifiableArrayClass) ||
-        mask.containsOnlyString(closedWorld) ||
+    if (mask.containsOnly(
+            _closedWorld.backendClasses.fixedListImplementation) ||
+        mask.containsOnly(
+            _closedWorld.backendClasses.constListImplementation) ||
+        mask.containsOnlyString(_closedWorld) ||
         backend.isTypedArray(mask)) {
       return true;
     }
@@ -386,6 +390,16 @@
   TypeMask get assertThrowReturnType => TypeMaskFactory
       .inferredReturnTypeForElement(_backend.helpers.assertThrow, _compiler);
 
+  ir.Procedure get runtimeTypeToString =>
+      kernel.functions[_backend.helpers.runtimeTypeToString];
+
+  ir.Procedure get createRuntimeType =>
+      kernel.functions[_backend.helpers.createRuntimeType];
+
+  TypeMask get createRuntimeTypeReturnType =>
+      TypeMaskFactory.inferredReturnTypeForElement(
+          _backend.helpers.createRuntimeType, _compiler);
+
   ir.Class get objectClass => kernel.classes[_compiler.coreClasses.objectClass];
 
   ir.Procedure get currentIsolate =>
diff --git a/pkg/compiler/lib/src/ssa/kernel_string_builder.dart b/pkg/compiler/lib/src/ssa/kernel_string_builder.dart
index 38a3f63..ddef20a 100644
--- a/pkg/compiler/lib/src/ssa/kernel_string_builder.dart
+++ b/pkg/compiler/lib/src/ssa/kernel_string_builder.dart
@@ -38,7 +38,7 @@
     //      conversions.
     //   2. The value can be primitive, because the library stringifier has
     //      fast-path code for most primitives.
-    if (expression.canBePrimitive(compiler)) {
+    if (expression.canBePrimitive(builder.closedWorld)) {
       append(stringify(expression));
       return;
     }
@@ -62,14 +62,14 @@
 
   HInstruction concat(HInstruction left, HInstruction right) {
     HInstruction instruction =
-        new HStringConcat(left, right, builder.backend.stringType);
+        new HStringConcat(left, right, builder.commonMasks.stringType);
     builder.add(instruction);
     return instruction;
   }
 
   HInstruction stringify(HInstruction expression) {
     HInstruction instruction =
-        new HStringify(expression, builder.backend.stringType);
+        new HStringify(expression, builder.commonMasks.stringType);
     builder.add(instruction);
     return instruction;
   }
diff --git a/pkg/compiler/lib/src/ssa/locals_handler.dart b/pkg/compiler/lib/src/ssa/locals_handler.dart
index 0eca03a..d6e6745 100644
--- a/pkg/compiler/lib/src/ssa/locals_handler.dart
+++ b/pkg/compiler/lib/src/ssa/locals_handler.dart
@@ -70,6 +70,10 @@
                 ? null
                 : instanceType;
 
+  ClosedWorld get closedWorld => builder.closedWorld;
+
+  CommonMasks get commonMasks => closedWorld.commonMasks;
+
   /// Substituted type variables occurring in [type] into the context of
   /// [contextClass].
   DartType substInContext(DartType type) {
@@ -111,9 +115,8 @@
   HInstruction createBox() {
     // TODO(floitsch): Clean up this hack. Should we create a box-object by
     // just creating an empty object literal?
-    JavaScriptBackend backend = _compiler.backend;
     HInstruction box = new HForeignCode(
-        js.js.parseForeignJS('{}'), backend.nonNullType, <HInstruction>[],
+        js.js.parseForeignJS('{}'), commonMasks.nonNullType, <HInstruction>[],
         nativeBehavior: native.NativeBehavior.PURE_ALLOCATION);
     builder.add(box);
     return box;
@@ -131,8 +134,7 @@
     if (element != null && element.isGenerativeConstructorBody) {
       // The box is passed as a parameter to a generative
       // constructor body.
-      JavaScriptBackend backend = _compiler.backend;
-      box = builder.addParameter(scopeData.boxElement, backend.nonNullType);
+      box = builder.addParameter(scopeData.boxElement, commonMasks.nonNullType);
     } else {
       box = createBox();
     }
@@ -222,7 +224,7 @@
     if (closureData.isClosure) {
       // Inside closure redirect references to itself to [:this:].
       HThis thisInstruction =
-          new HThis(closureData.thisLocal, backend.nonNullType);
+          new HThis(closureData.thisLocal, commonMasks.nonNullType);
       builder.graph.thisInstruction = thisInstruction;
       builder.graph.entry.addAtEntry(thisInstruction);
       updateLocal(closureData.closureElement, thisInstruction);
@@ -267,7 +269,6 @@
           new SyntheticLocal('receiver', executableContext);
       // Unlike `this`, receiver is nullable since direct calls to generative
       // constructor call the constructor with `null`.
-      ClosedWorld closedWorld = _compiler.closedWorld;
       HParameterValue value =
           new HParameterValue(parameter, new TypeMask.exact(cls, closedWorld));
       builder.graph.explicitReceiverParameter = value;
@@ -325,7 +326,7 @@
       ClosureFieldElement redirect = redirectionMapping[local];
       HInstruction receiver = readLocal(closureData.closureElement);
       TypeMask type = local is BoxLocal
-          ? (_compiler.backend as JavaScriptBackend).nonNullType
+          ? commonMasks.nonNullType
           : getTypeOfCapturedVariable(redirect);
       HInstruction fieldGet = new HFieldGet(redirect, receiver, type);
       builder.add(fieldGet);
@@ -346,10 +347,7 @@
       assert(isUsedInTryOrGenerator(local));
       HLocalValue localValue = getLocal(local);
       HInstruction instruction = new HLocalGet(
-          local,
-          localValue,
-          (_compiler.backend as JavaScriptBackend).dynamicType,
-          sourceInformation);
+          local, localValue, commonMasks.dynamicType, sourceInformation);
       builder.add(instruction);
       return instruction;
     }
@@ -377,8 +375,7 @@
     }
 
     return activationVariables.putIfAbsent(local, () {
-      JavaScriptBackend backend = _compiler.backend;
-      HLocalValue localValue = new HLocalValue(local, backend.nonNullType)
+      HLocalValue localValue = new HLocalValue(local, commonMasks.nonNullType)
         ..sourceInformation = sourceInformation;
       builder.graph.entry.addAtExit(localValue);
       return localValue;
@@ -489,7 +486,7 @@
         // We know 'this' cannot be modified.
         if (local != closureData.thisLocal) {
           HPhi phi =
-              new HPhi.singleInput(local, instruction, backend.dynamicType);
+              new HPhi.singleInput(local, instruction, commonMasks.dynamicType);
           loopEntry.addPhi(phi);
           directLocals[local] = phi;
         } else {
@@ -546,7 +543,6 @@
     // variable cannot be alive outside the block. Note: this is only
     // true for nodes where we do joins.
     Map<Local, HInstruction> joinedLocals = new Map<Local, HInstruction>();
-    JavaScriptBackend backend = _compiler.backend;
     otherLocals.directLocals.forEach((Local local, HInstruction instruction) {
       // We know 'this' cannot be modified.
       if (local == closureData.thisLocal) {
@@ -558,8 +554,8 @@
         if (identical(instruction, mine)) {
           joinedLocals[local] = instruction;
         } else {
-          HInstruction phi = new HPhi.manyInputs(
-              local, <HInstruction>[mine, instruction], backend.dynamicType);
+          HInstruction phi = new HPhi.manyInputs(local,
+              <HInstruction>[mine, instruction], commonMasks.dynamicType);
           joinBlock.addPhi(phi);
           joinedLocals[local] = phi;
         }
@@ -579,10 +575,9 @@
     if (localsHandlers.length == 1) return localsHandlers[0];
     Map<Local, HInstruction> joinedLocals = new Map<Local, HInstruction>();
     HInstruction thisValue = null;
-    JavaScriptBackend backend = _compiler.backend;
     directLocals.forEach((Local local, HInstruction instruction) {
       if (local != closureData.thisLocal) {
-        HPhi phi = new HPhi.noInputs(local, backend.dynamicType);
+        HPhi phi = new HPhi.noInputs(local, commonMasks.dynamicType);
         joinedLocals[local] = phi;
         joinBlock.addPhi(phi);
       } else {
@@ -625,17 +620,14 @@
     if (result == null) {
       ThisLocal local = closureData.thisLocal;
       ClassElement cls = local.enclosingClass;
-      ClosedWorld closedWorld = _compiler.closedWorld;
       if (closedWorld.isUsedAsMixin(cls)) {
         // If the enclosing class is used as a mixin, [:this:] can be
         // of the class that mixins the enclosing class. These two
         // classes do not have a subclass relationship, so, for
         // simplicity, we mark the type as an interface type.
-        result =
-            new TypeMask.nonNullSubtype(cls.declaration, _compiler.closedWorld);
+        result = new TypeMask.nonNullSubtype(cls.declaration, closedWorld);
       } else {
-        result = new TypeMask.nonNullSubclass(
-            cls.declaration, _compiler.closedWorld);
+        result = new TypeMask.nonNullSubclass(cls.declaration, closedWorld);
       }
       cachedTypeOfThis = result;
     }
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
index 712ff29..bbd214c 100644
--- a/pkg/compiler/lib/src/ssa/nodes.dart
+++ b/pkg/compiler/lib/src/ssa/nodes.dart
@@ -4,6 +4,7 @@
 
 import '../closure.dart';
 import '../common.dart';
+import '../common/backend_api.dart' show BackendClasses;
 import '../compiler.dart' show Compiler;
 import '../constants/constant_system.dart';
 import '../constants/values.dart';
@@ -949,203 +950,168 @@
         typeMask.satisfies(cls, closedWorld);
   }
 
-  bool canBePrimitive(Compiler compiler) {
-    return canBePrimitiveNumber(compiler) ||
-        canBePrimitiveArray(compiler) ||
-        canBePrimitiveBoolean(compiler) ||
-        canBePrimitiveString(compiler) ||
+  bool canBePrimitive(ClosedWorld closedWorld) {
+    return canBePrimitiveNumber(closedWorld) ||
+        canBePrimitiveArray(closedWorld) ||
+        canBePrimitiveBoolean(closedWorld) ||
+        canBePrimitiveString(closedWorld) ||
         isNull();
   }
 
-  bool canBePrimitiveNumber(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
-    JavaScriptBackend backend = compiler.backend;
-    BackendHelpers helpers = backend.helpers;
+  bool canBePrimitiveNumber(ClosedWorld closedWorld) {
+    BackendClasses backendClasses = closedWorld.backendClasses;
     // TODO(sra): It should be possible to test only jsDoubleClass and
     // jsUInt31Class, since all others are superclasses of these two.
-    return containsType(instructionType, helpers.jsNumberClass, closedWorld) ||
-        containsType(instructionType, helpers.jsIntClass, closedWorld) ||
+    return containsType(
+            instructionType, backendClasses.numImplementation, closedWorld) ||
         containsType(
-            instructionType, helpers.jsPositiveIntClass, closedWorld) ||
-        containsType(instructionType, helpers.jsUInt32Class, closedWorld) ||
-        containsType(instructionType, helpers.jsUInt31Class, closedWorld) ||
-        containsType(instructionType, helpers.jsDoubleClass, closedWorld);
+            instructionType, backendClasses.intImplementation, closedWorld) ||
+        containsType(instructionType, backendClasses.positiveIntImplementation,
+            closedWorld) ||
+        containsType(instructionType, backendClasses.uint32Implementation,
+            closedWorld) ||
+        containsType(instructionType, backendClasses.uint31Implementation,
+            closedWorld) ||
+        containsType(
+            instructionType, backendClasses.doubleImplementation, closedWorld);
   }
 
-  bool canBePrimitiveBoolean(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
-    JavaScriptBackend backend = compiler.backend;
-    BackendHelpers helpers = backend.helpers;
-    return containsType(instructionType, helpers.jsBoolClass, closedWorld);
+  bool canBePrimitiveBoolean(ClosedWorld closedWorld) {
+    return containsType(instructionType,
+        closedWorld.backendClasses.boolImplementation, closedWorld);
   }
 
-  bool canBePrimitiveArray(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
-    JavaScriptBackend backend = compiler.backend;
-    BackendHelpers helpers = backend.helpers;
-    return containsType(instructionType, helpers.jsArrayClass, closedWorld) ||
-        containsType(instructionType, helpers.jsFixedArrayClass, closedWorld) ||
-        containsType(
-            instructionType, helpers.jsExtendableArrayClass, closedWorld) ||
-        containsType(
-            instructionType, helpers.jsUnmodifiableArrayClass, closedWorld);
+  bool canBePrimitiveArray(ClosedWorld closedWorld) {
+    BackendClasses backendClasses = closedWorld.backendClasses;
+    return containsType(
+            instructionType, backendClasses.listImplementation, closedWorld) ||
+        containsType(instructionType, backendClasses.fixedListImplementation,
+            closedWorld) ||
+        containsType(instructionType, backendClasses.growableListImplementation,
+            closedWorld) ||
+        containsType(instructionType, backendClasses.constListImplementation,
+            closedWorld);
   }
 
-  bool isIndexablePrimitive(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
-    JavaScriptBackend backend = compiler.backend;
-    BackendHelpers helpers = backend.helpers;
+  bool isIndexablePrimitive(ClosedWorld closedWorld) {
     return instructionType.containsOnlyString(closedWorld) ||
-        isInstanceOf(instructionType, helpers.jsIndexableClass, closedWorld);
+        isInstanceOf(instructionType,
+            closedWorld.backendClasses.indexableImplementation, closedWorld);
   }
 
-  bool isFixedArray(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
-    JavaScriptBackend backend = compiler.backend;
-    BackendHelpers helpers = backend.helpers;
+  bool isFixedArray(ClosedWorld closedWorld) {
+    BackendClasses backendClasses = closedWorld.backendClasses;
     // TODO(sra): Recognize the union of these types as well.
-    return containsOnlyType(
-            instructionType, helpers.jsFixedArrayClass, closedWorld) ||
-        containsOnlyType(
-            instructionType, helpers.jsUnmodifiableArrayClass, closedWorld);
+    return containsOnlyType(instructionType,
+            backendClasses.fixedListImplementation, closedWorld) ||
+        containsOnlyType(instructionType,
+            backendClasses.constListImplementation, closedWorld);
   }
 
-  bool isExtendableArray(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
-    JavaScriptBackend backend = compiler.backend;
-    BackendHelpers helpers = backend.helpers;
-    return containsOnlyType(
-        instructionType, helpers.jsExtendableArrayClass, closedWorld);
+  bool isExtendableArray(ClosedWorld closedWorld) {
+    return containsOnlyType(instructionType,
+        closedWorld.backendClasses.growableListImplementation, closedWorld);
   }
 
-  bool isMutableArray(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
-    JavaScriptBackend backend = compiler.backend;
-    BackendHelpers helpers = backend.helpers;
-    return isInstanceOf(
-        instructionType, helpers.jsMutableArrayClass, closedWorld);
+  bool isMutableArray(ClosedWorld closedWorld) {
+    return isInstanceOf(instructionType,
+        closedWorld.backendClasses.mutableListImplementation, closedWorld);
   }
 
-  bool isReadableArray(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
-    JavaScriptBackend backend = compiler.backend;
-    BackendHelpers helpers = backend.helpers;
-    return isInstanceOf(instructionType, helpers.jsArrayClass, closedWorld);
+  bool isReadableArray(ClosedWorld closedWorld) {
+    return isInstanceOf(instructionType,
+        closedWorld.backendClasses.listImplementation, closedWorld);
   }
 
-  bool isMutableIndexable(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
-    JavaScriptBackend backend = compiler.backend;
-    BackendHelpers helpers = backend.helpers;
-    return isInstanceOf(
-        instructionType, helpers.jsMutableIndexableClass, closedWorld);
+  bool isMutableIndexable(ClosedWorld closedWorld) {
+    return isInstanceOf(instructionType,
+        closedWorld.backendClasses.mutableIndexableImplementation, closedWorld);
   }
 
-  bool isArray(Compiler compiler) => isReadableArray(compiler);
+  bool isArray(ClosedWorld closedWorld) => isReadableArray(closedWorld);
 
-  bool canBePrimitiveString(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
-    JavaScriptBackend backend = compiler.backend;
-    BackendHelpers helpers = backend.helpers;
-    return containsType(instructionType, helpers.jsStringClass, closedWorld);
+  bool canBePrimitiveString(ClosedWorld closedWorld) {
+    return containsType(instructionType,
+        closedWorld.backendClasses.stringImplementation, closedWorld);
   }
 
-  bool isInteger(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
+  bool isInteger(ClosedWorld closedWorld) {
     return instructionType.containsOnlyInt(closedWorld) &&
         !instructionType.isNullable;
   }
 
-  bool isUInt32(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
-    JavaScriptBackend backend = compiler.backend;
-    BackendHelpers helpers = backend.helpers;
+  bool isUInt32(ClosedWorld closedWorld) {
     return !instructionType.isNullable &&
-        isInstanceOf(instructionType, helpers.jsUInt32Class, closedWorld);
+        isInstanceOf(instructionType,
+            closedWorld.backendClasses.uint32Implementation, closedWorld);
   }
 
-  bool isUInt31(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
-    JavaScriptBackend backend = compiler.backend;
-    BackendHelpers helpers = backend.helpers;
+  bool isUInt31(ClosedWorld closedWorld) {
     return !instructionType.isNullable &&
-        isInstanceOf(instructionType, helpers.jsUInt31Class, closedWorld);
+        isInstanceOf(instructionType,
+            closedWorld.backendClasses.uint31Implementation, closedWorld);
   }
 
-  bool isPositiveInteger(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
-    JavaScriptBackend backend = compiler.backend;
-    BackendHelpers helpers = backend.helpers;
+  bool isPositiveInteger(ClosedWorld closedWorld) {
     return !instructionType.isNullable &&
-        isInstanceOf(instructionType, helpers.jsPositiveIntClass, closedWorld);
+        isInstanceOf(instructionType,
+            closedWorld.backendClasses.positiveIntImplementation, closedWorld);
   }
 
-  bool isPositiveIntegerOrNull(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
-    JavaScriptBackend backend = compiler.backend;
-    BackendHelpers helpers = backend.helpers;
-    return isInstanceOf(
-        instructionType, helpers.jsPositiveIntClass, closedWorld);
+  bool isPositiveIntegerOrNull(ClosedWorld closedWorld) {
+    return isInstanceOf(instructionType,
+        closedWorld.backendClasses.positiveIntImplementation, closedWorld);
   }
 
-  bool isIntegerOrNull(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
+  bool isIntegerOrNull(ClosedWorld closedWorld) {
     return instructionType.containsOnlyInt(closedWorld);
   }
 
-  bool isNumber(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
+  bool isNumber(ClosedWorld closedWorld) {
     return instructionType.containsOnlyNum(closedWorld) &&
         !instructionType.isNullable;
   }
 
-  bool isNumberOrNull(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
+  bool isNumberOrNull(ClosedWorld closedWorld) {
     return instructionType.containsOnlyNum(closedWorld);
   }
 
-  bool isDouble(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
+  bool isDouble(ClosedWorld closedWorld) {
     return instructionType.containsOnlyDouble(closedWorld) &&
         !instructionType.isNullable;
   }
 
-  bool isDoubleOrNull(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
+  bool isDoubleOrNull(ClosedWorld closedWorld) {
     return instructionType.containsOnlyDouble(closedWorld);
   }
 
-  bool isBoolean(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
+  bool isBoolean(ClosedWorld closedWorld) {
     return instructionType.containsOnlyBool(closedWorld) &&
         !instructionType.isNullable;
   }
 
-  bool isBooleanOrNull(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
+  bool isBooleanOrNull(ClosedWorld closedWorld) {
     return instructionType.containsOnlyBool(closedWorld);
   }
 
-  bool isString(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
+  bool isString(ClosedWorld closedWorld) {
     return instructionType.containsOnlyString(closedWorld) &&
         !instructionType.isNullable;
   }
 
-  bool isStringOrNull(Compiler compiler) {
-    ClosedWorld closedWorld = compiler.closedWorld;
+  bool isStringOrNull(ClosedWorld closedWorld) {
     return instructionType.containsOnlyString(closedWorld);
   }
 
-  bool isPrimitive(Compiler compiler) {
-    return (isPrimitiveOrNull(compiler) && !instructionType.isNullable) ||
+  bool isPrimitive(ClosedWorld closedWorld) {
+    return (isPrimitiveOrNull(closedWorld) && !instructionType.isNullable) ||
         isNull();
   }
 
-  bool isPrimitiveOrNull(Compiler compiler) {
-    return isIndexablePrimitive(compiler) ||
-        isNumberOrNull(compiler) ||
-        isBooleanOrNull(compiler) ||
+  bool isPrimitiveOrNull(ClosedWorld closedWorld) {
+    return isIndexablePrimitive(closedWorld) ||
+        isNumberOrNull(closedWorld) ||
+        isBooleanOrNull(closedWorld) ||
         isNull();
   }
 
@@ -1364,7 +1330,7 @@
     return false;
   }
 
-  HInstruction convertType(Compiler compiler, DartType type, int kind) {
+  HInstruction convertType(ClosedWorld closedWorld, DartType type, int kind) {
     if (type == null) return this;
     type = type.unaliased;
     // Only the builder knows how to create [HTypeConversion]
@@ -1374,19 +1340,20 @@
     assert(type.treatAsRaw || type.isFunctionType);
     if (type.isDynamic) return this;
     if (type.isObject) return this;
-    JavaScriptBackend backend = compiler.backend;
     if (type.isVoid || type.isFunctionType || type.isMalformed) {
-      return new HTypeConversion(type, kind, backend.dynamicType, this);
+      return new HTypeConversion(
+          type, kind, closedWorld.commonMasks.dynamicType, this);
     }
     assert(type.isInterfaceType);
     if (kind == HTypeConversion.BOOLEAN_CONVERSION_CHECK) {
       // Boolean conversion checks work on non-nullable booleans.
-      return new HTypeConversion(type, kind, backend.boolType, this);
+      return new HTypeConversion(
+          type, kind, closedWorld.commonMasks.boolType, this);
     } else if (kind == HTypeConversion.CHECKED_MODE_CHECK && !type.treatAsRaw) {
       throw 'creating compound check to $type (this = ${this})';
     } else {
       Entity cls = type.element;
-      TypeMask subtype = new TypeMask.subtype(cls, compiler.closedWorld);
+      TypeMask subtype = new TypeMask.subtype(cls, closedWorld);
       return new HTypeConversion(type, kind, subtype, this);
     }
   }
@@ -1412,8 +1379,8 @@
   HInstruction get value => inputs[0];
 
   @override
-  HInstruction convertType(Compiler compiler, DartType type, int kind) {
-    HInstruction converted = value.convertType(compiler, type, kind);
+  HInstruction convertType(ClosedWorld closedWorld, DartType type, int kind) {
+    HInstruction converted = value.convertType(closedWorld, type, kind);
     if (converted == value) return this;
     HTypeConversion conversion = converted;
     conversion.inputs[0] = this;
@@ -2862,7 +2829,7 @@
   HInstruction get checkedInput =>
       usesMethodOnType ? inputs[1] : super.checkedInput;
 
-  HInstruction convertType(Compiler compiler, DartType type, int kind) {
+  HInstruction convertType(ClosedWorld closedWorld, DartType type, int kind) {
     if (typeExpression == type) {
       // Don't omit a boolean conversion (which doesn't allow `null`) unless
       // this type conversion is already a boolean conversion.
@@ -2870,7 +2837,7 @@
         return this;
       }
     }
-    return super.convertType(compiler, type, kind);
+    return super.convertType(closedWorld, type, kind);
   }
 
   bool get isCheckedModeCheck {
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
index de90a81..c528667 100644
--- a/pkg/compiler/lib/src/ssa/optimize.dart
+++ b/pkg/compiler/lib/src/ssa/optimize.dart
@@ -40,6 +40,7 @@
         super(backend.compiler.measurer);
   String get name => 'SSA optimizer';
   Compiler get compiler => backend.compiler;
+  ClosedWorld get closedWorld => compiler.closedWorld;
   Map<HInstruction, Range> ranges = <HInstruction, Range>{};
 
   void optimize(CodegenWorkItem work, HGraph graph) {
@@ -59,16 +60,18 @@
         // Run trivial instruction simplification first to optimize
         // some patterns useful for type conversion.
         new SsaInstructionSimplifier(constantSystem, backend, this, registry),
-        new SsaTypeConversionInserter(compiler),
+        new SsaTypeConversionInserter(closedWorld),
         new SsaRedundantPhiEliminator(),
         new SsaDeadPhiEliminator(),
         new SsaTypePropagator(compiler),
         // After type propagation, more instructions can be
         // simplified.
         new SsaInstructionSimplifier(constantSystem, backend, this, registry),
-        new SsaCheckInserter(trustPrimitives, backend, boundsChecked),
+        new SsaCheckInserter(
+            trustPrimitives, backend, closedWorld, boundsChecked),
         new SsaInstructionSimplifier(constantSystem, backend, this, registry),
-        new SsaCheckInserter(trustPrimitives, backend, boundsChecked),
+        new SsaCheckInserter(
+            trustPrimitives, backend, closedWorld, boundsChecked),
         new SsaTypePropagator(compiler),
         // Run a dead code eliminator before LICM because dead
         // interceptors are often in the way of LICM'able instructions.
@@ -86,7 +89,8 @@
         // Previous optimizations may have generated new
         // opportunities for instruction simplification.
         new SsaInstructionSimplifier(constantSystem, backend, this, registry),
-        new SsaCheckInserter(trustPrimitives, backend, boundsChecked),
+        new SsaCheckInserter(
+            trustPrimitives, backend, closedWorld, boundsChecked),
       ];
       phases.forEach(runPhase);
 
@@ -105,7 +109,8 @@
           new SsaCodeMotion(),
           new SsaValueRangeAnalyzer(compiler, constantSystem, this),
           new SsaInstructionSimplifier(constantSystem, backend, this, registry),
-          new SsaCheckInserter(trustPrimitives, backend, boundsChecked),
+          new SsaCheckInserter(
+              trustPrimitives, backend, closedWorld, boundsChecked),
           new SsaSimplifyInterceptors(compiler, constantSystem, work.element),
           new SsaDeadCodeEliminator(compiler, this),
         ];
@@ -167,6 +172,8 @@
 
   CoreClasses get coreClasses => compiler.coreClasses;
 
+  ClosedWorld get closedWorld => compiler.closedWorld;
+
   BackendHelpers get helpers => backend.helpers;
 
   void visitGraph(HGraph visitee) {
@@ -187,12 +194,12 @@
         // might be that an operation thought to return double, can be
         // simplified to an int. For example:
         // `2.5 * 10`.
-        if (!(replacement.isNumberOrNull(compiler) &&
-            instruction.isNumberOrNull(compiler))) {
+        if (!(replacement.isNumberOrNull(closedWorld) &&
+            instruction.isNumberOrNull(closedWorld))) {
           // If we can replace [instruction] with [replacement], then
           // [replacement]'s type can be narrowed.
           TypeMask newType = replacement.instructionType
-              .intersection(instruction.instructionType, compiler.closedWorld);
+              .intersection(instruction.instructionType, closedWorld);
           replacement.instructionType = newType;
         }
 
@@ -275,7 +282,7 @@
     List<HInstruction> inputs = node.inputs;
     assert(inputs.length == 1);
     HInstruction input = inputs[0];
-    if (input.isBoolean(compiler)) return input;
+    if (input.isBoolean(closedWorld)) return input;
 
     // If the code is unreachable, remove the HBoolify.  This can happen when
     // there is a throw expression in a short-circuit conditional.  Removing the
@@ -285,7 +292,7 @@
 
     // All values that cannot be 'true' are boolified to false.
     TypeMask mask = input.instructionType;
-    if (!mask.contains(helpers.jsBoolClass, compiler.closedWorld)) {
+    if (!mask.contains(helpers.jsBoolClass, closedWorld)) {
       return graph.addConstantBool(false, compiler);
     }
     return node;
@@ -322,7 +329,7 @@
 
   HInstruction tryOptimizeLengthInterceptedGetter(HInvokeDynamic node) {
     HInstruction actualReceiver = node.inputs[1];
-    if (actualReceiver.isIndexablePrimitive(compiler)) {
+    if (actualReceiver.isIndexablePrimitive(closedWorld)) {
       if (actualReceiver.isConstantString()) {
         HConstant constantInput = actualReceiver;
         StringConstantValue constant = constantInput.constant;
@@ -335,15 +342,14 @@
       MemberElement element = helpers.jsIndexableLength;
       bool isFixed = isFixedLength(actualReceiver.instructionType, compiler);
       TypeMask actualType = node.instructionType;
-      ClosedWorld closedWorld = compiler.closedWorld;
-      TypeMask resultType = backend.positiveIntType;
+      TypeMask resultType = closedWorld.commonMasks.positiveIntType;
       // If we already have computed a more specific type, keep that type.
       if (HInstruction.isInstanceOf(
           actualType, helpers.jsUInt31Class, closedWorld)) {
-        resultType = backend.uint31Type;
+        resultType = closedWorld.commonMasks.uint31Type;
       } else if (HInstruction.isInstanceOf(
           actualType, helpers.jsUInt32Class, closedWorld)) {
-        resultType = backend.uint32Type;
+        resultType = closedWorld.commonMasks.uint32Type;
       }
       HFieldGet result = new HFieldGet(element, actualReceiver, resultType,
           isAssignable: !isFixed);
@@ -368,23 +374,21 @@
 
     // Try converting the instruction to a builtin instruction.
     HInstruction instruction =
-        node.specializer.tryConvertToBuiltin(node, compiler);
+        node.specializer.tryConvertToBuiltin(node, compiler, closedWorld);
     if (instruction != null) return instruction;
 
     Selector selector = node.selector;
     TypeMask mask = node.mask;
     HInstruction input = node.inputs[1];
 
-    ClosedWorld world = compiler.closedWorld;
-
     bool applies(Element element) {
       return selector.applies(element) &&
-          (mask == null || mask.canHit(element, selector, world));
+          (mask == null || mask.canHit(element, selector, closedWorld));
     }
 
     if (selector.isCall || selector.isOperator) {
       MethodElement target;
-      if (input.isExtendableArray(compiler)) {
+      if (input.isExtendableArray(closedWorld)) {
         if (applies(helpers.jsArrayRemoveLast)) {
           target = helpers.jsArrayRemoveLast;
         } else if (applies(helpers.jsArrayAdd)) {
@@ -394,10 +398,10 @@
             target = helpers.jsArrayAdd;
           }
         }
-      } else if (input.isStringOrNull(compiler)) {
+      } else if (input.isStringOrNull(closedWorld)) {
         if (applies(helpers.jsStringSplit)) {
           HInstruction argument = node.inputs[2];
-          if (argument.isString(compiler)) {
+          if (argument.isString(closedWorld)) {
             target = helpers.jsStringSplit;
           }
         } else if (applies(helpers.jsStringOperatorAdd)) {
@@ -405,7 +409,7 @@
           // make sure the receiver and the argument are not null.
           // TODO(sra): Do this via [node.specializer].
           HInstruction argument = node.inputs[2];
-          if (argument.isString(compiler) && !input.canBeNull()) {
+          if (argument.isString(closedWorld) && !input.canBeNull()) {
             return new HStringConcat(input, argument, node.instructionType);
           }
         } else if (applies(helpers.jsStringToString) && !input.canBeNull()) {
@@ -559,7 +563,7 @@
 
   HInstruction visitBoundsCheck(HBoundsCheck node) {
     HInstruction index = node.index;
-    if (index.isInteger(compiler)) return node;
+    if (index.isInteger(closedWorld)) return node;
     if (index.isConstant()) {
       HConstant constantInstruction = index;
       assert(!constantInstruction.constant.isInt);
@@ -587,7 +591,7 @@
     HInstruction right = node.right;
     // We can only perform this rewriting on Integer, as it is not
     // valid for -0.0.
-    if (left.isInteger(compiler) && right.isInteger(compiler)) {
+    if (left.isInteger(closedWorld) && right.isInteger(closedWorld)) {
       if (left is HConstant && left.constant.isZero) return right;
       if (right is HConstant && right.constant.isZero) return left;
     }
@@ -597,7 +601,7 @@
   HInstruction visitMultiply(HMultiply node) {
     HInstruction left = node.left;
     HInstruction right = node.right;
-    if (left.isNumber(compiler) && right.isNumber(compiler)) {
+    if (left.isNumber(closedWorld) && right.isNumber(closedWorld)) {
       if (left is HConstant && left.constant.isOne) return right;
       if (right is HConstant && right.constant.isOne) return left;
     }
@@ -643,8 +647,9 @@
 
     // Intersection of int and double return conflicting, so
     // we don't optimize on numbers to preserve the runtime semantics.
-    if (!(left.isNumberOrNull(compiler) && right.isNumberOrNull(compiler))) {
-      if (leftType.isDisjoint(rightType, compiler.closedWorld)) {
+    if (!(left.isNumberOrNull(closedWorld) &&
+        right.isNumberOrNull(closedWorld))) {
+      if (leftType.isDisjoint(rightType, closedWorld)) {
         return makeFalse();
       }
     }
@@ -657,15 +662,15 @@
       if (constant.constant.isTrue) {
         return input;
       } else {
-        return new HNot(input, backend.boolType);
+        return new HNot(input, closedWorld.commonMasks.boolType);
       }
     }
 
-    if (left.isConstantBoolean() && right.isBoolean(compiler)) {
+    if (left.isConstantBoolean() && right.isBoolean(closedWorld)) {
       return compareConstant(left, right);
     }
 
-    if (right.isConstantBoolean() && left.isBoolean(compiler)) {
+    if (right.isConstantBoolean() && left.isBoolean(closedWorld)) {
       return compareConstant(right, left);
     }
 
@@ -674,8 +679,8 @@
       // dart2js runtime has not always been consistent with the Dart
       // specification (section 16.0.1), which makes distinctions on NaNs and
       // -0.0 that are hard to implement efficiently.
-      if (left.isIntegerOrNull(compiler)) return makeTrue();
-      if (!left.canBePrimitiveNumber(compiler)) return makeTrue();
+      if (left.isIntegerOrNull(closedWorld)) return makeTrue();
+      if (!left.canBePrimitiveNumber(closedWorld)) return makeTrue();
     }
 
     return null;
@@ -735,9 +740,8 @@
       return graph.addConstantBool(true, compiler);
     }
 
-    ClosedWorld closedWorld = compiler.closedWorld;
     HInstruction expression = node.expression;
-    if (expression.isInteger(compiler)) {
+    if (expression.isInteger(closedWorld)) {
       if (element == coreClasses.intClass ||
           element == coreClasses.numClass ||
           Elements.isNumberOrStringSupertype(element, compiler)) {
@@ -749,7 +753,7 @@
       } else {
         return graph.addConstantBool(false, compiler);
       }
-    } else if (expression.isDouble(compiler)) {
+    } else if (expression.isDouble(closedWorld)) {
       if (element == coreClasses.doubleClass ||
           element == coreClasses.numClass ||
           Elements.isNumberOrStringSupertype(element, compiler)) {
@@ -762,14 +766,14 @@
       } else {
         return graph.addConstantBool(false, compiler);
       }
-    } else if (expression.isNumber(compiler)) {
+    } else if (expression.isNumber(closedWorld)) {
       if (element == coreClasses.numClass) {
         return graph.addConstantBool(true, compiler);
       } else {
         // We cannot just return false, because the expression may be of
         // type int or double.
       }
-    } else if (expression.canBePrimitiveNumber(compiler) &&
+    } else if (expression.canBePrimitiveNumber(closedWorld) &&
         element == coreClasses.intClass) {
       // We let the JS semantics decide for that check.
       return node;
@@ -785,7 +789,7 @@
           : new TypeMask.nonNullSubtype(element, closedWorld);
       if (expressionMask.union(typeMask, closedWorld) == typeMask) {
         return graph.addConstantBool(true, compiler);
-      } else if (expressionMask.isDisjoint(typeMask, compiler.closedWorld)) {
+      } else if (expressionMask.isDisjoint(typeMask, closedWorld)) {
         return graph.addConstantBool(false, compiler);
       }
     }
@@ -830,7 +834,6 @@
   }
 
   HInstruction removeIfCheckAlwaysSucceeds(HCheck node, TypeMask checkedType) {
-    ClosedWorld closedWorld = compiler.closedWorld;
     if (checkedType.containsAll(closedWorld)) return node;
     HInstruction input = node.checkedInput;
     TypeMask inputType = input.instructionType;
@@ -854,7 +857,7 @@
         // should not be necessary but it currently makes it easier for
         // other optimizations to reason about a fixed length constructor
         // that we know takes an int.
-        if (receiver.inputs[0].isInteger(compiler)) {
+        if (receiver.inputs[0].isInteger(closedWorld)) {
           return receiver.inputs[0];
         }
       } else if (receiver.isConstantList() || receiver.isConstantString()) {
@@ -919,8 +922,8 @@
     if (field != null) return directFieldGet(receiver, field);
 
     if (node.element == null) {
-      MemberElement element = compiler.closedWorld
-          .locateSingleElement(node.selector, receiver.instructionType);
+      MemberElement element = closedWorld.locateSingleElement(
+          node.selector, receiver.instructionType);
       if (element != null && element.name == node.selector.name) {
         node.element = element;
         if (element.isFunction) {
@@ -935,7 +938,7 @@
   }
 
   HInstruction directFieldGet(HInstruction receiver, FieldElement field) {
-    bool isAssignable = !compiler.closedWorld.fieldNeverChanges(field);
+    bool isAssignable = !closedWorld.fieldNeverChanges(field);
 
     TypeMask type;
     if (backend.isNative(field.enclosingClass)) {
@@ -972,8 +975,8 @@
         // can skip the test an generate the HFieldSet.
         return node;
       }
-      HInstruction other =
-          value.convertType(compiler, type, HTypeConversion.CHECKED_MODE_CHECK);
+      HInstruction other = value.convertType(
+          closedWorld, type, HTypeConversion.CHECKED_MODE_CHECK);
       if (other != value) {
         node.block.addBefore(node, other);
         value = other;
@@ -997,17 +1000,17 @@
     } else if (element == backend.helpers.checkInt) {
       if (node.inputs.length == 1) {
         HInstruction argument = node.inputs[0];
-        if (argument.isInteger(compiler)) return argument;
+        if (argument.isInteger(closedWorld)) return argument;
       }
     } else if (element == backend.helpers.checkNum) {
       if (node.inputs.length == 1) {
         HInstruction argument = node.inputs[0];
-        if (argument.isNumber(compiler)) return argument;
+        if (argument.isNumber(closedWorld)) return argument;
       }
     } else if (element == backend.helpers.checkString) {
       if (node.inputs.length == 1) {
         HInstruction argument = node.inputs[0];
-        if (argument.isString(compiler)) return argument;
+        if (argument.isString(closedWorld)) return argument;
       }
     }
     return node;
@@ -1057,12 +1060,13 @@
             leftString.primitiveValue, rightString.primitiveValue)),
         compiler);
     if (prefix == null) return folded;
-    return new HStringConcat(prefix, folded, backend.stringType);
+    return new HStringConcat(
+        prefix, folded, closedWorld.commonMasks.stringType);
   }
 
   HInstruction visitStringify(HStringify node) {
     HInstruction input = node.inputs[0];
-    if (input.isString(compiler)) return input;
+    if (input.isString(closedWorld)) return input;
 
     HInstruction tryConstant() {
       if (!input.isConstant()) return null;
@@ -1086,12 +1090,11 @@
       // it directly. Keep the stringifier for primitives (since they have fast
       // path code in the stringifier) and for classes requiring interceptors
       // (since SsaInstructionSimplifier runs after SsaSimplifyInterceptors).
-      if (input.canBePrimitive(compiler)) return null;
+      if (input.canBePrimitive(closedWorld)) return null;
       if (input.canBeNull()) return null;
       Selector selector = Selectors.toString_;
       TypeMask toStringType = TypeMaskFactory.inferredTypeForSelector(
           selector, input.instructionType, compiler);
-      ClosedWorld closedWorld = compiler.closedWorld;
       if (!toStringType.containsOnlyString(closedWorld)) return null;
       // All intercepted classes extend `Interceptor`, so if the receiver can't
       // be a class extending `Interceptor` then it can be called directly.
@@ -1116,7 +1119,6 @@
   }
 
   bool needsSubstitutionForTypeVariableAccess(ClassElement cls) {
-    ClosedWorld closedWorld = compiler.closedWorld;
     if (closedWorld.isUsedAsMixin(cls)) return true;
 
     return closedWorld.anyStrictSubclassOf(cls, (ClassElement subclass) {
@@ -1169,7 +1171,7 @@
       }
 
       if (source == null) return null;
-      return new HTypeInfoReadRaw(source, backend.dynamicType);
+      return new HTypeInfoReadRaw(source, closedWorld.commonMasks.dynamicType);
     }
 
     // TODO(sra): Consider fusing type expression trees with no type variables,
@@ -1192,7 +1194,7 @@
             TypeInfoExpressionKind.COMPLETE,
             typeArgument,
             const <HInstruction>[],
-            backend.dynamicType);
+            closedWorld.commonMasks.dynamicType);
         return replacement;
       }
       return node;
@@ -1222,7 +1224,7 @@
           TypeInfoExpressionKind.COMPLETE,
           type,
           arguments,
-          backend.dynamicType);
+          closedWorld.commonMasks.dynamicType);
       return replacement;
     }
 
@@ -1289,10 +1291,12 @@
   final Set<HInstruction> boundsChecked;
   final bool trustPrimitives;
   final JavaScriptBackend backend;
+  final ClosedWorld closedWorld;
   final String name = "SsaCheckInserter";
   HGraph graph;
 
-  SsaCheckInserter(this.trustPrimitives, this.backend, this.boundsChecked);
+  SsaCheckInserter(
+      this.trustPrimitives, this.backend, this.closedWorld, this.boundsChecked);
 
   BackendHelpers get helpers => backend.helpers;
 
@@ -1319,14 +1323,14 @@
   HBoundsCheck insertBoundsCheck(
       HInstruction indexNode, HInstruction array, HInstruction indexArgument) {
     Compiler compiler = backend.compiler;
-    HFieldGet length = new HFieldGet(
-        helpers.jsIndexableLength, array, backend.positiveIntType,
+    HFieldGet length = new HFieldGet(helpers.jsIndexableLength, array,
+        closedWorld.commonMasks.positiveIntType,
         isAssignable: !isFixedLength(array.instructionType, compiler));
     indexNode.block.addBefore(indexNode, length);
 
-    TypeMask type = indexArgument.isPositiveInteger(compiler)
+    TypeMask type = indexArgument.isPositiveInteger(closedWorld)
         ? indexArgument.instructionType
-        : backend.positiveIntType;
+        : closedWorld.commonMasks.positiveIntType;
     HBoundsCheck check = new HBoundsCheck(indexArgument, length, array, type);
     indexNode.block.addBefore(indexNode, check);
     // If the index input to the bounds check was not known to be an integer
@@ -1336,7 +1340,7 @@
     // the index eg. if it is a constant.  The range information from the
     // BoundsCheck instruction is attached to the input directly by
     // visitBoundsCheck in the SsaValueRangeAnalyzer.
-    if (!indexArgument.isInteger(compiler)) {
+    if (!indexArgument.isInteger(closedWorld)) {
       indexArgument.replaceAllUsersDominatedBy(indexNode, check);
     }
     boundsChecked.add(indexNode);
@@ -1382,6 +1386,8 @@
 
   SsaDeadCodeEliminator(this.compiler, this.optimizer);
 
+  ClosedWorld get closedWorld => compiler.closedWorld;
+
   HInstruction zapInstructionCache;
   HInstruction get zapInstruction {
     if (zapInstructionCache == null) {
@@ -1512,7 +1518,7 @@
   }
 
   void visitGraph(HGraph graph) {
-    analyzer = new SsaLiveBlockAnalyzer(graph, compiler, optimizer);
+    analyzer = new SsaLiveBlockAnalyzer(graph, closedWorld, optimizer);
     analyzer.analyze();
     visitPostDominatorTree(graph);
     cleanPhis(graph);
@@ -1600,9 +1606,9 @@
   final Set<HBasicBlock> live = new Set<HBasicBlock>();
   final List<HBasicBlock> worklist = <HBasicBlock>[];
   final SsaOptimizerTask optimizer;
-  final Compiler compiler;
+  final ClosedWorld closedWorld;
 
-  SsaLiveBlockAnalyzer(this.graph, this.compiler, this.optimizer);
+  SsaLiveBlockAnalyzer(this.graph, this.closedWorld, this.optimizer);
 
   Map<HInstruction, Range> get ranges => optimizer.ranges;
 
@@ -1641,7 +1647,7 @@
   }
 
   void visitSwitch(HSwitch node) {
-    if (node.expression.isInteger(compiler)) {
+    if (node.expression.isInteger(closedWorld)) {
       Range switchRange = ranges[node.expression];
       if (switchRange != null &&
           switchRange.lower is IntValue &&
@@ -2095,9 +2101,9 @@
 class SsaTypeConversionInserter extends HBaseVisitor
     implements OptimizationPhase {
   final String name = "SsaTypeconversionInserter";
-  final Compiler compiler;
+  final ClosedWorld closedWorld;
 
-  SsaTypeConversionInserter(this.compiler);
+  SsaTypeConversionInserter(this.closedWorld);
 
   void visitGraph(HGraph graph) {
     visitDominatorTree(graph);
@@ -2135,8 +2141,7 @@
 
     if (trueTargets.isEmpty && falseTargets.isEmpty) return;
 
-    TypeMask convertedType =
-        new TypeMask.nonNullSubtype(element, compiler.closedWorld);
+    TypeMask convertedType = new TypeMask.nonNullSubtype(element, closedWorld);
     HInstruction input = instruction.expression;
 
     for (HBasicBlock block in trueTargets) {
diff --git a/pkg/compiler/lib/src/ssa/ssa_branch_builder.dart b/pkg/compiler/lib/src/ssa/ssa_branch_builder.dart
index c0dfa0b..b34552c 100644
--- a/pkg/compiler/lib/src/ssa/ssa_branch_builder.dart
+++ b/pkg/compiler/lib/src/ssa/ssa_branch_builder.dart
@@ -161,8 +161,7 @@
       boolifiedLeft = builder.popBoolified();
       builder.stack.add(boolifiedLeft);
       if (!isAnd) {
-        JavaScriptBackend backend = compiler.backend;
-        builder.push(new HNot(builder.pop(), backend.boolType));
+        builder.push(new HNot(builder.pop(), builder.commonMasks.boolType));
       }
     }
 
@@ -173,9 +172,10 @@
 
     handleIf(visitCondition, visitThen, null);
     HConstant notIsAnd = builder.graph.addConstantBool(!isAnd, compiler);
-    JavaScriptBackend backend = compiler.backend;
     HPhi result = new HPhi.manyInputs(
-        null, <HInstruction>[boolifiedRight, notIsAnd], backend.dynamicType);
+        null,
+        <HInstruction>[boolifiedRight, notIsAnd],
+        builder.commonMasks.dynamicType);
     builder.current.addPhi(result);
     builder.stack.add(result);
   }
@@ -200,9 +200,8 @@
 
     if (isExpression) {
       assert(thenValue != null && elseValue != null);
-      JavaScriptBackend backend = compiler.backend;
-      HPhi phi = new HPhi.manyInputs(
-          null, <HInstruction>[thenValue, elseValue], backend.dynamicType);
+      HPhi phi = new HPhi.manyInputs(null, <HInstruction>[thenValue, elseValue],
+          builder.commonMasks.dynamicType);
       joinBranch.block.addPhi(phi);
       builder.stack.add(phi);
     }
diff --git a/pkg/compiler/lib/src/ssa/ssa_tracer.dart b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
index 6c1d543..ce13448 100644
--- a/pkg/compiler/lib/src/ssa/ssa_tracer.dart
+++ b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
@@ -10,6 +10,7 @@
 import '../diagnostics/invariant.dart' show DEBUG_MODE;
 import '../js_backend/js_backend.dart';
 import '../tracer.dart';
+import '../world.dart' show ClosedWorld;
 import 'nodes.dart';
 
 /**
@@ -117,6 +118,8 @@
 
   HInstructionStringifier(this.currentBlock, this.compiler);
 
+  ClosedWorld get closedWorld => compiler.closedWorld;
+
   visit(HInstruction node) => '${node.accept(this)} ${node.instructionType}';
 
   String temporaryId(HInstruction instruction) {
@@ -125,27 +128,27 @@
       prefix = 'u';
     } else if (instruction.isConflicting()) {
       prefix = 'c';
-    } else if (instruction.isExtendableArray(compiler)) {
+    } else if (instruction.isExtendableArray(closedWorld)) {
       prefix = 'e';
-    } else if (instruction.isFixedArray(compiler)) {
+    } else if (instruction.isFixedArray(closedWorld)) {
       prefix = 'f';
-    } else if (instruction.isMutableArray(compiler)) {
+    } else if (instruction.isMutableArray(closedWorld)) {
       prefix = 'm';
-    } else if (instruction.isReadableArray(compiler)) {
+    } else if (instruction.isReadableArray(closedWorld)) {
       prefix = 'a';
-    } else if (instruction.isString(compiler)) {
+    } else if (instruction.isString(closedWorld)) {
       prefix = 's';
-    } else if (instruction.isIndexablePrimitive(compiler)) {
+    } else if (instruction.isIndexablePrimitive(closedWorld)) {
       prefix = 'r';
-    } else if (instruction.isBoolean(compiler)) {
+    } else if (instruction.isBoolean(closedWorld)) {
       prefix = 'b';
-    } else if (instruction.isInteger(compiler)) {
+    } else if (instruction.isInteger(closedWorld)) {
       prefix = 'i';
-    } else if (instruction.isDouble(compiler)) {
+    } else if (instruction.isDouble(closedWorld)) {
       prefix = 'd';
-    } else if (instruction.isNumber(compiler)) {
+    } else if (instruction.isNumber(closedWorld)) {
       prefix = 'n';
-    } else if (instruction.instructionType.containsAll(compiler.closedWorld)) {
+    } else if (instruction.instructionType.containsAll(closedWorld)) {
       prefix = 'v';
     } else {
       prefix = 'U';
diff --git a/pkg/compiler/lib/src/ssa/type_builder.dart b/pkg/compiler/lib/src/ssa/type_builder.dart
index 605678b..c04d415 100644
--- a/pkg/compiler/lib/src/ssa/type_builder.dart
+++ b/pkg/compiler/lib/src/ssa/type_builder.dart
@@ -30,7 +30,7 @@
     if (type.isObject) return original;
     // The type element is either a class or the void element.
     Element element = type.element;
-    TypeMask mask = new TypeMask.subtype(element, builder.compiler.closedWorld);
+    TypeMask mask = new TypeMask.subtype(element, builder.closedWorld);
     return new HTypeKnown.pinned(mask, original);
   }
 
@@ -133,9 +133,9 @@
     assert(member.isInstanceMember);
     assert(variable is! MethodTypeVariableType);
     HInstruction target = builder.localsHandler.readThis();
-    builder.push(
-        new HTypeInfoReadVariable(variable, target, builder.backend.dynamicType)
-          ..sourceInformation = sourceInformation);
+    builder.push(new HTypeInfoReadVariable(
+        variable, target, builder.commonMasks.dynamicType)
+      ..sourceInformation = sourceInformation);
     return builder.pop();
   }
 
@@ -154,7 +154,7 @@
         TypeInfoExpressionKind.INSTANCE,
         interface.element.thisType,
         inputs,
-        builder.backend.dynamicType);
+        builder.commonMasks.dynamicType);
     return representation;
   }
 
@@ -195,7 +195,7 @@
         TypeInfoExpressionKind.COMPLETE,
         argument,
         inputs,
-        builder.backend.dynamicType)..sourceInformation = sourceInformation;
+        builder.commonMasks.dynamicType)..sourceInformation = sourceInformation;
     builder.add(result);
     return result;
   }
@@ -246,7 +246,7 @@
     } else if (type.isFunctionType) {
       return builder.buildFunctionTypeConversion(original, type, kind);
     } else {
-      return original.convertType(builder.compiler, type, kind);
+      return original.convertType(builder.closedWorld, type, kind);
     }
   }
 }
diff --git a/pkg/compiler/lib/src/ssa/types_propagation.dart b/pkg/compiler/lib/src/ssa/types_propagation.dart
index 63da628..b02072d 100644
--- a/pkg/compiler/lib/src/ssa/types_propagation.dart
+++ b/pkg/compiler/lib/src/ssa/types_propagation.dart
@@ -109,18 +109,21 @@
   TypeMask visitBinaryArithmetic(HBinaryArithmetic instruction) {
     HInstruction left = instruction.left;
     HInstruction right = instruction.right;
-    if (left.isInteger(compiler) && right.isInteger(compiler)) {
-      return backend.intType;
+    if (left.isInteger(closedWorld) && right.isInteger(closedWorld)) {
+      return closedWorld.commonMasks.intType;
     }
-    if (left.isDouble(compiler)) return backend.doubleType;
-    return backend.numType;
+    if (left.isDouble(closedWorld)) {
+      return closedWorld.commonMasks.doubleType;
+    }
+    return closedWorld.commonMasks.numType;
   }
 
   TypeMask checkPositiveInteger(HBinaryArithmetic instruction) {
     HInstruction left = instruction.left;
     HInstruction right = instruction.right;
-    if (left.isPositiveInteger(compiler) && right.isPositiveInteger(compiler)) {
-      return backend.positiveIntType;
+    if (left.isPositiveInteger(closedWorld) &&
+        right.isPositiveInteger(closedWorld)) {
+      return closedWorld.commonMasks.positiveIntType;
     }
     return visitBinaryArithmetic(instruction);
   }
@@ -147,7 +150,9 @@
     HInstruction operand = instruction.operand;
     // We have integer subclasses that represent ranges, so widen any int
     // subclass to full integer.
-    if (operand.isInteger(compiler)) return backend.intType;
+    if (operand.isInteger(closedWorld)) {
+      return closedWorld.commonMasks.intType;
+    }
     return instruction.operand.instructionType;
   }
 
@@ -157,7 +162,7 @@
   }
 
   TypeMask visitPhi(HPhi phi) {
-    TypeMask candidateType = backend.emptyType;
+    TypeMask candidateType = closedWorld.commonMasks.emptyType;
     for (int i = 0, length = phi.inputs.length; i < length; i++) {
       TypeMask inputType = phi.inputs[i].instructionType;
       candidateType = candidateType.union(inputType, closedWorld);
@@ -175,11 +180,11 @@
       // We only do an int check if the input is integer or null.
       if (checkedType.containsOnlyNum(closedWorld) &&
           !checkedType.containsOnlyDouble(closedWorld) &&
-          input.isIntegerOrNull(compiler)) {
-        instruction.checkedType = backend.intType;
+          input.isIntegerOrNull(closedWorld)) {
+        instruction.checkedType = closedWorld.commonMasks.intType;
       } else if (checkedType.containsOnlyInt(closedWorld) &&
-          !input.isIntegerOrNull(compiler)) {
-        instruction.checkedType = backend.numType;
+          !input.isIntegerOrNull(closedWorld)) {
+        instruction.checkedType = closedWorld.commonMasks.numType;
       }
     }
 
@@ -193,9 +198,9 @@
       if (inputType.containsOnlyInt(closedWorld) &&
           checkedType.containsOnlyDouble(closedWorld)) {
         if (inputType.isNullable && checkedType.isNullable) {
-          outputType = backend.doubleType.nullable();
+          outputType = closedWorld.commonMasks.doubleType.nullable();
         } else {
-          outputType = backend.doubleType;
+          outputType = closedWorld.commonMasks.doubleType;
         }
       }
     }
@@ -248,7 +253,7 @@
       // If the instruction's type is integer or null, the codegen
       // will emit a null check, which is enough to know if it will
       // hit a noSuchMethod.
-      return instruction.isIntegerOrNull(compiler);
+      return instruction.isIntegerOrNull(closedWorld);
     }
     return true;
   }
@@ -259,8 +264,8 @@
   bool checkReceiver(HInvokeDynamic instruction) {
     assert(instruction.isInterceptedCall);
     HInstruction receiver = instruction.inputs[1];
-    if (receiver.isNumber(compiler)) return false;
-    if (receiver.isNumberOrNull(compiler)) {
+    if (receiver.isNumber(closedWorld)) return false;
+    if (receiver.isNumberOrNull(closedWorld)) {
       convertInput(
           instruction,
           receiver,
@@ -268,7 +273,7 @@
           HTypeConversion.RECEIVER_TYPE_CHECK);
       return true;
     } else if (instruction.element == null) {
-      Iterable<Element> targets = compiler.closedWorld.allFunctions
+      Iterable<Element> targets = closedWorld.allFunctions
           .filter(instruction.selector, instruction.mask);
       if (targets.length == 1) {
         MemberElement target = targets.first;
@@ -302,11 +307,11 @@
     HInstruction right = instruction.inputs[2];
 
     Selector selector = instruction.selector;
-    if (selector.isOperator && left.isNumber(compiler)) {
-      if (right.isNumber(compiler)) return false;
-      TypeMask type = right.isIntegerOrNull(compiler)
+    if (selector.isOperator && left.isNumber(closedWorld)) {
+      if (right.isNumber(closedWorld)) return false;
+      TypeMask type = right.isIntegerOrNull(closedWorld)
           ? right.instructionType.nonNullable()
-          : backend.numType;
+          : closedWorld.commonMasks.numType;
       // TODO(ngeoffray): Some number operations don't have a builtin
       // variant and will do the check in their method anyway. We
       // still add a check because it allows to GVN these operations,
@@ -371,7 +376,7 @@
     if (!instruction.selector.isClosureCall) {
       TypeMask newType;
       TypeMask computeNewType() {
-        newType = compiler.closedWorld.allFunctions
+        newType = closedWorld.allFunctions
             .receiverType(instruction.selector, instruction.mask);
         newType = newType.intersection(receiverType, closedWorld);
         return newType;
@@ -406,6 +411,6 @@
     }
 
     return instruction.specializer
-        .computeTypeFromInputTypes(instruction, compiler);
+        .computeTypeFromInputTypes(instruction, compiler, closedWorld);
   }
 }
diff --git a/pkg/compiler/lib/src/ssa/value_range_analyzer.dart b/pkg/compiler/lib/src/ssa/value_range_analyzer.dart
index 1882fc6..67e861e 100644
--- a/pkg/compiler/lib/src/ssa/value_range_analyzer.dart
+++ b/pkg/compiler/lib/src/ssa/value_range_analyzer.dart
@@ -7,6 +7,7 @@
 import '../constants/constant_system.dart';
 import '../constants/values.dart';
 import '../js_backend/js_backend.dart';
+import '../world.dart' show ClosedWorld;
 import 'nodes.dart';
 import 'optimize.dart';
 
@@ -611,6 +612,8 @@
       : info = new ValueRangeInfo(constantSystem),
         this.constantSystem = constantSystem;
 
+  ClosedWorld get closedWorld => compiler.closedWorld;
+
   void visitGraph(HGraph graph) {
     this.graph = graph;
     visitDominatorTree(graph);
@@ -632,7 +635,7 @@
   void visitBasicBlock(HBasicBlock block) {
     void visit(HInstruction instruction) {
       Range range = instruction.accept(this);
-      if (instruction.isInteger(compiler)) {
+      if (instruction.isInteger(closedWorld)) {
         assert(range != null);
         ranges[instruction] = range;
       }
@@ -643,10 +646,10 @@
   }
 
   Range visitInstruction(HInstruction instruction) {
-    if (instruction.isPositiveInteger(compiler)) {
+    if (instruction.isPositiveInteger(closedWorld)) {
       return info.newNormalizedRange(
           info.intZero, info.newPositiveValue(instruction));
-    } else if (instruction.isInteger(compiler)) {
+    } else if (instruction.isInteger(closedWorld)) {
       InstructionValue value = info.newInstructionValue(instruction);
       return info.newNormalizedRange(value, value);
     } else {
@@ -655,16 +658,17 @@
   }
 
   Range visitPhi(HPhi phi) {
-    if (!phi.isInteger(compiler)) return info.newUnboundRange();
+    if (!phi.isInteger(closedWorld)) return info.newUnboundRange();
     // Some phases may replace instructions that change the inputs of
     // this phi. Only the [SsaTypesPropagation] phase will update the
     // phi type. Play it safe by assuming the [SsaTypesPropagation]
     // phase is not necessarily run before the [ValueRangeAnalyzer].
-    if (phi.inputs.any((i) => !i.isInteger(compiler))) {
+    if (phi.inputs.any((i) => !i.isInteger(closedWorld))) {
       return info.newUnboundRange();
     }
     if (phi.block.isLoopHeader()) {
-      Range range = new LoopUpdateRecognizer(compiler, ranges, info).run(phi);
+      Range range =
+          new LoopUpdateRecognizer(closedWorld, ranges, info).run(phi);
       if (range == null) return info.newUnboundRange();
       return range;
     }
@@ -677,7 +681,7 @@
   }
 
   Range visitConstant(HConstant hConstant) {
-    if (!hConstant.isInteger(compiler)) return info.newUnboundRange();
+    if (!hConstant.isInteger(closedWorld)) return info.newUnboundRange();
     ConstantValue constant = hConstant.constant;
     NumConstantValue constantNum;
     if (constant is DeferredConstantValue) {
@@ -694,8 +698,8 @@
   }
 
   Range visitFieldGet(HFieldGet fieldGet) {
-    if (!fieldGet.isInteger(compiler)) return info.newUnboundRange();
-    if (!fieldGet.receiver.isIndexablePrimitive(compiler)) {
+    if (!fieldGet.isInteger(closedWorld)) return info.newUnboundRange();
+    if (!fieldGet.receiver.isIndexablePrimitive(closedWorld)) {
       return visitInstruction(fieldGet);
     }
     JavaScriptBackend backend = compiler.backend;
@@ -715,7 +719,7 @@
     Range lengthRange = ranges[check.length];
     if (indexRange == null) {
       indexRange = info.newUnboundRange();
-      assert(!check.index.isInteger(compiler));
+      assert(!check.index.isInteger(closedWorld));
     }
     if (lengthRange == null) {
       // We might have lost the length range due to a type conversion that
@@ -723,7 +727,7 @@
       // get to this point anyway, so no need to try and refine ranges.
       return indexRange;
     }
-    assert(check.length.isInteger(compiler));
+    assert(check.length.isInteger(closedWorld));
 
     // Check if the index is strictly below the upper bound of the length
     // range.
@@ -776,8 +780,8 @@
   Range visitRelational(HRelational relational) {
     HInstruction right = relational.right;
     HInstruction left = relational.left;
-    if (!left.isInteger(compiler)) return info.newUnboundRange();
-    if (!right.isInteger(compiler)) return info.newUnboundRange();
+    if (!left.isInteger(closedWorld)) return info.newUnboundRange();
+    if (!right.isInteger(closedWorld)) return info.newUnboundRange();
     BinaryOperation operation = relational.operation(constantSystem);
     Range rightRange = ranges[relational.right];
     Range leftRange = ranges[relational.left];
@@ -812,7 +816,7 @@
     if (divisor != null) {
       // For Integer values we can be precise in the upper bound,
       // so special case those.
-      if (left.isInteger(compiler) && right.isInteger(compiler)) {
+      if (left.isInteger(closedWorld) && right.isInteger(closedWorld)) {
         if (divisor.isPositive) {
           return info.newNormalizedRange(
               info.intZero, divisor.upper - info.intOne);
@@ -820,7 +824,7 @@
           return info.newNormalizedRange(
               info.intZero, info.newNegateValue(divisor.lower) - info.intOne);
         }
-      } else if (left.isNumber(compiler) && right.isNumber(compiler)) {
+      } else if (left.isNumber(closedWorld) && right.isNumber(closedWorld)) {
         if (divisor.isPositive) {
           return info.newNormalizedRange(info.intZero, divisor.upper);
         } else if (divisor.isNegative) {
@@ -839,7 +843,7 @@
   }
 
   Range handleBinaryOperation(HBinaryArithmetic instruction) {
-    if (!instruction.isInteger(compiler)) return info.newUnboundRange();
+    if (!instruction.isInteger(closedWorld)) return info.newUnboundRange();
     return instruction
         .operation(constantSystem)
         .apply(ranges[instruction.left], ranges[instruction.right]);
@@ -854,10 +858,10 @@
   }
 
   Range visitBitAnd(HBitAnd node) {
-    if (!node.isInteger(compiler)) return info.newUnboundRange();
+    if (!node.isInteger(closedWorld)) return info.newUnboundRange();
     HInstruction right = node.right;
     HInstruction left = node.left;
-    if (left.isInteger(compiler) && right.isInteger(compiler)) {
+    if (left.isInteger(closedWorld) && right.isInteger(closedWorld)) {
       return ranges[left] & ranges[right];
     }
 
@@ -871,9 +875,9 @@
       return info.newUnboundRange();
     }
 
-    if (left.isInteger(compiler)) {
+    if (left.isInteger(closedWorld)) {
       return tryComputeRange(left);
-    } else if (right.isInteger(compiler)) {
+    } else if (right.isInteger(closedWorld)) {
       return tryComputeRange(right);
     }
     return info.newUnboundRange();
@@ -888,9 +892,8 @@
 
   HInstruction createRangeConversion(
       HInstruction cursor, HInstruction instruction) {
-    JavaScriptBackend backend = compiler.backend;
     HRangeConversion newInstruction =
-        new HRangeConversion(instruction, backend.intType);
+        new HRangeConversion(instruction, closedWorld.commonMasks.intType);
     conversions.add(newInstruction);
     cursor.block.addBefore(cursor, newInstruction);
     // Update the users of the instruction dominated by [cursor] to
@@ -953,8 +956,8 @@
     if (condition is HIdentity) return info.newUnboundRange();
     HInstruction right = condition.right;
     HInstruction left = condition.left;
-    if (!left.isInteger(compiler)) return info.newUnboundRange();
-    if (!right.isInteger(compiler)) return info.newUnboundRange();
+    if (!left.isInteger(closedWorld)) return info.newUnboundRange();
+    if (!right.isInteger(closedWorld)) return info.newUnboundRange();
 
     Range rightRange = ranges[right];
     Range leftRange = ranges[left];
@@ -1016,10 +1019,10 @@
  * Tries to find a range for the update instruction of a loop phi.
  */
 class LoopUpdateRecognizer extends HBaseVisitor {
-  final Compiler compiler;
+  final ClosedWorld closedWorld;
   final Map<HInstruction, Range> ranges;
   final ValueRangeInfo info;
-  LoopUpdateRecognizer(this.compiler, this.ranges, this.info);
+  LoopUpdateRecognizer(this.closedWorld, this.ranges, this.info);
 
   Range run(HPhi loopPhi) {
     // Create a marker range for the loop phi, so that if the update
@@ -1044,7 +1047,7 @@
   }
 
   Range visit(HInstruction instruction) {
-    if (!instruction.isInteger(compiler)) return null;
+    if (!instruction.isInteger(closedWorld)) return null;
     if (ranges[instruction] != null) return ranges[instruction];
     return instruction.accept(this);
   }
diff --git a/pkg/compiler/lib/src/types/masks.dart b/pkg/compiler/lib/src/types/masks.dart
index 5cbc4c0..43e0600 100644
--- a/pkg/compiler/lib/src/types/masks.dart
+++ b/pkg/compiler/lib/src/types/masks.dart
@@ -61,6 +61,12 @@
   TypeMask _syncStarIterableType;
   TypeMask _asyncFutureType;
   TypeMask _asyncStarStreamType;
+  TypeMask _indexablePrimitiveType;
+  TypeMask _readableArrayType;
+  TypeMask _mutableArrayType;
+  TypeMask _fixedArrayType;
+  TypeMask _extendableArrayType;
+  TypeMask _unmodifiableArrayType;
 
   TypeMask get dynamicType => _dynamicType ??=
       new TypeMask.subclass(closedWorld.coreClasses.objectClass, closedWorld);
@@ -132,4 +138,29 @@
 
   // TODO(johnniwinther): Assert that the null type has been resolved.
   TypeMask get nullType => _nullType ??= const TypeMask.empty();
+
+  TypeMask get emptyType => const TypeMask.nonNullEmpty();
+
+  TypeMask get indexablePrimitiveType =>
+      _indexablePrimitiveType ??= new TypeMask.nonNullSubtype(
+          backendClasses.indexableImplementation, closedWorld);
+
+  TypeMask get readableArrayType =>
+      _readableArrayType ??= new TypeMask.nonNullSubclass(
+          backendClasses.listImplementation, closedWorld);
+
+  TypeMask get mutableArrayType =>
+      _mutableArrayType ??= new TypeMask.nonNullSubclass(
+          backendClasses.mutableListImplementation, closedWorld);
+
+  TypeMask get fixedArrayType => _fixedArrayType ??= new TypeMask.nonNullExact(
+      backendClasses.fixedListImplementation, closedWorld);
+
+  TypeMask get extendableArrayType =>
+      _extendableArrayType ??= new TypeMask.nonNullExact(
+          backendClasses.growableListImplementation, closedWorld);
+
+  TypeMask get unmodifiableArrayType =>
+      _unmodifiableArrayType ??= new TypeMask.nonNullExact(
+          backendClasses.constListImplementation, closedWorld);
 }
diff --git a/pkg/compiler/lib/src/types/types.dart b/pkg/compiler/lib/src/types/types.dart
index d2831c0..e36e700 100644
--- a/pkg/compiler/lib/src/types/types.dart
+++ b/pkg/compiler/lib/src/types/types.dart
@@ -14,6 +14,7 @@
 import '../tree/tree.dart';
 import '../universe/selector.dart' show Selector;
 import '../util/util.dart' show Maplet;
+import '../world.dart' show ClosedWorld, ClosedWorldRefiner;
 
 import 'masks.dart';
 export 'masks.dart';
@@ -245,14 +246,15 @@
         super(compiler.measurer);
 
   /// Runs the global type-inference algorithm once.
-  void runGlobalTypeInference(Element mainElement) {
+  void runGlobalTypeInference(Element mainElement, ClosedWorld closedWorld,
+      ClosedWorldRefiner closedWorldRefiner) {
     measure(() {
-      CommonMasks masks = compiler.closedWorld.commonMasks;
-      typesInferrerInternal ??= new TypeGraphInferrer(compiler, masks);
+      typesInferrerInternal ??=
+          new TypeGraphInferrer(compiler, closedWorld, closedWorldRefiner);
       typesInferrerInternal.analyzeMain(mainElement);
       typesInferrerInternal.clear();
       results = new GlobalTypeInferenceResults(typesInferrerInternal, compiler,
-          masks, typesInferrerInternal.inferrer.types);
+          closedWorld.commonMasks, typesInferrerInternal.inferrer.types);
     });
   }
 }
diff --git a/pkg/compiler/lib/src/universe/use.dart b/pkg/compiler/lib/src/universe/use.dart
index f399509..148c6f4 100644
--- a/pkg/compiler/lib/src/universe/use.dart
+++ b/pkg/compiler/lib/src/universe/use.dart
@@ -26,7 +26,11 @@
 import 'selector.dart' show Selector;
 import 'world_builder.dart' show ReceiverConstraint;
 
-enum DynamicUseKind { INVOKE, GET, SET, }
+enum DynamicUseKind {
+  INVOKE,
+  GET,
+  SET,
+}
 
 /// The use of a dynamic property. [selector] defined the name and kind of the
 /// property and [mask] defines the known constraint for the object on which
diff --git a/pkg/compiler/lib/src/universe/world_builder.dart b/pkg/compiler/lib/src/universe/world_builder.dart
index bd07cc8..23855be 100644
--- a/pkg/compiler/lib/src/universe/world_builder.dart
+++ b/pkg/compiler/lib/src/universe/world_builder.dart
@@ -9,9 +9,9 @@
 import '../cache_strategy.dart';
 import '../common.dart';
 import '../common/backend_api.dart' show Backend;
+import '../common/names.dart' show Identifiers;
 import '../common/resolution.dart' show Resolution;
 import '../compiler.dart' show Compiler;
-import '../core_types.dart' show CoreClasses;
 import '../dart_types.dart';
 import '../elements/elements.dart';
 import '../elements/entities.dart';
@@ -125,7 +125,7 @@
 
   /// Registers that [type] is checked in this universe. The unaliased type is
   /// returned.
-  DartType registerIsCheck(DartType type, Resolution resolution);
+  DartType registerIsCheck(DartType type);
 
   /// All directly instantiated types, that is, the types of the directly
   /// instantiated classes.
@@ -169,15 +169,6 @@
   /// Returns `true` if [member] is invoked as a setter.
   bool hasInvokedSetter(Element member);
 
-  /// `true` of `Object.runtimeType` is supported.
-  bool get hasRuntimeTypeSupport;
-
-  /// `true` of use of the `dart:isolate` library is supported.
-  bool get hasIsolateSupport;
-
-  /// `true` of `Function.apply` is supported.
-  bool get hasFunctionApplySupport;
-
   /// The [OpenWorld] being created by this world builder.
   // TODO(johnniwinther): Merge this with [ResolutionWorldBuilder].
   OpenWorld get openWorld;
@@ -375,7 +366,11 @@
   final Map<ClassElement, _ClassUsage> _processedClasses =
       <ClassElement, _ClassUsage>{};
 
-  /// Map of registers usage of instance members of live classes.
+  /// Map of registered usage of static members of live classes.
+  final Map<Entity, _StaticMemberUsage> _staticMemberUsage =
+      <Entity, _StaticMemberUsage>{};
+
+  /// Map of registered usage of instance members of live classes.
   final Map<MemberEntity, _MemberUsage> _instanceMemberUsage =
       <MemberEntity, _MemberUsage>{};
 
@@ -496,7 +491,8 @@
   // TODO(johnniwinther): Fully enforce the separation between exact, through
   // subclass and through subtype instantiated types/classes.
   // TODO(johnniwinther): Support unknown type arguments for generic types.
-  void registerTypeInstantiation(InterfaceType type, ClassUsed classUsed,
+  void registerTypeInstantiation(
+      InterfaceType type, ClassUsedCallback classUsed,
       {ConstructorElement constructor,
       bool byMirrors: false,
       bool isRedirection: false}) {
@@ -619,7 +615,8 @@
     return _hasMatchingSelector(_invokedSetters[member.name], member);
   }
 
-  void registerDynamicUse(DynamicUse dynamicUse, MemberUsed memberUsed) {
+  void registerDynamicUse(
+      DynamicUse dynamicUse, MemberUsedCallback memberUsed) {
     Selector selector = dynamicUse.selector;
     String methodName = selector.name;
     switch (dynamicUse.kind) {
@@ -680,8 +677,8 @@
     return constraints.addReceiverConstraint(mask);
   }
 
-  DartType registerIsCheck(DartType type, Resolution resolution) {
-    type.computeUnaliased(resolution);
+  DartType registerIsCheck(DartType type) {
+    type.computeUnaliased(_resolution);
     type = type.unaliased;
     // Even in checked mode, type annotations for return type and argument
     // types do not imply type checks, so there should never be a check
@@ -690,53 +687,83 @@
     return type;
   }
 
-  void registerStaticUse(StaticUse staticUse) {
+  void registerStaticUse(StaticUse staticUse, MemberUsedCallback memberUsed) {
     Element element = staticUse.element;
+    assert(invariant(element, element.isDeclaration,
+        message: "Element ${element} is not the declaration."));
+    _StaticMemberUsage usage = _staticMemberUsage.putIfAbsent(element, () {
+      if ((element.isStatic || element.isTopLevel) && element.isFunction) {
+        return new _StaticFunctionUsage(element);
+      } else {
+        return new _GeneralStaticMemberUsage(element);
+      }
+    });
+    EnumSet<MemberUse> useSet = new EnumSet<MemberUse>();
+
     if (Elements.isStaticOrTopLevel(element) && element.isField) {
       allReferencedStaticFields.add(element);
     }
+    // TODO(johnniwinther): Avoid this. Currently [FIELD_GET] and
+    // [FIELD_SET] contains [BoxFieldElement]s which we cannot enqueue.
+    // Also [CLOSURE] contains [LocalFunctionElement] which we cannot
+    // enqueue.
     switch (staticUse.kind) {
-      case StaticUseKind.SUPER_FIELD_SET:
+      case StaticUseKind.FIELD_GET:
+        break;
       case StaticUseKind.FIELD_SET:
         fieldSetters.add(element);
         break;
+      case StaticUseKind.CLOSURE:
+        LocalFunctionElement closure = staticUse.element;
+        if (closure.type.containsTypeVariables) {
+          closuresWithFreeTypeVariables.add(closure);
+        }
+        allClosures.add(element);
+        break;
       case StaticUseKind.SUPER_TEAR_OFF:
+        useSet.addAll(usage.tearOff());
         methodsNeedingSuperGetter.add(element);
         break;
+      case StaticUseKind.SUPER_FIELD_SET:
+        fieldSetters.add(element);
+        useSet.addAll(usage.normalUse());
+        break;
+      case StaticUseKind.STATIC_TEAR_OFF:
+        useSet.addAll(usage.tearOff());
+        break;
       case StaticUseKind.GENERAL:
       case StaticUseKind.DIRECT_USE:
-      case StaticUseKind.STATIC_TEAR_OFF:
-      case StaticUseKind.FIELD_GET:
       case StaticUseKind.CONSTRUCTOR_INVOKE:
       case StaticUseKind.CONST_CONSTRUCTOR_INVOKE:
       case StaticUseKind.REDIRECTION:
-        break;
-      case StaticUseKind.CLOSURE:
-        allClosures.add(element);
+        useSet.addAll(usage.normalUse());
         break;
       case StaticUseKind.DIRECT_INVOKE:
         invariant(
             element, 'Direct static use is not supported for resolution.');
         break;
     }
+    if (useSet.isNotEmpty) {
+      memberUsed(usage.entity, useSet);
+    }
   }
 
-  void forgetElement(Element element, Compiler compiler) {
-    allClosures.remove(element);
-    slowDirectlyNestedClosures(element).forEach(compiler.forgetElement);
-    closurizedMembers.remove(element);
-    fieldSetters.remove(element);
-    _instantiationInfo.remove(element);
+  void forgetEntity(Entity entity, Compiler compiler) {
+    allClosures.remove(entity);
+    slowDirectlyNestedClosures(entity).forEach(compiler.forgetElement);
+    closurizedMembers.remove(entity);
+    fieldSetters.remove(entity);
+    _instantiationInfo.remove(entity);
 
-    void removeUsage(Set<_MemberUsage> set, Element element) {
+    void removeUsage(Set<_MemberUsage> set, Entity entity) {
       if (set == null) return;
       set.removeAll(
-          set.where((_MemberUsage usage) => usage.entity == element).toList());
+          set.where((_MemberUsage usage) => usage.entity == entity).toList());
     }
 
-    _processedClasses.remove(element);
-    removeUsage(_instanceMembersByName[element.name], element);
-    removeUsage(_instanceFunctionsByName[element.name], element);
+    _processedClasses.remove(entity);
+    removeUsage(_instanceMembersByName[entity.name], entity);
+    removeUsage(_instanceFunctionsByName[entity.name], entity);
   }
 
   // TODO(ahe): Replace this method with something that is O(1), for example,
@@ -760,7 +787,8 @@
   }
 
   /// Register [cls] and all its superclasses as instantiated.
-  void _processInstantiatedClass(ClassElement cls, ClassUsed classUsed) {
+  void _processInstantiatedClass(
+      ClassElement cls, ClassUsedCallback classUsed) {
     // Registers [superclass] as instantiated. Returns `true` if it wasn't
     // already instantiated and we therefore have to process its superclass as
     // well.
@@ -780,7 +808,7 @@
 
   /// Computes usage for all members declared by [cls]. Calls [membersUsed] with
   /// the usage changes for each member.
-  void processClassMembers(ClassElement cls, MemberUsed memberUsed) {
+  void processClassMembers(ClassElement cls, MemberUsedCallback memberUsed) {
     cls.implementation.forEachMember((ClassElement cls, MemberElement member) {
       _processInstantiatedClassMember(cls, member, memberUsed);
     });
@@ -808,12 +836,13 @@
     _processSet(_instanceMembersByName, name, updateUsage);
   }
 
-  void _processInstanceFunctions(String name, bool updateUsage(_MemberUsage e)) {
+  void _processInstanceFunctions(
+      String name, bool updateUsage(_MemberUsage e)) {
     _processSet(_instanceFunctionsByName, name, updateUsage);
   }
 
   void _processInstantiatedClassMember(
-      ClassElement cls, MemberElement member, MemberUsed memberUsed) {
+      ClassElement cls, MemberElement member, MemberUsedCallback memberUsed) {
     assert(invariant(member, member.isDeclaration));
     if (!member.isInstanceMember) return;
     String memberName = member.name;
@@ -833,6 +862,11 @@
       if (member.isField && isNative) {
         _openWorld.registerUsedElement(member);
       }
+      if (member.isFunction &&
+          member.name == Identifiers.call &&
+          !cls.typeVariables.isEmpty) {
+        callMethodsWithFreeTypeVariables.add(member);
+      }
 
       if (_hasInvokedGetter(member)) {
         useSet.addAll(usage.read());
@@ -851,7 +885,7 @@
             .putIfAbsent(memberName, () => new Set<_MemberUsage>())
             .add(usage);
       }
-      if (usage.pendingUse.contains(MemberUse.CLOSURIZE)) {
+      if (usage.pendingUse.contains(MemberUse.CLOSURIZE_INSTANCE)) {
         // Store the member in [instanceFunctionsByName] to catch
         // getters on the function.
         _instanceFunctionsByName
@@ -1084,7 +1118,7 @@
     _invokedSetters.forEach(f);
   }
 
-  DartType registerIsCheck(DartType type, Resolution resolution) {
+  DartType registerIsCheck(DartType type) {
     type = type.unaliased;
     // Even in checked mode, type annotations for return type and argument
     // types do not imply type checks, so there should never be a check
@@ -1306,7 +1340,7 @@
 
   _FunctionUsage(FunctionEntity function) : super.internal(function);
 
-  EnumSet<MemberUse> get _originalUse => MemberUses.ALL;
+  EnumSet<MemberUse> get _originalUse => MemberUses.ALL_INSTANCE;
 
   @override
   EnumSet<MemberUse> read() => fullyUse();
@@ -1328,13 +1362,13 @@
         return MemberUses.NONE;
       }
       hasRead = true;
-      return _pendingUse.removeAll(MemberUses.CLOSURIZE_ONLY);
+      return _pendingUse.removeAll(MemberUses.CLOSURIZE_INSTANCE_ONLY);
     } else if (hasRead) {
       hasInvoke = true;
       return _pendingUse.removeAll(MemberUses.NORMAL_ONLY);
     } else {
       hasRead = hasInvoke = true;
-      return _pendingUse.removeAll(MemberUses.ALL);
+      return _pendingUse.removeAll(MemberUses.ALL_INSTANCE);
     }
   }
 
@@ -1388,19 +1422,24 @@
 }
 
 /// Enum class for the possible kind of use of [MemberEntity] objects.
-enum MemberUse { NORMAL, CLOSURIZE }
+enum MemberUse { NORMAL, CLOSURIZE_INSTANCE, CLOSURIZE_STATIC }
 
 /// Common [EnumSet]s used for [MemberUse].
 class MemberUses {
   static const EnumSet<MemberUse> NONE = const EnumSet<MemberUse>.fixed(0);
   static const EnumSet<MemberUse> NORMAL_ONLY =
       const EnumSet<MemberUse>.fixed(1);
-  static const EnumSet<MemberUse> CLOSURIZE_ONLY =
+  static const EnumSet<MemberUse> CLOSURIZE_INSTANCE_ONLY =
       const EnumSet<MemberUse>.fixed(2);
-  static const EnumSet<MemberUse> ALL = const EnumSet<MemberUse>.fixed(3);
+  static const EnumSet<MemberUse> CLOSURIZE_STATIC_ONLY =
+      const EnumSet<MemberUse>.fixed(4);
+  static const EnumSet<MemberUse> ALL_INSTANCE =
+      const EnumSet<MemberUse>.fixed(3);
+  static const EnumSet<MemberUse> ALL_STATIC =
+      const EnumSet<MemberUse>.fixed(5);
 }
 
-typedef void MemberUsed(MemberEntity member, EnumSet<MemberUse> useSet);
+typedef void MemberUsedCallback(MemberEntity member, EnumSet<MemberUse> useSet);
 
 /// Registry for the observed use of a class [entity] in the open world.
 // TODO(johnniwinther): Merge this with [InstantiationInfo].
@@ -1447,4 +1486,52 @@
   static const EnumSet<ClassUse> ALL = const EnumSet<ClassUse>.fixed(3);
 }
 
-typedef void ClassUsed(ClassEntity cls, EnumSet<ClassUse> useSet);
+typedef void ClassUsedCallback(ClassEntity cls, EnumSet<ClassUse> useSet);
+
+// TODO(johnniwinther): Merge this with [_MemberUsage].
+abstract class _StaticMemberUsage extends _AbstractUsage<MemberUse> {
+  final Entity entity;
+
+  bool hasNormalUse = false;
+  bool get hasClosurization => false;
+
+  _StaticMemberUsage.internal(this.entity);
+
+  EnumSet<MemberUse> normalUse() {
+    if (hasNormalUse) {
+      return MemberUses.NONE;
+    }
+    hasNormalUse = true;
+    return _pendingUse.removeAll(MemberUses.NORMAL_ONLY);
+  }
+
+  EnumSet<MemberUse> tearOff();
+
+  @override
+  EnumSet<MemberUse> get _originalUse => MemberUses.NORMAL_ONLY;
+
+  String toString() => entity.toString();
+}
+
+class _GeneralStaticMemberUsage extends _StaticMemberUsage {
+  _GeneralStaticMemberUsage(Entity entity) : super.internal(entity);
+
+  EnumSet<MemberUse> tearOff() => normalUse();
+}
+
+class _StaticFunctionUsage extends _StaticMemberUsage {
+  bool hasClosurization = false;
+
+  _StaticFunctionUsage(Entity entity) : super.internal(entity);
+
+  EnumSet<MemberUse> tearOff() {
+    if (hasClosurization) {
+      return MemberUses.NONE;
+    }
+    hasNormalUse = hasClosurization = true;
+    return _pendingUse.removeAll(MemberUses.ALL_STATIC);
+  }
+
+  @override
+  EnumSet<MemberUse> get _originalUse => MemberUses.ALL_STATIC;
+}
diff --git a/pkg/compiler/lib/src/universe/world_impact.dart b/pkg/compiler/lib/src/universe/world_impact.dart
index 2a1afb8..4d4f3f9 100644
--- a/pkg/compiler/lib/src/universe/world_impact.dart
+++ b/pkg/compiler/lib/src/universe/world_impact.dart
@@ -261,8 +261,8 @@
 class ImpactStrategy {
   const ImpactStrategy();
 
-  /// Applies [impact] to [visitor] for the [impactUseCase] of [element].
-  void visitImpact(Element element, WorldImpact impact,
+  /// Applies [impact] to [visitor] for the [impactUseCase] of [impactSource].
+  void visitImpact(var impactSource, WorldImpact impact,
       WorldImpactVisitor visitor, ImpactUseCase impactUseCase) {
     // Apply unconditionally.
     impact.apply(visitor);
diff --git a/pkg/compiler/lib/src/world.dart b/pkg/compiler/lib/src/world.dart
index 2ddfbd8..41ceb0f 100644
--- a/pkg/compiler/lib/src/world.dart
+++ b/pkg/compiler/lib/src/world.dart
@@ -8,7 +8,7 @@
 import 'closure.dart' show SynthesizedCallMethodElementX;
 import 'common/backend_api.dart' show BackendClasses;
 import 'common.dart';
-import 'core_types.dart' show CoreClasses;
+import 'core_types.dart' show CoreClasses, CommonElements;
 import 'dart_types.dart';
 import 'elements/elements.dart'
     show
@@ -47,6 +47,8 @@
   /// Access to core classes used in the Dart language.
   CoreClasses get coreClasses;
 
+  CommonElements get commonElements;
+
   CommonMasks get commonMasks;
 
   /// Returns `true` if [cls] is either directly or indirectly instantiated.
@@ -874,7 +876,7 @@
 
   CommonMasks _commonMasks;
 
-  final CoreClasses coreClasses;
+  final CommonElements commonElements;
 
   final CacheStrategy cacheStrategy;
 
@@ -886,7 +888,7 @@
     return _typesImplementedBySubclasses[cls.declaration];
   }
 
-  WorldImpl(this.resolverWorld, this._backend, this.coreClasses,
+  WorldImpl(this.resolverWorld, this._backend, this.commonElements,
       CacheStrategy cacheStrategy)
       : this.cacheStrategy = cacheStrategy,
         alreadyPopulated = cacheStrategy.newSet() {
@@ -900,6 +902,8 @@
     return _commonMasks;
   }
 
+  CoreClasses get coreClasses => commonElements;
+
   /// Called to add [cls] to the set of known classes.
   ///
   /// This ensures that class hierarchy queries can be performed on [cls] and
diff --git a/pkg/dev_compiler/lib/js/amd/dart_sdk.js b/pkg/dev_compiler/lib/js/amd/dart_sdk.js
index 41eef01..d6063de 100644
--- a/pkg/dev_compiler/lib/js/amd/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/amd/dart_sdk.js
@@ -8896,13 +8896,14 @@
           f(a, e);
         };
       })(_isolate_helper.IsolateNatives._processWorkerMessage, this.mainManager);
-      self.onmessage = func;
-      self.dartPrint = self.dartPrint || (function(serialize) {
+      _isolate_helper.global.onmessage = func;
+      _isolate_helper.global.dartPrint = _isolate_helper.global.dartPrint || (function(serialize) {
         return function(object) {
-          if (self.console && self.console.log) {
-            self.console.log(object);
+          var _self = _isolate_helper.global;
+          if (_self.console && _self.console.log) {
+            _self.console.log(object);
           } else {
-            self.postMessage(serialize(object));
+            _self.postMessage(serialize(object));
           }
         };
       })(_isolate_helper._Manager._serializePrintMessage);
@@ -9053,8 +9054,8 @@
         if (dart.test(this.errorsAreFatal) && core.identical(this, _isolate_helper._globalState.rootContext)) {
           return;
         }
-        if (self.console && self.console.error) {
-          self.console.error(error, stackTrace);
+        if (_isolate_helper.global.console && _isolate_helper.global.console.error) {
+          _isolate_helper.global.console.error(error, stackTrace);
         } else {
           core.print(error);
           if (stackTrace != null) core.print(stackTrace);
@@ -9341,13 +9342,13 @@
     methods: () => ({process: dart.definiteFunctionType(dart.void, [])})
   });
   dart.defineLazy(_isolate_helper, {
-    get _global() {
+    get global() {
       return typeof global == 'undefined' ? self : global;
     }
   });
   _isolate_helper._MainManagerStub = class _MainManagerStub extends core.Object {
     postMessage(msg) {
-      _isolate_helper._global.postMessage(msg);
+      _isolate_helper.global.postMessage(msg);
     }
   };
   dart.setSignature(_isolate_helper._MainManagerStub, {
@@ -9357,17 +9358,17 @@
   _isolate_helper._SPAWN_FAILED_SIGNAL = "spawn failed";
   dart.copyProperties(_isolate_helper, {
     get globalWindow() {
-      return _isolate_helper._global.window;
+      return _isolate_helper.global.window;
     }
   });
   dart.copyProperties(_isolate_helper, {
     get globalWorker() {
-      return _isolate_helper._global.Worker;
+      return _isolate_helper.global.Worker;
     }
   });
   dart.copyProperties(_isolate_helper, {
     get globalPostMessageDefined() {
-      return !!_isolate_helper._global.postMessage;
+      return !!_isolate_helper.global.postMessage;
     }
   });
   _isolate_helper._MainFunction = dart.typedef('_MainFunction', () => dart.functionType(dart.dynamic, []));
@@ -9501,7 +9502,7 @@
       }
     }
     static _consoleLog(msg) {
-      self.console.log(msg);
+      _isolate_helper.global.console.log(msg);
     }
     static _getJSFunctionFromName(functionName) {
       let globalFunctionsContainer = _foreign_helper.JS_EMBEDDED_GLOBAL("", _js_embedded_names.GLOBAL_FUNCTIONS);
@@ -10661,7 +10662,7 @@
         }).bind(this);
         dart.fn(internalCallback, VoidTovoid$());
         _isolate_helper.enterJsAsync();
-        this[_handle] = self.setTimeout(internalCallback, milliseconds);
+        this[_handle] = _isolate_helper.global.setTimeout(internalCallback, milliseconds);
       } else {
         dart.assert(dart.notNull(milliseconds) > 0);
         dart.throw(new core.UnsupportedError("Timer greater than 0."));
@@ -10673,7 +10674,7 @@
       this[_handle] = null;
       if (dart.test(_isolate_helper.hasTimer())) {
         _isolate_helper.enterJsAsync();
-        this[_handle] = self.setInterval(dart.fn(() => {
+        this[_handle] = _isolate_helper.global.setInterval(dart.fn(() => {
           callback(this);
         }, VoidTodynamic$()), milliseconds);
       } else {
@@ -10688,9 +10689,9 @@
         if (this[_handle] == null) return;
         _isolate_helper.leaveJsAsync();
         if (dart.test(this[_once])) {
-          self.clearTimeout(this[_handle]);
+          _isolate_helper.global.clearTimeout(this[_handle]);
         } else {
-          self.clearInterval(this[_handle]);
+          _isolate_helper.global.clearInterval(this[_handle]);
         }
         this[_handle] = null;
       } else {
@@ -10717,7 +10718,7 @@
     methods: () => ({cancel: dart.definiteFunctionType(dart.void, [])})
   });
   _isolate_helper.hasTimer = function() {
-    return self.setTimeout != null;
+    return _isolate_helper.global.setTimeout != null;
   };
   dart.lazyFn(_isolate_helper.hasTimer, () => VoidTobool());
   _isolate_helper.CapabilityImpl = class CapabilityImpl extends core.Object {
@@ -19639,12 +19640,12 @@
       async._AsyncRun._scheduleImmediateClosure(callback);
     }
     static _initializeScheduleImmediate() {
-      if (self.scheduleImmediate != null) {
+      if (_isolate_helper.global.scheduleImmediate != null) {
         return async._AsyncRun._scheduleImmediateJsOverride;
       }
-      if (self.MutationObserver != null && self.document != null) {
-        let div = self.document.createElement("div");
-        let span = self.document.createElement("span");
+      if (_isolate_helper.global.MutationObserver != null && _isolate_helper.global.document != null) {
+        let div = _isolate_helper.global.document.createElement("div");
+        let span = _isolate_helper.global.document.createElement("span");
         let storedCallback = null;
         function internalCallback(_) {
           _isolate_helper.leaveJsAsync();
@@ -19654,7 +19655,7 @@
         }
         dart.fn(internalCallback, dynamicTodynamic$());
         ;
-        let observer = new self.MutationObserver(internalCallback);
+        let observer = new _isolate_helper.global.MutationObserver(internalCallback);
         observer.observe(div, {childList: true});
         return dart.fn(callback => {
           dart.assert(storedCallback == null);
@@ -19662,7 +19663,7 @@
           storedCallback = callback;
           div.firstChild ? div.removeChild(span) : div.appendChild(span);
         }, _AsyncCallbackTovoid());
-      } else if (self.setImmediate != null) {
+      } else if (_isolate_helper.global.setImmediate != null) {
         return async._AsyncRun._scheduleImmediateWithSetImmediate;
       }
       return async._AsyncRun._scheduleImmediateWithTimer;
@@ -19675,7 +19676,7 @@
       dart.fn(internalCallback, VoidTodynamic$());
       ;
       _isolate_helper.enterJsAsync();
-      self.scheduleImmediate(internalCallback);
+      _isolate_helper.global.scheduleImmediate(internalCallback);
     }
     static _scheduleImmediateWithSetImmediate(callback) {
       function internalCallback() {
@@ -19685,7 +19686,7 @@
       dart.fn(internalCallback, VoidTodynamic$());
       ;
       _isolate_helper.enterJsAsync();
-      self.setImmediate(internalCallback);
+      _isolate_helper.global.setImmediate(internalCallback);
     }
     static _scheduleImmediateWithTimer(callback) {
       async.Timer._createTimer(core.Duration.ZERO, callback);
diff --git a/pkg/dev_compiler/lib/js/common/dart_sdk.js b/pkg/dev_compiler/lib/js/common/dart_sdk.js
index e3d4b45..7d85feb 100644
--- a/pkg/dev_compiler/lib/js/common/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/common/dart_sdk.js
@@ -8896,13 +8896,14 @@
           f(a, e);
         };
       })(_isolate_helper.IsolateNatives._processWorkerMessage, this.mainManager);
-      self.onmessage = func;
-      self.dartPrint = self.dartPrint || (function(serialize) {
+      _isolate_helper.global.onmessage = func;
+      _isolate_helper.global.dartPrint = _isolate_helper.global.dartPrint || (function(serialize) {
         return function(object) {
-          if (self.console && self.console.log) {
-            self.console.log(object);
+          var _self = _isolate_helper.global;
+          if (_self.console && _self.console.log) {
+            _self.console.log(object);
           } else {
-            self.postMessage(serialize(object));
+            _self.postMessage(serialize(object));
           }
         };
       })(_isolate_helper._Manager._serializePrintMessage);
@@ -9053,8 +9054,8 @@
         if (dart.test(this.errorsAreFatal) && core.identical(this, _isolate_helper._globalState.rootContext)) {
           return;
         }
-        if (self.console && self.console.error) {
-          self.console.error(error, stackTrace);
+        if (_isolate_helper.global.console && _isolate_helper.global.console.error) {
+          _isolate_helper.global.console.error(error, stackTrace);
         } else {
           core.print(error);
           if (stackTrace != null) core.print(stackTrace);
@@ -9341,13 +9342,13 @@
     methods: () => ({process: dart.definiteFunctionType(dart.void, [])})
   });
   dart.defineLazy(_isolate_helper, {
-    get _global() {
+    get global() {
       return typeof global == 'undefined' ? self : global;
     }
   });
   _isolate_helper._MainManagerStub = class _MainManagerStub extends core.Object {
     postMessage(msg) {
-      _isolate_helper._global.postMessage(msg);
+      _isolate_helper.global.postMessage(msg);
     }
   };
   dart.setSignature(_isolate_helper._MainManagerStub, {
@@ -9357,17 +9358,17 @@
   _isolate_helper._SPAWN_FAILED_SIGNAL = "spawn failed";
   dart.copyProperties(_isolate_helper, {
     get globalWindow() {
-      return _isolate_helper._global.window;
+      return _isolate_helper.global.window;
     }
   });
   dart.copyProperties(_isolate_helper, {
     get globalWorker() {
-      return _isolate_helper._global.Worker;
+      return _isolate_helper.global.Worker;
     }
   });
   dart.copyProperties(_isolate_helper, {
     get globalPostMessageDefined() {
-      return !!_isolate_helper._global.postMessage;
+      return !!_isolate_helper.global.postMessage;
     }
   });
   _isolate_helper._MainFunction = dart.typedef('_MainFunction', () => dart.functionType(dart.dynamic, []));
@@ -9501,7 +9502,7 @@
       }
     }
     static _consoleLog(msg) {
-      self.console.log(msg);
+      _isolate_helper.global.console.log(msg);
     }
     static _getJSFunctionFromName(functionName) {
       let globalFunctionsContainer = _foreign_helper.JS_EMBEDDED_GLOBAL("", _js_embedded_names.GLOBAL_FUNCTIONS);
@@ -10661,7 +10662,7 @@
         }).bind(this);
         dart.fn(internalCallback, VoidTovoid$());
         _isolate_helper.enterJsAsync();
-        this[_handle] = self.setTimeout(internalCallback, milliseconds);
+        this[_handle] = _isolate_helper.global.setTimeout(internalCallback, milliseconds);
       } else {
         dart.assert(dart.notNull(milliseconds) > 0);
         dart.throw(new core.UnsupportedError("Timer greater than 0."));
@@ -10673,7 +10674,7 @@
       this[_handle] = null;
       if (dart.test(_isolate_helper.hasTimer())) {
         _isolate_helper.enterJsAsync();
-        this[_handle] = self.setInterval(dart.fn(() => {
+        this[_handle] = _isolate_helper.global.setInterval(dart.fn(() => {
           callback(this);
         }, VoidTodynamic$()), milliseconds);
       } else {
@@ -10688,9 +10689,9 @@
         if (this[_handle] == null) return;
         _isolate_helper.leaveJsAsync();
         if (dart.test(this[_once])) {
-          self.clearTimeout(this[_handle]);
+          _isolate_helper.global.clearTimeout(this[_handle]);
         } else {
-          self.clearInterval(this[_handle]);
+          _isolate_helper.global.clearInterval(this[_handle]);
         }
         this[_handle] = null;
       } else {
@@ -10717,7 +10718,7 @@
     methods: () => ({cancel: dart.definiteFunctionType(dart.void, [])})
   });
   _isolate_helper.hasTimer = function() {
-    return self.setTimeout != null;
+    return _isolate_helper.global.setTimeout != null;
   };
   dart.lazyFn(_isolate_helper.hasTimer, () => VoidTobool());
   _isolate_helper.CapabilityImpl = class CapabilityImpl extends core.Object {
@@ -19639,12 +19640,12 @@
       async._AsyncRun._scheduleImmediateClosure(callback);
     }
     static _initializeScheduleImmediate() {
-      if (self.scheduleImmediate != null) {
+      if (_isolate_helper.global.scheduleImmediate != null) {
         return async._AsyncRun._scheduleImmediateJsOverride;
       }
-      if (self.MutationObserver != null && self.document != null) {
-        let div = self.document.createElement("div");
-        let span = self.document.createElement("span");
+      if (_isolate_helper.global.MutationObserver != null && _isolate_helper.global.document != null) {
+        let div = _isolate_helper.global.document.createElement("div");
+        let span = _isolate_helper.global.document.createElement("span");
         let storedCallback = null;
         function internalCallback(_) {
           _isolate_helper.leaveJsAsync();
@@ -19654,7 +19655,7 @@
         }
         dart.fn(internalCallback, dynamicTodynamic$());
         ;
-        let observer = new self.MutationObserver(internalCallback);
+        let observer = new _isolate_helper.global.MutationObserver(internalCallback);
         observer.observe(div, {childList: true});
         return dart.fn(callback => {
           dart.assert(storedCallback == null);
@@ -19662,7 +19663,7 @@
           storedCallback = callback;
           div.firstChild ? div.removeChild(span) : div.appendChild(span);
         }, _AsyncCallbackTovoid());
-      } else if (self.setImmediate != null) {
+      } else if (_isolate_helper.global.setImmediate != null) {
         return async._AsyncRun._scheduleImmediateWithSetImmediate;
       }
       return async._AsyncRun._scheduleImmediateWithTimer;
@@ -19675,7 +19676,7 @@
       dart.fn(internalCallback, VoidTodynamic$());
       ;
       _isolate_helper.enterJsAsync();
-      self.scheduleImmediate(internalCallback);
+      _isolate_helper.global.scheduleImmediate(internalCallback);
     }
     static _scheduleImmediateWithSetImmediate(callback) {
       function internalCallback() {
@@ -19685,7 +19686,7 @@
       dart.fn(internalCallback, VoidTodynamic$());
       ;
       _isolate_helper.enterJsAsync();
-      self.setImmediate(internalCallback);
+      _isolate_helper.global.setImmediate(internalCallback);
     }
     static _scheduleImmediateWithTimer(callback) {
       async.Timer._createTimer(core.Duration.ZERO, callback);
diff --git a/pkg/dev_compiler/lib/js/es6/dart_sdk.js b/pkg/dev_compiler/lib/js/es6/dart_sdk.js
index 9583195..18df163 100644
--- a/pkg/dev_compiler/lib/js/es6/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/es6/dart_sdk.js
@@ -8894,13 +8894,14 @@
         f(a, e);
       };
     })(_isolate_helper.IsolateNatives._processWorkerMessage, this.mainManager);
-    self.onmessage = func;
-    self.dartPrint = self.dartPrint || (function(serialize) {
+    _isolate_helper.global.onmessage = func;
+    _isolate_helper.global.dartPrint = _isolate_helper.global.dartPrint || (function(serialize) {
       return function(object) {
-        if (self.console && self.console.log) {
-          self.console.log(object);
+        var _self = _isolate_helper.global;
+        if (_self.console && _self.console.log) {
+          _self.console.log(object);
         } else {
-          self.postMessage(serialize(object));
+          _self.postMessage(serialize(object));
         }
       };
     })(_isolate_helper._Manager._serializePrintMessage);
@@ -9051,8 +9052,8 @@
       if (dart.test(this.errorsAreFatal) && core.identical(this, _isolate_helper._globalState.rootContext)) {
         return;
       }
-      if (self.console && self.console.error) {
-        self.console.error(error, stackTrace);
+      if (_isolate_helper.global.console && _isolate_helper.global.console.error) {
+        _isolate_helper.global.console.error(error, stackTrace);
       } else {
         core.print(error);
         if (stackTrace != null) core.print(stackTrace);
@@ -9339,13 +9340,13 @@
   methods: () => ({process: dart.definiteFunctionType(dart.void, [])})
 });
 dart.defineLazy(_isolate_helper, {
-  get _global() {
+  get global() {
     return typeof global == 'undefined' ? self : global;
   }
 });
 _isolate_helper._MainManagerStub = class _MainManagerStub extends core.Object {
   postMessage(msg) {
-    _isolate_helper._global.postMessage(msg);
+    _isolate_helper.global.postMessage(msg);
   }
 };
 dart.setSignature(_isolate_helper._MainManagerStub, {
@@ -9355,17 +9356,17 @@
 _isolate_helper._SPAWN_FAILED_SIGNAL = "spawn failed";
 dart.copyProperties(_isolate_helper, {
   get globalWindow() {
-    return _isolate_helper._global.window;
+    return _isolate_helper.global.window;
   }
 });
 dart.copyProperties(_isolate_helper, {
   get globalWorker() {
-    return _isolate_helper._global.Worker;
+    return _isolate_helper.global.Worker;
   }
 });
 dart.copyProperties(_isolate_helper, {
   get globalPostMessageDefined() {
-    return !!_isolate_helper._global.postMessage;
+    return !!_isolate_helper.global.postMessage;
   }
 });
 _isolate_helper._MainFunction = dart.typedef('_MainFunction', () => dart.functionType(dart.dynamic, []));
@@ -9499,7 +9500,7 @@
     }
   }
   static _consoleLog(msg) {
-    self.console.log(msg);
+    _isolate_helper.global.console.log(msg);
   }
   static _getJSFunctionFromName(functionName) {
     let globalFunctionsContainer = _foreign_helper.JS_EMBEDDED_GLOBAL("", _js_embedded_names.GLOBAL_FUNCTIONS);
@@ -10659,7 +10660,7 @@
       }).bind(this);
       dart.fn(internalCallback, VoidTovoid());
       _isolate_helper.enterJsAsync();
-      this[_handle] = self.setTimeout(internalCallback, milliseconds);
+      this[_handle] = _isolate_helper.global.setTimeout(internalCallback, milliseconds);
     } else {
       dart.assert(dart.notNull(milliseconds) > 0);
       dart.throw(new core.UnsupportedError("Timer greater than 0."));
@@ -10671,7 +10672,7 @@
     this[_handle] = null;
     if (dart.test(_isolate_helper.hasTimer())) {
       _isolate_helper.enterJsAsync();
-      this[_handle] = self.setInterval(dart.fn(() => {
+      this[_handle] = _isolate_helper.global.setInterval(dart.fn(() => {
         callback(this);
       }, VoidTodynamic()), milliseconds);
     } else {
@@ -10686,9 +10687,9 @@
       if (this[_handle] == null) return;
       _isolate_helper.leaveJsAsync();
       if (dart.test(this[_once])) {
-        self.clearTimeout(this[_handle]);
+        _isolate_helper.global.clearTimeout(this[_handle]);
       } else {
-        self.clearInterval(this[_handle]);
+        _isolate_helper.global.clearInterval(this[_handle]);
       }
       this[_handle] = null;
     } else {
@@ -10715,7 +10716,7 @@
   methods: () => ({cancel: dart.definiteFunctionType(dart.void, [])})
 });
 _isolate_helper.hasTimer = function() {
-  return self.setTimeout != null;
+  return _isolate_helper.global.setTimeout != null;
 };
 dart.lazyFn(_isolate_helper.hasTimer, () => VoidTobool());
 _isolate_helper.CapabilityImpl = class CapabilityImpl extends core.Object {
@@ -19637,12 +19638,12 @@
     async._AsyncRun._scheduleImmediateClosure(callback);
   }
   static _initializeScheduleImmediate() {
-    if (self.scheduleImmediate != null) {
+    if (_isolate_helper.global.scheduleImmediate != null) {
       return async._AsyncRun._scheduleImmediateJsOverride;
     }
-    if (self.MutationObserver != null && self.document != null) {
-      let div = self.document.createElement("div");
-      let span = self.document.createElement("span");
+    if (_isolate_helper.global.MutationObserver != null && _isolate_helper.global.document != null) {
+      let div = _isolate_helper.global.document.createElement("div");
+      let span = _isolate_helper.global.document.createElement("span");
       let storedCallback = null;
       function internalCallback(_) {
         _isolate_helper.leaveJsAsync();
@@ -19652,7 +19653,7 @@
       }
       dart.fn(internalCallback, dynamicTodynamic());
       ;
-      let observer = new self.MutationObserver(internalCallback);
+      let observer = new _isolate_helper.global.MutationObserver(internalCallback);
       observer.observe(div, {childList: true});
       return dart.fn(callback => {
         dart.assert(storedCallback == null);
@@ -19660,7 +19661,7 @@
         storedCallback = callback;
         div.firstChild ? div.removeChild(span) : div.appendChild(span);
       }, _AsyncCallbackTovoid());
-    } else if (self.setImmediate != null) {
+    } else if (_isolate_helper.global.setImmediate != null) {
       return async._AsyncRun._scheduleImmediateWithSetImmediate;
     }
     return async._AsyncRun._scheduleImmediateWithTimer;
@@ -19673,7 +19674,7 @@
     dart.fn(internalCallback, VoidTodynamic());
     ;
     _isolate_helper.enterJsAsync();
-    self.scheduleImmediate(internalCallback);
+    _isolate_helper.global.scheduleImmediate(internalCallback);
   }
   static _scheduleImmediateWithSetImmediate(callback) {
     function internalCallback() {
@@ -19683,7 +19684,7 @@
     dart.fn(internalCallback, VoidTodynamic());
     ;
     _isolate_helper.enterJsAsync();
-    self.setImmediate(internalCallback);
+    _isolate_helper.global.setImmediate(internalCallback);
   }
   static _scheduleImmediateWithTimer(callback) {
     async.Timer._createTimer(core.Duration.ZERO, callback);
diff --git a/pkg/dev_compiler/lib/js/legacy/dart_sdk.js b/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
index 49d9cf7..150f440 100644
--- a/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
@@ -8897,13 +8897,14 @@
           f(a, e);
         };
       })(_isolate_helper.IsolateNatives._processWorkerMessage, this.mainManager);
-      self.onmessage = func;
-      self.dartPrint = self.dartPrint || (function(serialize) {
+      _isolate_helper.global.onmessage = func;
+      _isolate_helper.global.dartPrint = _isolate_helper.global.dartPrint || (function(serialize) {
         return function(object) {
-          if (self.console && self.console.log) {
-            self.console.log(object);
+          var _self = _isolate_helper.global;
+          if (_self.console && _self.console.log) {
+            _self.console.log(object);
           } else {
-            self.postMessage(serialize(object));
+            _self.postMessage(serialize(object));
           }
         };
       })(_isolate_helper._Manager._serializePrintMessage);
@@ -9054,8 +9055,8 @@
         if (dart.test(this.errorsAreFatal) && core.identical(this, _isolate_helper._globalState.rootContext)) {
           return;
         }
-        if (self.console && self.console.error) {
-          self.console.error(error, stackTrace);
+        if (_isolate_helper.global.console && _isolate_helper.global.console.error) {
+          _isolate_helper.global.console.error(error, stackTrace);
         } else {
           core.print(error);
           if (stackTrace != null) core.print(stackTrace);
@@ -9342,13 +9343,13 @@
     methods: () => ({process: dart.definiteFunctionType(dart.void, [])})
   });
   dart.defineLazy(_isolate_helper, {
-    get _global() {
+    get global() {
       return typeof global == 'undefined' ? self : global;
     }
   });
   _isolate_helper._MainManagerStub = class _MainManagerStub extends core.Object {
     postMessage(msg) {
-      _isolate_helper._global.postMessage(msg);
+      _isolate_helper.global.postMessage(msg);
     }
   };
   dart.setSignature(_isolate_helper._MainManagerStub, {
@@ -9358,17 +9359,17 @@
   _isolate_helper._SPAWN_FAILED_SIGNAL = "spawn failed";
   dart.copyProperties(_isolate_helper, {
     get globalWindow() {
-      return _isolate_helper._global.window;
+      return _isolate_helper.global.window;
     }
   });
   dart.copyProperties(_isolate_helper, {
     get globalWorker() {
-      return _isolate_helper._global.Worker;
+      return _isolate_helper.global.Worker;
     }
   });
   dart.copyProperties(_isolate_helper, {
     get globalPostMessageDefined() {
-      return !!_isolate_helper._global.postMessage;
+      return !!_isolate_helper.global.postMessage;
     }
   });
   _isolate_helper._MainFunction = dart.typedef('_MainFunction', () => dart.functionType(dart.dynamic, []));
@@ -9502,7 +9503,7 @@
       }
     }
     static _consoleLog(msg) {
-      self.console.log(msg);
+      _isolate_helper.global.console.log(msg);
     }
     static _getJSFunctionFromName(functionName) {
       let globalFunctionsContainer = _foreign_helper.JS_EMBEDDED_GLOBAL("", _js_embedded_names.GLOBAL_FUNCTIONS);
@@ -10662,7 +10663,7 @@
         }).bind(this);
         dart.fn(internalCallback, VoidTovoid$());
         _isolate_helper.enterJsAsync();
-        this[_handle] = self.setTimeout(internalCallback, milliseconds);
+        this[_handle] = _isolate_helper.global.setTimeout(internalCallback, milliseconds);
       } else {
         dart.assert(dart.notNull(milliseconds) > 0);
         dart.throw(new core.UnsupportedError("Timer greater than 0."));
@@ -10674,7 +10675,7 @@
       this[_handle] = null;
       if (dart.test(_isolate_helper.hasTimer())) {
         _isolate_helper.enterJsAsync();
-        this[_handle] = self.setInterval(dart.fn(() => {
+        this[_handle] = _isolate_helper.global.setInterval(dart.fn(() => {
           callback(this);
         }, VoidTodynamic$()), milliseconds);
       } else {
@@ -10689,9 +10690,9 @@
         if (this[_handle] == null) return;
         _isolate_helper.leaveJsAsync();
         if (dart.test(this[_once])) {
-          self.clearTimeout(this[_handle]);
+          _isolate_helper.global.clearTimeout(this[_handle]);
         } else {
-          self.clearInterval(this[_handle]);
+          _isolate_helper.global.clearInterval(this[_handle]);
         }
         this[_handle] = null;
       } else {
@@ -10718,7 +10719,7 @@
     methods: () => ({cancel: dart.definiteFunctionType(dart.void, [])})
   });
   _isolate_helper.hasTimer = function() {
-    return self.setTimeout != null;
+    return _isolate_helper.global.setTimeout != null;
   };
   dart.lazyFn(_isolate_helper.hasTimer, () => VoidTobool());
   _isolate_helper.CapabilityImpl = class CapabilityImpl extends core.Object {
@@ -19640,12 +19641,12 @@
       async._AsyncRun._scheduleImmediateClosure(callback);
     }
     static _initializeScheduleImmediate() {
-      if (self.scheduleImmediate != null) {
+      if (_isolate_helper.global.scheduleImmediate != null) {
         return async._AsyncRun._scheduleImmediateJsOverride;
       }
-      if (self.MutationObserver != null && self.document != null) {
-        let div = self.document.createElement("div");
-        let span = self.document.createElement("span");
+      if (_isolate_helper.global.MutationObserver != null && _isolate_helper.global.document != null) {
+        let div = _isolate_helper.global.document.createElement("div");
+        let span = _isolate_helper.global.document.createElement("span");
         let storedCallback = null;
         function internalCallback(_) {
           _isolate_helper.leaveJsAsync();
@@ -19655,7 +19656,7 @@
         }
         dart.fn(internalCallback, dynamicTodynamic$());
         ;
-        let observer = new self.MutationObserver(internalCallback);
+        let observer = new _isolate_helper.global.MutationObserver(internalCallback);
         observer.observe(div, {childList: true});
         return dart.fn(callback => {
           dart.assert(storedCallback == null);
@@ -19663,7 +19664,7 @@
           storedCallback = callback;
           div.firstChild ? div.removeChild(span) : div.appendChild(span);
         }, _AsyncCallbackTovoid());
-      } else if (self.setImmediate != null) {
+      } else if (_isolate_helper.global.setImmediate != null) {
         return async._AsyncRun._scheduleImmediateWithSetImmediate;
       }
       return async._AsyncRun._scheduleImmediateWithTimer;
@@ -19676,7 +19677,7 @@
       dart.fn(internalCallback, VoidTodynamic$());
       ;
       _isolate_helper.enterJsAsync();
-      self.scheduleImmediate(internalCallback);
+      _isolate_helper.global.scheduleImmediate(internalCallback);
     }
     static _scheduleImmediateWithSetImmediate(callback) {
       function internalCallback() {
@@ -19686,7 +19687,7 @@
       dart.fn(internalCallback, VoidTodynamic$());
       ;
       _isolate_helper.enterJsAsync();
-      self.setImmediate(internalCallback);
+      _isolate_helper.global.setImmediate(internalCallback);
     }
     static _scheduleImmediateWithTimer(callback) {
       async.Timer._createTimer(core.Duration.ZERO, callback);
diff --git a/pkg/dev_compiler/lib/sdk/ddc_sdk.sum b/pkg/dev_compiler/lib/sdk/ddc_sdk.sum
index 3eb77ba..8f5fe06 100644
--- a/pkg/dev_compiler/lib/sdk/ddc_sdk.sum
+++ b/pkg/dev_compiler/lib/sdk/ddc_sdk.sum
Binary files differ
diff --git a/pkg/dev_compiler/lib/src/compiler/code_generator.dart b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
index d973207..b2f28d0 100644
--- a/pkg/dev_compiler/lib/src/compiler/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/standard_ast_factory.dart';
 import 'package:analyzer/dart/ast/token.dart' show Token, TokenType;
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/ast/token.dart' show StringToken;
@@ -192,7 +193,10 @@
   List<int> _summarizeModule(List<CompilationUnit> units) {
     if (!options.summarizeApi) return null;
 
-    if (!units.any((u) => u.element.librarySource.isInSystemLibrary)) {
+    if (!units.any((u) => resolutionMap
+        .elementDeclaredByCompilationUnit(u)
+        .librarySource
+        .isInSystemLibrary)) {
       var sdk = context.sourceFactory.dartSdk;
       summaryData.addBundle(
           null,
@@ -234,7 +238,8 @@
     // Transform the AST to make coercions explicit.
     compilationUnits = CoercionReifier.reify(compilationUnits);
 
-    if (compilationUnits.any((u) => _isDartRuntime(u.element.library))) {
+    if (compilationUnits.any((u) => _isDartRuntime(
+        resolutionMap.elementDeclaredByCompilationUnit(u).library))) {
       // Don't allow these to be renamed when we're building the SDK.
       // There is JS code in dart:* that depends on their names.
       _runtimeModule = new JS.Identifier('dart');
@@ -249,7 +254,8 @@
     // Initialize our library variables.
     var items = <JS.ModuleItem>[];
     for (var unit in compilationUnits) {
-      var library = unit.element.library;
+      var library =
+          resolutionMap.elementDeclaredByCompilationUnit(unit).library;
       if (unit.element != library.definingCompilationUnit) continue;
 
       var libraryTemp = _isDartRuntime(library)
@@ -272,15 +278,19 @@
     var nodes = new HashMap<Element, AstNode>.identity();
     var sdkBootstrappingFns = new List<FunctionElement>();
     for (var unit in compilationUnits) {
-      if (_isDartRuntime(unit.element.library)) {
-        sdkBootstrappingFns.addAll(unit.element.functions);
+      if (_isDartRuntime(
+          resolutionMap.elementDeclaredByCompilationUnit(unit).library)) {
+        sdkBootstrappingFns.addAll(
+            resolutionMap.elementDeclaredByCompilationUnit(unit).functions);
       }
       _collectElements(unit, nodes);
     }
     _loader = new ElementLoader(nodes);
     if (compilationUnits.isNotEmpty) {
       _constants = new ConstFieldVisitor(context,
-          dummySource: compilationUnits.first.element.source);
+          dummySource: resolutionMap
+              .elementDeclaredByCompilationUnit(compilationUnits.first)
+              .source);
     }
 
     // Add implicit dart:core dependency so it is first.
@@ -728,7 +738,7 @@
 
   @override
   JS.Statement visitClassDeclaration(ClassDeclaration node) {
-    var classElem = node.element;
+    var classElem = resolutionMap.elementDeclaredByClassDeclaration(node);
 
     // If this class is annotated with `@JS`, then there is nothing to emit.
     if (findAnnotation(classElem, isPublicJSAnnotation) != null) return null;
@@ -742,7 +752,8 @@
     var staticFields = <FieldDeclaration>[];
     var methods = <MethodDeclaration>[];
 
-    // True if a "call" method or getter exists.
+    // True if a "call" method or getter exists directly on this class.
+    // If so, we need to install a Function prototype.
     bool isCallable = false;
     for (var member in node.members) {
       if (member is ConstructorDeclaration) {
@@ -770,6 +781,16 @@
       }
     }
 
+    // True if a "call" method or getter exists directly or indirectly on this
+    // class.  If so, we need special constructor handling.
+    bool isCallableTransitive =
+        classElem.lookUpMethod('call', currentLibrary) != null;
+    if (!isCallableTransitive) {
+      var callGetter = classElem.lookUpGetter('call', currentLibrary);
+      isCallableTransitive =
+          callGetter != null && callGetter.returnType is FunctionType;
+    }
+
     JS.Expression className;
     if (classElem.typeParameters.isNotEmpty) {
       // Generic classes will be defined inside a function that closes over the
@@ -806,7 +827,7 @@
 
     _emitClassTypeTests(classElem, className, body);
 
-    _defineNamedConstructors(ctors, body, className, isCallable);
+    _defineNamedConstructors(ctors, body, className, isCallableTransitive);
     body.addAll(virtualFieldSymbols);
     _emitClassSignature(
         methods, allFields, classElem, ctors, extensions, className, body);
@@ -1110,14 +1131,16 @@
                 new JS.Identifier(
                     // TODO(ochafik): use a refactored _emitMemberName instead.
                     decl.name.name,
-                    type: emitTypeRef(decl.element.type)),
+                    type: emitTypeRef(resolutionMap
+                        .elementDeclaredByVariableDeclaration(decl)
+                        .type)),
                 null))
             .toList(growable: false));
   }
 
   @override
   JS.Statement visitEnumDeclaration(EnumDeclaration node) {
-    var element = node.element;
+    var element = resolutionMap.elementDeclaredByEnumDeclaration(node);
     var type = element.type;
 
     // Generate a class per section 13 of the spec.
@@ -1288,7 +1311,7 @@
       List<FieldDeclaration> fields,
       List<ClassElement> superclasses,
       Map<FieldElement, JS.TemporaryId> virtualFields) {
-    var element = node.element;
+    var element = resolutionMap.elementDeclaredByClassDeclaration(node);
     var type = element.type;
     var isObject = type.isObject;
 
@@ -1768,7 +1791,7 @@
     var sNames = <JS.Expression>[];
     for (MethodDeclaration node in methods) {
       var name = node.name.name;
-      var element = node.element;
+      var element = resolutionMap.elementDeclaredByMethodDeclaration(node);
       // TODO(vsm): Clean up all the nasty duplication.
       if (node.isAbstract) {
         continue;
@@ -1823,7 +1846,7 @@
     var tCtors = <JS.Property>[];
     for (ConstructorDeclaration node in ctors) {
       var memberName = _constructorName(node.element);
-      var element = node.element;
+      var element = resolutionMap.elementDeclaredByConstructorDeclaration(node);
       var type = _emitAnnotatedFunctionType(element.type, node.metadata,
           parameters: node.parameters.parameters,
           nameType: options.hoistSignatureTypes,
@@ -1895,7 +1918,9 @@
     if (_extensionTypes.hasNativeSubtype(classElem.type)) {
       var dartxNames = <JS.Expression>[];
       for (var m in methods) {
-        if (!m.isAbstract && !m.isStatic && m.element.isPublic) {
+        if (!m.isAbstract &&
+            !m.isStatic &&
+            resolutionMap.elementDeclaredByMethodDeclaration(m).isPublic) {
           dartxNames.add(_declareMemberName(m.element, useExtension: false));
         }
       }
@@ -1957,7 +1982,9 @@
     if (superCall != null) {
       body.add(superCall);
     }
-    var name = _constructorName(node.element.unnamedConstructor);
+    var name = _constructorName(resolutionMap
+        .elementDeclaredByClassDeclaration(node)
+        .unnamedConstructor);
     return annotate(
         new JS.Method(name, js.call('function() { #; }', [body]) as JS.Fun),
         node,
@@ -1973,12 +2000,18 @@
     if (_externalOrNative(node)) return null;
 
     var name = _constructorName(node.element);
-    var returnType = emitTypeRef(node.element.enclosingElement.type);
+    var returnType = emitTypeRef(resolutionMap
+        .elementDeclaredByConstructorDeclaration(node)
+        .enclosingElement
+        .type);
 
     // Wacky factory redirecting constructors: factory Foo.q(x, y) = Bar.baz;
     var redirect = node.redirectedConstructor;
     if (redirect != null) {
-      var newKeyword = redirect.staticElement.isFactory ? '' : 'new';
+      var newKeyword =
+          resolutionMap.staticElementForConstructorReference(redirect).isFactory
+              ? ''
+              : 'new';
       // Pass along all arguments verbatim, and let the callee handle them.
       // TODO(jmesserly): we'll need something different once we have
       // rest/spread support, but this should work for now.
@@ -2087,7 +2120,7 @@
   @override
   JS.Statement visitRedirectingConstructorInvocation(
       RedirectingConstructorInvocation node) {
-    var ctor = node.staticElement;
+    var ctor = resolutionMap.staticElementForConstructorReference(node);
     var cls = ctor.enclosingElement;
     // We can't dispatch to the constructor with `this.new` as that might hit a
     // derived class constructor with the same name.
@@ -2264,9 +2297,11 @@
 
       // TODO(jmesserly): various problems here, see:
       // https://github.com/dart-lang/dev_compiler/issues/116
-      var paramType = param.element.type;
+      var paramType =
+          resolutionMap.elementDeclaredByFormalParameter(param).type;
       if (node is MethodDeclaration &&
-          (param.element.isCovariant || _unsoundCovariant(paramType, true)) &&
+          (resolutionMap.elementDeclaredByFormalParameter(param).isCovariant ||
+              _unsoundCovariant(paramType, true)) &&
           !_inWhitelistCode(node)) {
         var castType = _emitType(paramType,
             nameType: options.nameTypeTests || options.hoistTypeTests,
@@ -2411,7 +2446,7 @@
       fn = _simplifyPassThroughArrowFunCallBody(fn);
     }
 
-    var element = node.element;
+    var element = resolutionMap.elementDeclaredByFunctionDeclaration(node);
     var nameExpr = _emitTopLevelName(element);
     body.add(annotate(js.statement('# = #', [nameExpr, fn]), node, element));
     if (!_isDartRuntime(element.library)) {
@@ -2679,7 +2714,9 @@
 
     return new JS.Block([
       declareFn,
-      _emitFunctionTagged(name, func.element.type).toStatement()
+      _emitFunctionTagged(name,
+              resolutionMap.elementDeclaredByFunctionDeclaration(func).type)
+          .toStatement()
     ]);
   }
 
@@ -2699,7 +2736,7 @@
   /// going through the qualified library name if necessary, but *not* handling
   /// inferred generic function instantiation.
   JS.Expression _emitSimpleIdentifier(SimpleIdentifier node) {
-    var accessor = node.staticElement;
+    var accessor = resolutionMap.staticElementForIdentifier(node);
     if (accessor == null) {
       return js.commentExpression(
           'Unimplemented unknown name', new JS.Identifier(node.name));
@@ -3230,7 +3267,7 @@
       return _badAssignment("Unimplemented: unknown name '$node'", node, rhs);
     }
 
-    var accessor = node.staticElement;
+    var accessor = resolutionMap.staticElementForIdentifier(node);
     if (accessor == null) return unimplemented();
 
     // Get the original declaring element. If we had a property accessor, this
@@ -3392,7 +3429,7 @@
       return _emitFunctionCall(node);
     }
     if (node.methodName.name == 'call') {
-      var targetType = target.staticType;
+      var targetType = resolutionMap.staticTypeForExpression(target);
       if (targetType is FunctionType) {
         // Call methods on function types should be handled as regular function
         // invocations.
@@ -3866,8 +3903,9 @@
       return _emitTopLevelField(node);
     }
 
-    var name =
-        new JS.Identifier(node.name.name, type: emitTypeRef(node.element.type));
+    var name = new JS.Identifier(node.name.name,
+        type: emitTypeRef(
+            resolutionMap.elementDeclaredByVariableDeclaration(node).type));
     return new JS.VariableInitialization(name, _visitInitializer(node));
   }
 
@@ -4084,7 +4122,7 @@
 
   @override
   visitInstanceCreationExpression(InstanceCreationExpression node) {
-    var element = node.staticElement;
+    var element = resolutionMap.staticElementForConstructorReference(node);
     var constructor = node.constructorName;
     var name = constructor.name;
     var type = constructor.type.type;
@@ -5773,7 +5811,9 @@
   var prefix = targetIdentifier.staticElement as PrefixElement;
 
   // The library the prefix is referring to must come from a deferred import.
-  var containingLibrary = (target.root as CompilationUnit).element.library;
+  var containingLibrary = resolutionMap
+      .elementDeclaredByCompilationUnit(target.root as CompilationUnit)
+      .library;
   var imports = containingLibrary.getImportsWithPrefix(prefix);
   return imports.length == 1 && imports[0].isDeferred;
 }
diff --git a/pkg/dev_compiler/lib/src/compiler/command.dart b/pkg/dev_compiler/lib/src/compiler/command.dart
index 221e7d4..878070f 100644
--- a/pkg/dev_compiler/lib/src/compiler/command.dart
+++ b/pkg/dev_compiler/lib/src/compiler/command.dart
@@ -24,9 +24,7 @@
             'Generated module paths are relative to this root.')
     ..addOption('library-root',
         help: 'Root of source files.\n'
-            'Generated library names are relative to this root.')
-    ..addOption('build-root',
-        help: 'Deprecated in favor of --library-root', hide: true);
+            'Generated library names are relative to this root.');
   addModuleFormatOptions(argParser, allowMultiple: true);
   AnalyzerOptions.addArguments(argParser);
   CompilerOptions.addArguments(argParser);
@@ -125,7 +123,6 @@
   var firstOutPath = outPaths[0];
 
   var libraryRoot = argResults['library-root'] as String;
-  libraryRoot ??= argResults['build-root'] as String;
   if (libraryRoot != null) {
     libraryRoot = path.absolute(libraryRoot);
   } else {
diff --git a/pkg/dev_compiler/lib/src/compiler/error_helpers.dart b/pkg/dev_compiler/lib/src/compiler/error_helpers.dart
index 091ab62..ec730d3 100644
--- a/pkg/dev_compiler/lib/src/compiler/error_helpers.dart
+++ b/pkg/dev_compiler/lib/src/compiler/error_helpers.dart
@@ -60,6 +60,8 @@
   // * it can return null
   // * using AnalysisError directly is now suspect, it's a correctness trap
   // * it requires an AnalysisContext
-  return ErrorProcessor.getProcessor(context, error)?.severity ??
+  return ErrorProcessor
+          .getProcessor(context.analysisOptions, error)
+          ?.severity ??
       error.errorCode.errorSeverity;
 }
diff --git a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
index 8e341fe..3645dc1 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
@@ -333,6 +333,7 @@
   bool hasYield = false;
   bool hasThis = false;
   bool _nestedFunction = false;
+
   @override
   visitThis(This node) {
     hasThis = true;
@@ -353,6 +354,7 @@
 
   @override
   visitNode(Node node) {
-    if (!hasYield) super.visitNode(node);
+    if (hasYield && hasThis) return; // found both, nothing more to do.
+    super.visitNode(node);
   }
 }
diff --git a/pkg/dev_compiler/lib/src/compiler/nullable_type_inference.dart b/pkg/dev_compiler/lib/src/compiler/nullable_type_inference.dart
index 39f0130..3934503 100644
--- a/pkg/dev_compiler/lib/src/compiler/nullable_type_inference.dart
+++ b/pkg/dev_compiler/lib/src/compiler/nullable_type_inference.dart
@@ -4,6 +4,7 @@
 
 import 'dart:collection';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart' show TokenType;
 import 'package:analyzer/dart/ast/visitor.dart' show RecursiveAstVisitor;
 import 'package:analyzer/dart/element/element.dart';
@@ -121,7 +122,7 @@
       return _isNullable(expr.expression, localIsNullable);
     }
     if (expr is InstanceCreationExpression) {
-      var e = expr.staticElement;
+      var e = resolutionMap.staticElementForConstructorReference(expr);
       if (e == null) return true;
 
       // Follow redirects.
@@ -165,7 +166,7 @@
     if (expr is MethodInvocation) {
       // TODO(vsm): This logic overlaps with the resolver.
       // Where is the best place to put this?
-      var e = expr.methodName.staticElement;
+      var e = resolutionMap.staticElementForIdentifier(expr.methodName);
       if (isInlineJS(e)) {
         // Fix types for JS builtin calls.
         //
diff --git a/pkg/dev_compiler/lib/src/compiler/source_map_printer.dart b/pkg/dev_compiler/lib/src/compiler/source_map_printer.dart
index 3a12972..3320e8d 100644
--- a/pkg/dev_compiler/lib/src/compiler/source_map_printer.dart
+++ b/pkg/dev_compiler/lib/src/compiler/source_map_printer.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:source_maps/source_maps.dart' hide Printer;
 import 'package:source_span/source_span.dart' show SourceLocation;
 
@@ -48,7 +49,8 @@
       // parts.
       _currentTopLevelDeclaration = node;
       unit = node.getAncestor((n) => n is CompilationUnit);
-      sourcePath = unit.element.source.fullName;
+      sourcePath =
+          resolutionMap.elementDeclaredByCompilationUnit(unit).source.fullName;
     }
 
     _mark(node.offset, _getIdentifier(node));
diff --git a/pkg/dev_compiler/test/browser/language_tests.js b/pkg/dev_compiler/test/browser/language_tests.js
index b0b2378..b6f80b8 100644
--- a/pkg/dev_compiler/test/browser/language_tests.js
+++ b/pkg/dev_compiler/test/browser/language_tests.js
@@ -211,6 +211,7 @@
       'identical_closure2_test': skip_fail,
       'infinite_switch_label_test': skip_fail,
       'infinity_test': skip_fail,
+      'initializing_formal_final_test': skip_fail,
       'instance_creation_in_function_annotation_test': skip_fail,
       'instanceof2_test': fail,
       'instanceof4_test_01_multi': fail,
diff --git a/pkg/dev_compiler/test/codegen_test.dart b/pkg/dev_compiler/test/codegen_test.dart
index 4df5f64..6e2df13 100644
--- a/pkg/dev_compiler/test/codegen_test.dart
+++ b/pkg/dev_compiler/test/codegen_test.dart
@@ -244,10 +244,16 @@
   var testFiles = <String>[];
 
   for (var testDir in testDirs) {
-    for (var file
-        in _listFiles(path.join(codegenDir, testDir), recursive: false)) {
-      var relativePath = path.relative(file, from: codegenDir);
-      var outputPath = path.join(codegenTestDir, relativePath);
+    // Look for the tests in the "_strong" directories in the SDK's main
+    // "tests" directory.
+    var dirParts = path.split(testDir);
+    var sdkTestDir =
+        path.join(dirParts[0] + "_strong", path.joinAll(dirParts.skip(1)));
+    var inputPath = path.join(testDirectory, '../../../tests/', sdkTestDir);
+
+    for (var file in _listFiles(inputPath, recursive: false)) {
+      var relativePath = path.relative(file, from: inputPath);
+      var outputPath = path.join(codegenTestDir, testDir, relativePath);
 
       _ensureDirectory(path.dirname(outputPath));
 
diff --git a/pkg/dev_compiler/test/not_yet_strong_tests.dart b/pkg/dev_compiler/test/not_yet_strong_tests.dart
index 0769af7..db8b461 100644
--- a/pkg/dev_compiler/test/not_yet_strong_tests.dart
+++ b/pkg/dev_compiler/test/not_yet_strong_tests.dart
@@ -2307,6 +2307,7 @@
   'language/getter_override2_test_00_multi',
   'language/getters_setters_test',
   'language/import_combinators_negative_test',
+  'language/initializing_formal_type_test',
   'language/inst_field_initializer1_negative_test',
   'language/instance_call_wrong_argument_count_negative_test',
   'language/instance_method2_negative_test',
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/async_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/async_patch.dart
index b49a23b..cd898d0 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/async_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/async_patch.dart
@@ -10,6 +10,7 @@
 import 'dart:_isolate_helper' show
     IsolateNatives,
     TimerImpl,
+    global,
     leaveJsAsync,
     enterJsAsync,
     isWorker;
@@ -33,14 +34,14 @@
   static _TakeCallback _initializeScheduleImmediate() {
     // TODO(rnystrom): Not needed by dev_compiler.
     // requiresPreamble();
-    if (JS('', 'self.scheduleImmediate') != null) {
+    if (JS('', '#.scheduleImmediate', global) != null) {
       return _scheduleImmediateJsOverride;
     }
-    if (JS('', 'self.MutationObserver') != null &&
-        JS('', 'self.document') != null) {
+    if (JS('', '#.MutationObserver', global) != null &&
+        JS('', '#.document', global) != null) {
       // Use mutationObservers.
-      var div = JS('', 'self.document.createElement("div")');
-      var span = JS('', 'self.document.createElement("span")');
+      var div = JS('', '#.document.createElement("div")', global);
+      var span = JS('', '#.document.createElement("span")', global);
       _Callback storedCallback;
 
       internalCallback(_) {
@@ -50,7 +51,7 @@
         f();
       };
 
-      var observer = JS('', 'new self.MutationObserver(#)', internalCallback);
+      var observer = JS('', 'new #.MutationObserver(#)', global, internalCallback);
       JS('', '#.observe(#, { childList: true })',
           observer, div);
 
@@ -64,7 +65,7 @@
         JS('', '#.firstChild ? #.removeChild(#): #.appendChild(#)',
             div, div, span, div, span);
       };
-    } else if (JS('', 'self.setImmediate') != null) {
+    } else if (JS('', '#.setImmediate', global) != null) {
       return _scheduleImmediateWithSetImmediate;
     }
     // TODO(20055): We should use DOM promises when available.
@@ -77,7 +78,7 @@
       callback();
     };
     enterJsAsync();
-    JS('void', 'self.scheduleImmediate(#)', internalCallback);
+    JS('void', '#.scheduleImmediate(#)', global, internalCallback);
   }
 
   static void _scheduleImmediateWithSetImmediate(void callback()) {
@@ -86,7 +87,7 @@
       callback();
     };
     enterJsAsync();
-    JS('void', 'self.setImmediate(#)', internalCallback);
+    JS('void', '#.setImmediate(#)', global, internalCallback);
   }
 
   static void _scheduleImmediateWithTimer(void callback()) {
diff --git a/pkg/dev_compiler/tool/input_sdk/private/isolate_helper.dart b/pkg/dev_compiler/tool/input_sdk/private/isolate_helper.dart
index bb56c25..975dde7 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/isolate_helper.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/isolate_helper.dart
@@ -245,18 +245,19 @@
         "(function (f, a) { return function (e) { f(a, e); }})(#, #)",
         IsolateNatives._processWorkerMessage,
         mainManager);
-    JS("void", r"self.onmessage = #", function);
+    JS("void", r"#.onmessage = #", global, function);
     // We ensure dartPrint is defined so that the implementation of the Dart
     // print method knows what to call.
-    JS('', '''self.dartPrint = self.dartPrint || (function(serialize) {
+    JS('', '''#.dartPrint = #.dartPrint || (function(serialize) {
   return function (object) {
-    if (self.console && self.console.log) {
-      self.console.log(object)
+    var _self = #;
+    if (_self.console && _self.console.log) {
+      _self.console.log(object)
     } else {
-      self.postMessage(serialize(object));
+      _self.postMessage(serialize(object));
     }
   }
-})(#)''', _serializePrintMessage);
+})(#)''', global, global, global, _serializePrintMessage);
   }
 
   static _serializePrintMessage(object) {
@@ -429,8 +430,8 @@
         // don't print it.
         return;
       }
-      if (JS('bool', 'self.console && self.console.error')) {
-        JS('void', 'self.console.error(#, #)', error, stackTrace);
+      if (JS('bool', '#.console && #.console.error', global, global)) {
+        JS('void', '#.console.error(#, #)', global, error, stackTrace);
       } else {
         print(error);
         if (stackTrace != null) print(stackTrace);
@@ -700,13 +701,13 @@
 //
 // See: http://www.w3.org/TR/workers/#the-global-scope
 // and: http://www.w3.org/TR/Window/#dfn-self-attribute
-final _global =
+final global =
   JS("", "typeof global == 'undefined' ? self : global");
 
 /** A stub for interacting with the main manager. */
 class _MainManagerStub {
   void postMessage(msg) {
-    JS("void", r"#.postMessage(#)", _global, msg);
+    JS("void", r"#.postMessage(#)", global, msg);
   }
 }
 
@@ -714,14 +715,14 @@
 const String _SPAWN_FAILED_SIGNAL = "spawn failed";
 
 get globalWindow {
-  return JS('', "#.window", _global);
+  return JS('', "#.window", global);
 }
 
 get globalWorker {
-  return JS('', "#.Worker", _global);
+  return JS('', "#.Worker", global);
 }
 bool get globalPostMessageDefined {
-  return JS('bool', "!!#.postMessage", _global);
+  return JS('bool', "!!#.postMessage", global);
 }
 
 typedef _MainFunction();
@@ -906,7 +907,7 @@
   }
 
   static void _consoleLog(msg) {
-    JS("void", r"self.console.log(#)", msg);
+    JS("void", r"#.console.log(#)", global, msg);
   }
 
   static _getJSFunctionFromName(String functionName) {
@@ -1372,7 +1373,7 @@
       enterJsAsync();
 
       _handle = JS(
-          'int', 'self.setTimeout(#, #)', internalCallback, milliseconds);
+          'int', '#.setTimeout(#, #)', global, internalCallback, milliseconds);
     } else {
       assert(milliseconds > 0);
       throw new UnsupportedError("Timer greater than 0.");
@@ -1383,8 +1384,8 @@
       : _once = false {
     if (hasTimer()) {
       enterJsAsync();
-      _handle = JS('int', 'self.setInterval(#, #)',
-          () { callback(this); }, milliseconds);
+      _handle = JS('int', '#.setInterval(#, #)',
+          global, () { callback(this); }, milliseconds);
     } else {
       throw new UnsupportedError("Periodic timer.");
     }
@@ -1398,9 +1399,9 @@
       if (_handle == null) return;
       leaveJsAsync();
       if (_once) {
-        JS('void', 'self.clearTimeout(#)', _handle);
+        JS('void', '#.clearTimeout(#)', global, _handle);
       } else {
-        JS('void', 'self.clearInterval(#)', _handle);
+        JS('void', '#.clearInterval(#)', global, _handle);
       }
       _handle = null;
     } else {
@@ -1412,7 +1413,7 @@
 }
 
 bool hasTimer() {
-  return JS('', 'self.setTimeout') != null;
+  return JS('', '#.setTimeout', global) != null;
 }
 
 
diff --git a/pkg/front_end/lib/compiler_options.dart b/pkg/front_end/lib/compiler_options.dart
index ac75dd1..55b6c90 100644
--- a/pkg/front_end/lib/compiler_options.dart
+++ b/pkg/front_end/lib/compiler_options.dart
@@ -97,4 +97,22 @@
   /// [packagesFilePath], the packages file is located using the actual physical
   /// file system.  TODO(paulberry): fix this.
   FileSystem fileSystem = PhysicalFileSystem.instance;
+
+  /// Whether to generate code for the SDK when compiling a whole-program.
+  bool compileSdk = false;
+
+  /// Whether a modular build compiles only the files listed explicitly or if it
+  /// compiles dependencies as well.
+  ///
+  /// This option is intended only for modular APIs like `kernelForBuildUnit`.
+  /// These APIs by default ensure that builds are hermetic, where all files
+  /// that will be compiled are listed explicitly and all other dependencies
+  /// are covered by summary files.
+  ///
+  /// When this option is true, these APIs will treat any dependency that is
+  /// not described in a summary as if it was explictly listed as an input.
+  bool chaseDependencies = false;
+
+  /// Whether to intepret Dart sources in strong-mode.
+  bool strongMode = true;
 }
diff --git a/pkg/front_end/lib/kernel_generator.dart b/pkg/front_end/lib/kernel_generator.dart
index ce9eee8..a87bb68 100644
--- a/pkg/front_end/lib/kernel_generator.dart
+++ b/pkg/front_end/lib/kernel_generator.dart
@@ -9,6 +9,9 @@
 import 'compiler_options.dart';
 import 'dart:async';
 
+import 'package:analyzer/src/generated/source.dart' show SourceKind;
+import 'package:analyzer/src/summary/package_bundle_reader.dart'
+    show InSummarySource;
 // TODO(sigmund): move loader logic under front_end/lib/src/kernel/
 import 'package:kernel/analyzer/loader.dart';
 import 'package:kernel/kernel.dart';
@@ -23,37 +26,50 @@
 /// follows `import`, `export`, and `part` declarations to discover the whole
 /// program, and converts the result to Dart Kernel format.
 ///
-/// If summaries are provided in [options], they may be used to speed up
-/// analysis, but they will not take the place of Dart source code (since the
-/// Dart source code is still needed to access the contents of method bodies).
+/// If `compileSdk` in [options] is true, the generated program will include
+/// code for the SDK.
 ///
-/// TODO(paulberry): will the VM have a pickled version of the SDK inside it? If
-/// so, then maybe this method should not convert SDK libraries to kernel.
+/// If summaries are provided in [options], they may be used to speed up
+/// analysis. If in addition `compileSdk` is false, this will speed up
+/// compilation, as no source of the sdk will be generated.  Note however, that
+/// summaries for application code can also speed up analysis, but they will not
+/// take the place of Dart source code (since the Dart source code is still
+/// needed to access the contents of method bodies).
 Future<Program> kernelForProgram(Uri source, CompilerOptions options) async {
-  var loader = await _createLoader(options);
-  Program program = loader.loadProgram(source);
+  var loader = await _createLoader(options, entry: source);
+  // TODO(sigmund): merge what we have in loadEverything and the logic below in
+  // kernelForBuildUnit so there is a single place where we crawl for
+  // dependencies.
+  Program program = loader.loadProgram(source, compileSdk: options.compileSdk);
   _reportErrors(loader.errors, options.onError);
   return program;
 }
 
-/// Generates a kernel representation of the build unit whose source files are
-/// in [sources].
+/// Generates a kernel representation for a build unit.
 ///
 /// Intended for modular compilation.
 ///
-/// [sources] should be the complete set of source files for a build unit
-/// (including both library and part files).  All of the library files are
-/// transformed into Dart Kernel Library objects.
+/// The build unit by default contains only the source files in [sources]
+/// (including library and part files), but if
+/// [CompilerOptions.chaseDependencies] is true, it may include some additional
+/// source files.  All of the library files are transformed into Dart Kernel
+/// Library objects.
 ///
-/// The compilation process is hermetic, meaning that the only files which will
-/// be read are those listed in [sources], [CompilerOptions.inputSummaries], and
-/// [CompilerOptions.sdkSummary].  If a source file attempts to refer to a file
-/// which is not obtainable from these paths, that will result in an error, even
-/// if the file exists on the filesystem.
+/// By default, the compilation process is hermetic, meaning that the only files
+/// which will be read are those listed in [sources],
+/// [CompilerOptions.inputSummaries], and [CompilerOptions.sdkSummary].  If a
+/// source file attempts to refer to a file which is not obtainable from these
+/// paths, that will result in an error, even if the file exists on the
+/// filesystem.
+///
+/// When [CompilerOptions.chaseDependencies] is true, this default behavior
+/// changes, and any dependency of [sources] that is not listed in
+/// [CompilerOptions.inputSummaries] and [CompilerOptions.sdkSummary] is treated
+/// as an additional source file for the build unit.
 ///
 /// Any `part` declarations found in [sources] must refer to part files which
-/// are also listed in [sources], otherwise an error results.  (It is not
-/// permitted to refer to a part file declared in another build unit).
+/// are also listed in the build unit sources, otherwise an error results.  (It
+/// is not permitted to refer to a part file declared in another build unit).
 ///
 /// The return value is a [Program] object with no main method set.
 /// TODO(paulberry): would it be better to define a data type in kernel to
@@ -63,27 +79,68 @@
 /// caller to match up referenced elements to the summary files they were
 /// obtained from?
 Future<Program> kernelForBuildUnit(
-        List<Uri> sources, CompilerOptions options) async {
+    List<Uri> sources, CompilerOptions options) async {
   var repository = new Repository();
   var loader = await _createLoader(options, repository: repository);
-  // TODO(sigmund): add special handling for part files.
-  sources.forEach(loader.loadLibrary);
+  var context = loader.context;
+
+  // Process every library in the build unit.
+  for (var uri in sources) {
+    var source = context.sourceFactory.forUri2(uri);
+    //  We ignore part files, those are handled by their enclosing library.
+    if (context.computeKindOf(source) == SourceKind.PART) {
+      // TODO(sigmund): record it and ensure that this part is within a provided
+      // library.
+      continue;
+    }
+    loader.loadLibrary(uri);
+  }
+
+  // Check whether all dependencies were included in [sources].
+  // TODO(sigmund): we should look for dependencies using import, export, and
+  // part directives intead of relying on the dartk-loader.  In particular, if a
+  // library is imported but not used, the logic below will not detect it.
+  for (int i = 0; i < repository.libraries.length; ++i) {
+    // Note: we don't use a for-in loop because repository.libraries grows as
+    // the loader processes libraries.
+    var lib = repository.libraries[i];
+    var source = context.sourceFactory.forUri2(lib.importUri);
+    if (source is InSummarySource) continue;
+    if (options.chaseDependencies) {
+      loader.ensureLibraryIsLoaded(lib);
+    } else if (lib.isExternal) {
+      // Default behavior: the build should be hermetic and all dependencies
+      // should be listed.
+      options.onError(new _DartkError('hermetic build error: '
+          'no source or summary was given for ${lib.importUri}'));
+    }
+  }
+
   Program program = new Program(repository.libraries);
   _reportErrors(loader.errors, options.onError);
   return program;
 }
 
+/// Create a [DartLoader] using the provided [options].
+///
+/// If [options] contain no configuration to resolve `.packages`, the [entry]
+/// file will be used to search for a `.packages` file.
 Future<DartLoader> _createLoader(CompilerOptions options,
-    {Repository repository}) async {
+    {Repository repository, Uri entry}) async {
   var kernelOptions = _convertOptions(options);
-  var packages = await createPackages(options.packagesFilePath);
+  var packages = await createPackages(options.packagesFilePath,
+      discoveryPath: entry?.path);
   return new DartLoader(
       repository ?? new Repository(), kernelOptions, packages);
 }
 
 DartOptions _convertOptions(CompilerOptions options) {
   return new DartOptions(
+      strongMode: options.strongMode,
       sdk: options.sdkPath,
+      // TODO(sigmund): make it possible to use summaries and still compile the
+      // sdk sources.
+      sdkSummary: options.compileSdk ? null : options.sdkSummary,
       packagePath: options.packagesFilePath,
       declaredVariables: options.declaredVariables);
 }
diff --git a/pkg/front_end/tool/perf.dart b/pkg/front_end/tool/perf.dart
index 4fa76ed..af74fd3 100644
--- a/pkg/front_end/tool/perf.dart
+++ b/pkg/front_end/tool/perf.dart
@@ -21,12 +21,14 @@
 import 'package:analyzer/src/generated/source_io.dart';
 import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/idl.dart';
-import 'package:analyzer/src/summary/prelink.dart';
+import 'package:analyzer/src/summary/link.dart';
 import 'package:analyzer/src/summary/summarize_ast.dart';
 import 'package:kernel/analyzer/loader.dart';
 import 'package:kernel/kernel.dart';
 import 'package:package_config/discovery.dart';
 
+import 'package:front_end/compiler_options.dart';
+import 'package:front_end/kernel_generator.dart';
 import 'package:front_end/src/scanner/reader.dart';
 import 'package:front_end/src/scanner/scanner.dart';
 import 'package:front_end/src/scanner/token.dart';
@@ -43,6 +45,9 @@
 /// Cumulative time spent building unlinked summaries.
 Stopwatch unlinkedSummarizeTimer = new Stopwatch();
 
+/// Cumulative time spent prelinking summaries.
+Stopwatch prelinkSummaryTimer = new Stopwatch();
+
 /// Factory to load and resolve app, packages, and sdk sources.
 SourceFactory sources;
 
@@ -77,7 +82,21 @@
       // TODO(sigmund): replace this warmup. Note that for very large programs,
       // the GC pressure on the VM seems to make this worse with time (maybe we
       // are leaking memory?). That's why we run it twice and not 10 times.
-      for (int i = 0; i < 2; i++) await generateKernel(entryUri);
+      for (int i = 0; i < 2; i++) {
+        await generateKernel(entryUri, useSdkSummary: false);
+      }
+    },
+    'kernel_gen_e2e_sum': () async {
+      // TODO(sigmund): remove. This is incorrect since it includes sizes for
+      // files that will not be loaded when using summaries. We need to extract
+      // input size from frontend instead.
+      scanReachableFiles(entryUri);
+      // TODO(sigmund): replace this warmup. Note that for very large programs,
+      // the GC pressure on the VM seems to make this worse with time (maybe we
+      // are leaking memory?). That's why we run it twice and not 10 times.
+      for (int i = 0; i < 2; i++) {
+        await generateKernel(entryUri, useSdkSummary: true, compileSdk: false);
+      }
     },
     'unlinked_summarize': () async {
       Set<Source> files = scanReachableFiles(entryUri);
@@ -88,6 +107,11 @@
       Set<Source> files = scanReachableFiles(entryUri);
       // TODO(sigmund): replace the warmup with instrumented snapshots.
       for (int i = 0; i < 10; i++) prelinkedSummarizeFiles(files);
+    },
+    'linked_summarize': () async {
+      Set<Source> files = scanReachableFiles(entryUri);
+      // TODO(sigmund): replace the warmup with instrumented snapshots.
+      for (int i = 0; i < 10; i++) linkedSummarizeFiles(files);
     }
   };
 
@@ -202,9 +226,7 @@
   scanTotalChars = 0;
   parseTimer = new Stopwatch();
   unlinkedSummarizeTimer = new Stopwatch();
-  for (var source in files) {
-    unlinkedSummarize(source);
-  }
+  generateUnlinkedSummaries(files);
 
   if (old != scanTotalChars) print('input size changed? ${old} chars');
   report("scan", scanTimer.elapsedMicroseconds);
@@ -216,6 +238,32 @@
           parseTimer.elapsedMicroseconds);
 }
 
+/// Simple container for a mapping from URI string to an unlinked summary.
+class UnlinkedSummaries {
+  final summariesByUri = <String, UnlinkedUnit>{};
+
+  /// Get the unlinked summary for the given URI, and report a warning if it
+  /// can't be found.
+  UnlinkedUnit getUnit(String uri) {
+    var result = summariesByUri[uri];
+    if (result == null) {
+      print('Warning: no summary found for: $uri');
+    }
+    return result;
+  }
+}
+
+/// Generates unlinkmed summaries for all files in [files], and returns them in
+/// an [UnlinkedSummaries] container.
+UnlinkedSummaries generateUnlinkedSummaries(Set<Source> files) {
+  var unlinkedSummaries = new UnlinkedSummaries();
+  for (var source in files) {
+    unlinkedSummaries.summariesByUri[source.uri.toString()] =
+        unlinkedSummarize(source);
+  }
+  return unlinkedSummaries;
+}
+
 /// Produces prelinked summaries for every file in [files] and reports the time
 /// spent doing so.
 void prelinkedSummarizeFiles(Set<Source> files) {
@@ -228,28 +276,9 @@
   scanTotalChars = 0;
   parseTimer = new Stopwatch();
   unlinkedSummarizeTimer = new Stopwatch();
-  var unlinkedSummaries = <Source, UnlinkedUnit>{};
-  for (var source in files) {
-    unlinkedSummaries[source] = unlinkedSummarize(source);
-  }
-  var prelinkTimer = new Stopwatch()..start();
-  for (var source in files) {
-    UnlinkedUnit getSummary(String uri) {
-      var resolvedUri = sources.resolveUri(source, uri);
-      var result = unlinkedSummaries[resolvedUri];
-      if (result == null) {
-        print('Warning: no summary found for: $uri');
-      }
-      return result;
-    }
-
-    UnlinkedPublicNamespace getImport(String uri) =>
-        getSummary(uri)?.publicNamespace;
-    String getDeclaredVariable(String s) => null;
-    prelink(
-        unlinkedSummaries[source], getSummary, getImport, getDeclaredVariable);
-  }
-  prelinkTimer.stop();
+  var unlinkedSummaries = generateUnlinkedSummaries(files);
+  prelinkSummaryTimer = new Stopwatch();
+  prelinkSummaries(files, unlinkedSummaries);
 
   if (old != scanTotalChars) print('input size changed? ${old} chars');
   report("scan", scanTimer.elapsedMicroseconds);
@@ -259,7 +288,64 @@
       'unlinked summarize + parse',
       unlinkedSummarizeTimer.elapsedMicroseconds +
           parseTimer.elapsedMicroseconds);
-  report('prelink', prelinkTimer.elapsedMicroseconds);
+  report('prelink', prelinkSummaryTimer.elapsedMicroseconds);
+}
+
+/// Produces linked summaries for every file in [files] and reports the time
+/// spent doing so.
+void linkedSummarizeFiles(Set<Source> files) {
+  // The code below will record again how many chars are scanned and how long it
+  // takes to scan them, even though we already did so in [scanReachableFiles].
+  // Recording and reporting this twice is unnecessary, but we do so for now to
+  // validate that the results are consistent.
+  scanTimer = new Stopwatch();
+  var old = scanTotalChars;
+  scanTotalChars = 0;
+  parseTimer = new Stopwatch();
+  unlinkedSummarizeTimer = new Stopwatch();
+  var unlinkedSummaries = generateUnlinkedSummaries(files);
+  prelinkSummaryTimer = new Stopwatch();
+  Map<String, LinkedLibraryBuilder> prelinkedLibraries =
+      prelinkSummaries(files, unlinkedSummaries);
+  var linkTimer = new Stopwatch()..start();
+  LinkedLibrary getDependency(String uri) {
+    // getDependency should never be called because all dependencies are present
+    // in [prelinkedLibraries].
+    print('Warning: getDependency called for: $uri');
+    return null;
+  }
+
+  bool strong = true;
+  relink(prelinkedLibraries, getDependency, unlinkedSummaries.getUnit, strong);
+  linkTimer.stop();
+
+  if (old != scanTotalChars) print('input size changed? ${old} chars');
+  report("scan", scanTimer.elapsedMicroseconds);
+  report("parse", parseTimer.elapsedMicroseconds);
+  report('unlinked summarize', unlinkedSummarizeTimer.elapsedMicroseconds);
+  report(
+      'unlinked summarize + parse',
+      unlinkedSummarizeTimer.elapsedMicroseconds +
+          parseTimer.elapsedMicroseconds);
+  report('prelink', prelinkSummaryTimer.elapsedMicroseconds);
+  report('link', linkTimer.elapsedMicroseconds);
+}
+
+/// Prelinks all the summaries for [files], using [unlinkedSummaries] to obtain
+/// their unlinked summaries.
+///
+/// The return value is suitable for passing to the summary linker.
+Map<String, LinkedLibraryBuilder> prelinkSummaries(
+    Set<Source> files, UnlinkedSummaries unlinkedSummaries) {
+  prelinkSummaryTimer.start();
+  Set<String> libraryUris =
+      files.map((source) => source.uri.toString()).toSet();
+
+  String getDeclaredVariable(String s) => null;
+  var prelinkedLibraries =
+      setupForLink(libraryUris, unlinkedSummaries.getUnit, getDeclaredVariable);
+  prelinkSummaryTimer.stop();
+  return prelinkedLibraries;
 }
 
 /// Add to [files] all sources reachable from [start].
@@ -332,25 +418,26 @@
   print('$sb');
 }
 
-// TODO(sigmund): replace this once kernel is produced by the frontend directly.
-Future<Program> generateKernel(Uri entryUri) async {
+Future<Program> generateKernel(Uri entryUri,
+    {bool useSdkSummary: false, bool compileSdk: true}) async {
   var dartkTimer = new Stopwatch()..start();
-  var options = new DartOptions(strongMode: false, sdk: 'sdk');
-  var packages =
-      await createPackages(options.packagePath, discoveryPath: entryUri.path);
-  var repository = new Repository();
-  DartLoader loader = new DartLoader(repository, options, packages);
-
-  Program program = loader.loadProgram(entryUri);
-  List errors = loader.errors;
-  if (errors.isNotEmpty) {
-    const int errorLimit = 100;
-    stderr.writeln(errors.take(errorLimit).join('\n'));
-    if (errors.length > errorLimit) {
-      stderr.writeln('[error] ${errors.length - errorLimit} errors not shown');
-    }
+  // TODO(sigmund): add a constructor with named args to compiler options.
+  var options = new CompilerOptions()
+    ..strongMode = false
+    ..compileSdk = compileSdk
+    ..packagesFilePath = '.packages'
+    ..onError = ((e) => print('${e.message}'));
+  if (useSdkSummary) {
+    // TODO(sigmund): adjust path based on the benchmark runner architecture.
+    // Possibly let the runner make the file available at an architecture
+    // independent location.
+    options.sdkSummary = 'out/ReleaseX64/dart-sdk/lib/_internal/spec.sum';
+  } else {
+    options.sdkPath = 'sdk';
   }
+  Program program = await kernelForProgram(entryUri, options);
   dartkTimer.stop();
-  report("kernel_gen_e2e", dartkTimer.elapsedMicroseconds);
+  var suffix = useSdkSummary ? "_sum" : "";
+  report("kernel_gen_e2e${suffix}", dartkTimer.elapsedMicroseconds);
   return program;
 }
diff --git a/pkg/kernel/lib/analyzer/ast_from_analyzer.dart b/pkg/kernel/lib/analyzer/ast_from_analyzer.dart
index caece79..20afc52 100644
--- a/pkg/kernel/lib/analyzer/ast_from_analyzer.dart
+++ b/pkg/kernel/lib/analyzer/ast_from_analyzer.dart
@@ -12,6 +12,7 @@
 import 'analyzer.dart';
 import 'loader.dart';
 import 'package:analyzer/analyzer.dart';
+import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/src/generated/parser.dart';
 import 'package:analyzer/src/dart/element/member.dart';
 import 'package:analyzer/src/error/codes.dart';
@@ -541,7 +542,8 @@
           initializer: parameter is DefaultFormalParameter
               ? buildOptionalTopLevelExpression(parameter.defaultValue)
               : null,
-          type: buildType(parameter.element.type));
+          type: buildType(
+              resolutionMap.elementDeclaredByFormalParameter(parameter).type));
       switch (parameter.kind) {
         case ParameterKind.REQUIRED:
           positional.add(declaration);
@@ -2335,7 +2337,10 @@
   bool _isIgnoredMember(ClassMember node) {
     return node is ConstructorDeclaration &&
         node.factoryKeyword != null &&
-        node.element.redirectedConstructor != null;
+        resolutionMap
+                .elementDeclaredByConstructorDeclaration(node)
+                .redirectedConstructor !=
+            null;
   }
 
   visitClassDeclaration(ClassDeclaration node) {
@@ -2610,7 +2615,9 @@
         hasExplicitConstructorCall = true;
       }
     }
-    ClassElement classElement = node.element.enclosingElement;
+    ClassElement classElement = resolutionMap
+        .elementDeclaredByConstructorDeclaration(node)
+        .enclosingElement;
     if (classElement.supertype != null && !hasExplicitConstructorCall) {
       ConstructorElement targetElement =
           scope.findDefaultConstructor(classElement.supertype.element);
@@ -2628,7 +2635,9 @@
   void buildFactoryConstructor(ConstructorDeclaration node) {
     addAnnotations(node.metadata);
     ast.Procedure procedure = currentMember;
-    ClassElement classElement = node.element.enclosingElement;
+    ClassElement classElement = resolutionMap
+        .elementDeclaredByConstructorDeclaration(node)
+        .enclosingElement;
     ast.Class classNode = procedure.enclosingClass;
     var types = getFreshTypeParameters(classNode.typeParameters);
     for (int i = 0; i < classElement.typeParameters.length; ++i) {
@@ -2643,7 +2652,10 @@
     handleNativeBody(node.body);
     if (node.redirectedConstructor != null) {
       // Redirecting factories with resolved targets don't show up here.
-      assert(node.element.redirectedConstructor == null);
+      assert(resolutionMap
+              .elementDeclaredByConstructorDeclaration(node)
+              .redirectedConstructor ==
+          null);
       var function = procedure.function;
       var name = node.redirectedConstructor.type.name.name;
       if (node.redirectedConstructor.name != null) {
@@ -2662,7 +2674,8 @@
     ast.Procedure procedure = currentMember;
     procedure.function = scope.buildFunctionNode(node.parameters, node.body,
         returnType: node.returnType,
-        inferredReturnType: scope.buildType(node.element.returnType),
+        inferredReturnType: scope.buildType(
+            resolutionMap.elementDeclaredByMethodDeclaration(node).returnType),
         typeParameters:
             scope.buildOptionalTypeParameterList(node.typeParameters))
       ..parent = procedure;
@@ -2672,7 +2685,8 @@
   visitVariableDeclaration(VariableDeclaration node) {
     addAnnotations(node.metadata);
     ast.Field field = currentMember;
-    field.type = scope.buildType(node.element.type);
+    field.type = scope.buildType(
+        resolutionMap.elementDeclaredByVariableDeclaration(node).type);
     if (node.initializer != null) {
       field.initializer = scope.buildTopLevelExpression(node.initializer)
         ..parent = field;
diff --git a/pkg/kernel/lib/analyzer/loader.dart b/pkg/kernel/lib/analyzer/loader.dart
index ae16926..4fb962e 100644
--- a/pkg/kernel/lib/analyzer/loader.dart
+++ b/pkg/kernel/lib/analyzer/loader.dart
@@ -16,6 +16,7 @@
 import 'package:analyzer/src/generated/parser.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source_io.dart';
+import 'package:analyzer/src/summary/summary_sdk.dart';
 import 'package:kernel/application_root.dart';
 import 'package:package_config/discovery.dart';
 import 'package:package_config/packages.dart';
@@ -34,16 +35,29 @@
 
   /// True if the Dart SDK should be loaded in strong mode.
   bool strongModeSdk;
+
+  /// Path to the sdk sources, ignored if sdkSummary is provided.
   String sdk;
+
+  /// Path to a summary of the sdk sources.
+  String sdkSummary;
+
+  /// Path to the `.packages` file.
   String packagePath;
+
+  /// Root used to relativize app file-urls, making them machine agnostic.
   ApplicationRoot applicationRoot;
+
   Map<Uri, Uri> customUriMappings;
+
+  /// Environment definitions provided via `-Dkey=value`.
   Map<String, String> declaredVariables;
 
   DartOptions(
       {bool strongMode: false,
       bool strongModeSdk,
       this.sdk,
+      this.sdkSummary,
       this.packagePath,
       ApplicationRoot applicationRoot,
       Map<Uri, Uri> customUriMappings,
@@ -620,20 +634,26 @@
     }
   }
 
-  void loadEverything({Target target}) {
-    ensureLibraryIsLoaded(getLibraryReference(getDartCoreLibrary()));
-    if (target != null) {
-      for (var uri in target.extraRequiredLibraries) {
-        var library = _findLibraryElement(uri);
-        if (library == null) {
-          errors.add('Could not find required library $uri');
-          continue;
+  void loadEverything({Target target, bool compileSdk}) {
+    compileSdk ??= true;
+    if (compileSdk) {
+      ensureLibraryIsLoaded(getLibraryReference(getDartCoreLibrary()));
+      if (target != null) {
+        for (var uri in target.extraRequiredLibraries) {
+          var library = _findLibraryElement(uri);
+          if (library == null) {
+            errors.add('Could not find required library $uri');
+            continue;
+          }
+          ensureLibraryIsLoaded(getLibraryReference(library));
         }
-        ensureLibraryIsLoaded(getLibraryReference(library));
       }
     }
     for (int i = 0; i < repository.libraries.length; ++i) {
-      ensureLibraryIsLoaded(repository.libraries[i]);
+      var library = repository.libraries[i];
+      if (compileSdk || library.importUri.scheme != 'dart') {
+        ensureLibraryIsLoaded(library);
+      }
     }
   }
 
@@ -660,11 +680,11 @@
     }
   }
 
-  ast.Program loadProgram(Uri mainLibrary, {Target target}) {
+  ast.Program loadProgram(Uri mainLibrary, {Target target, bool compileSdk}) {
     ast.Library library = repository
         .getLibraryReference(applicationRoot.relativeUri(mainLibrary));
     ensureLibraryIsLoaded(library);
-    loadEverything(target: target);
+    loadEverything(target: target, compileSdk: compileSdk);
     var program = new ast.Program(repository.libraries);
     program.mainMethod = library.procedures.firstWhere(
         (member) => member.name?.name == 'main',
@@ -763,7 +783,10 @@
     ..enableSuperMixins = true;
 }
 
-DartSdk createDartSdk(String path, {bool strongMode}) {
+DartSdk createDartSdk(String path, {bool strongMode, bool isSummary}) {
+  if (isSummary ?? false) {
+    return new SummaryBasedDartSdk(path, strongMode);
+  }
   var resources = PhysicalResourceProvider.INSTANCE;
   return new FolderBasedDartSdk(resources, resources.getFolder(path))
     ..context
@@ -806,7 +829,9 @@
 
 AnalysisContext createContext(DartOptions options, Packages packages,
     {DartSdk dartSdk}) {
-  dartSdk ??= createDartSdk(options.sdk, strongMode: options.strongModeSdk);
+  bool fromSummary = options.sdkSummary != null;
+  dartSdk ??= createDartSdk(fromSummary ? options.sdkSummary : options.sdk,
+      strongMode: options.strongModeSdk, isSummary: fromSummary);
 
   var resourceProvider = PhysicalResourceProvider.INSTANCE;
   var resourceUriResolver = new ResourceUriResolver(resourceProvider);
diff --git a/pkg/kernel/lib/frontend/accessors.dart b/pkg/kernel/lib/frontend/accessors.dart
index 5271f0b..17355b0 100644
--- a/pkg/kernel/lib/frontend/accessors.dart
+++ b/pkg/kernel/lib/frontend/accessors.dart
@@ -185,7 +185,7 @@
 
   SuperPropertyAccessor(this.name, this.getter, this.setter);
 
-  _makeRead() => new SuperPropertyGet(name, getter);
+  _makeRead() => builtGetter = new SuperPropertyGet(name, getter);
 
   _makeWrite(Expression value, bool voidContext) {
     return new SuperPropertySet(name, value, setter);
@@ -235,7 +235,7 @@
   }
 
   _makeRead() {
-    return new MethodInvocation(receiverAccess(), _indexGet,
+    return builtGetter = new MethodInvocation(receiverAccess(), _indexGet,
         new Arguments(<Expression>[indexAccess()]), getter);
   }
 
@@ -289,8 +289,8 @@
     return new VariableGet(indexVariable);
   }
 
-  _makeRead() => new MethodInvocation(new ThisExpression(), _indexGet,
-      new Arguments(<Expression>[indexAccess()]), getter);
+  _makeRead() => builtGetter = new MethodInvocation(new ThisExpression(),
+      _indexGet, new Arguments(<Expression>[indexAccess()]), getter);
 
   _makeWrite(Expression value, bool voidContext) {
     if (!voidContext) return _makeWriteAndReturn(value);
@@ -335,7 +335,7 @@
   }
 
   _makeRead() {
-    return new SuperMethodInvocation(
+    return builtGetter = new SuperMethodInvocation(
         _indexGet, new Arguments(<Expression>[indexAccess()]), getter);
   }
 
@@ -367,7 +367,7 @@
 
   StaticAccessor(this.readTarget, this.writeTarget);
 
-  _makeRead() =>
+  _makeRead() => builtGetter =
       readTarget == null ? makeInvalidRead() : new StaticGet(readTarget);
 
   _makeWrite(Expression value, bool voidContext) {
diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index 07b9b17..495d117 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -564,6 +564,17 @@
                  "..:dart_maybe_product_config",
                ] + extra_configs
 
+    if (defined(is_fuchsia_host) && is_fuchsia_host) {
+      # We already have these in the standalone build, but Fuchsia doesn't
+      # have them. They are needed for running Fuchsia binaries built for the
+      # host.
+      if (is_linux) {
+        configs += [ "../../build/config/gcc:executable_ldconfig" ]
+      } else if (is_mac) {
+        configs += [ "../../build/config/mac:mac_dynamic_flags" ]
+      }
+    }
+
     deps = [
              ":gen_resources_cc",
              ":standalone_dart_io",
@@ -607,37 +618,35 @@
   }
 }
 
-if (!defined(is_fuchsia) || !is_fuchsia) {
-  dart_executable("dart") {
-    extra_deps = [
-      "..:libdart",
-      ":dart_snapshot_cc",
-      "../observatory:standalone_observatory_archive",
-    ]
-    extra_sources = [ "builtin_nolib.cc" ]
-  }
+dart_executable("dart") {
+  extra_deps = [
+    "..:libdart",
+    ":dart_snapshot_cc",
+    "../observatory:standalone_observatory_archive",
+  ]
+  extra_sources = [ "builtin_nolib.cc" ]
+}
 
-  dart_executable("dart_noopt") {
-    extra_configs = [ "..:dart_precompiler_config" ]
-    extra_deps = [
-      "..:libdart_noopt",
-      ":dart_snapshot_cc",
-      "../observatory:standalone_observatory_archive",
-    ]
-    extra_sources = [ "builtin_nolib.cc" ]
-  }
+dart_executable("dart_noopt") {
+  extra_configs = [ "..:dart_precompiler_config" ]
+  extra_deps = [
+    "..:libdart_noopt",
+    ":dart_snapshot_cc",
+    "../observatory:standalone_observatory_archive",
+  ]
+  extra_sources = [ "builtin_nolib.cc" ]
+}
 
-  dart_executable("dart_precompiled_runtime") {
-    extra_configs = [ "..:dart_precompiled_runtime_config" ]
-    extra_deps = [
-      "..:libdart_precompiled_runtime",
-      "../observatory:standalone_observatory_archive",
-    ]
-    extra_sources = [
-      "builtin_nolib.cc",
-      "snapshot_empty.cc",
-    ]
-  }
+dart_executable("dart_precompiled_runtime") {
+  extra_configs = [ "..:dart_precompiled_runtime_config" ]
+  extra_deps = [
+    "..:libdart_precompiled_runtime",
+    "../observatory:standalone_observatory_archive",
+  ]
+  extra_sources = [
+    "builtin_nolib.cc",
+    "snapshot_empty.cc",
+  ]
 }
 
 dart_executable("dart_bootstrap") {
diff --git a/runtime/bin/crypto_fuchsia.cc b/runtime/bin/crypto_fuchsia.cc
index a066574..dde76ac 100644
--- a/runtime/bin/crypto_fuchsia.cc
+++ b/runtime/bin/crypto_fuchsia.cc
@@ -18,7 +18,7 @@
     const intptr_t remaining = count - read;
     const intptr_t len =
         (MX_CPRNG_DRAW_MAX_LEN < remaining) ? MX_CPRNG_DRAW_MAX_LEN : remaining;
-    mx_size_t res = 0;
+    size_t res = 0;
     const mx_status_t status = mx_cprng_draw(buffer + read, len, &res);
     if (status != NO_ERROR) {
       return false;
diff --git a/runtime/bin/directory_android.cc b/runtime/bin/directory_android.cc
index e61d513..a3c923c 100644
--- a/runtime/bin/directory_android.cc
+++ b/runtime/bin/directory_android.cc
@@ -129,6 +129,10 @@
           return Next(listing);
         }
         return kListDirectory;
+      case DT_BLK:
+      case DT_CHR:
+      case DT_FIFO:
+      case DT_SOCK:
       case DT_REG:
         return kListFile;
       case DT_LNK:
@@ -184,15 +188,23 @@
             return Next(listing);
           }
           return kListDirectory;
-        } else if (S_ISREG(entry_info.st_mode)) {
+        } else if (S_ISREG(entry_info.st_mode) || S_ISCHR(entry_info.st_mode) ||
+                   S_ISBLK(entry_info.st_mode) ||
+                   S_ISFIFO(entry_info.st_mode) ||
+                   S_ISSOCK(entry_info.st_mode)) {
           return kListFile;
         } else if (S_ISLNK(entry_info.st_mode)) {
           return kListLink;
+        } else {
+          FATAL1("Unexpected st_mode: %d\n", entry_info.st_mode);
+          return kListError;
         }
       }
 
       default:
-        break;
+        // We should have covered all the bases. If not, let's get an error.
+        FATAL1("Unexpected d_type: %d\n", entry.d_type);
+        return kListError;
     }
   }
   done_ = true;
diff --git a/runtime/bin/directory_linux.cc b/runtime/bin/directory_linux.cc
index 43ee548..6917f21 100644
--- a/runtime/bin/directory_linux.cc
+++ b/runtime/bin/directory_linux.cc
@@ -127,6 +127,10 @@
           return Next(listing);
         }
         return kListDirectory;
+      case DT_BLK:
+      case DT_CHR:
+      case DT_FIFO:
+      case DT_SOCK:
       case DT_REG:
         return kListFile;
       case DT_LNK:
@@ -182,15 +186,23 @@
             return Next(listing);
           }
           return kListDirectory;
-        } else if (S_ISREG(entry_info.st_mode)) {
+        } else if (S_ISREG(entry_info.st_mode) || S_ISCHR(entry_info.st_mode) ||
+                   S_ISBLK(entry_info.st_mode) ||
+                   S_ISFIFO(entry_info.st_mode) ||
+                   S_ISSOCK(entry_info.st_mode)) {
           return kListFile;
         } else if (S_ISLNK(entry_info.st_mode)) {
           return kListLink;
+        } else {
+          FATAL1("Unexpected st_mode: %d\n", entry_info.st_mode);
+          return kListError;
         }
       }
 
       default:
-        break;
+        // We should have covered all the bases. If not, let's get an error.
+        FATAL1("Unexpected d_type: %d\n", entry->d_type);
+        return kListError;
     }
   }
   done_ = true;
diff --git a/runtime/bin/directory_macos.cc b/runtime/bin/directory_macos.cc
index 18c254c..c06ffa3 100644
--- a/runtime/bin/directory_macos.cc
+++ b/runtime/bin/directory_macos.cc
@@ -129,6 +129,10 @@
           return Next(listing);
         }
         return kListDirectory;
+      case DT_BLK:
+      case DT_CHR:
+      case DT_FIFO:
+      case DT_SOCK:
       case DT_REG:
         return kListFile;
       case DT_LNK:
@@ -184,15 +188,23 @@
             return Next(listing);
           }
           return kListDirectory;
-        } else if (S_ISREG(entry_info.st_mode)) {
+        } else if (S_ISREG(entry_info.st_mode) || S_ISCHR(entry_info.st_mode) ||
+                   S_ISBLK(entry_info.st_mode) ||
+                   S_ISFIFO(entry_info.st_mode) ||
+                   S_ISSOCK(entry_info.st_mode)) {
           return kListFile;
         } else if (S_ISLNK(entry_info.st_mode)) {
           return kListLink;
+        } else {
+          FATAL1("Unexpected st_mode: %d\n", entry_info.st_mode);
+          return kListError;
         }
       }
 
       default:
-        break;
+        // We should have covered all the bases. If not, let's get an error.
+        FATAL1("Unexpected d_type: %d\n", entry.d_type);
+        return kListError;
     }
   }
   done_ = true;
diff --git a/runtime/bin/loader.cc b/runtime/bin/loader.cc
index d0a95e2..70ee444 100644
--- a/runtime/bin/loader.cc
+++ b/runtime/bin/loader.cc
@@ -206,6 +206,24 @@
 }
 
 
+// Forward a request from the tag handler to the kernel isolate.
+// [ tag, send port, url ]
+void Loader::SendKernelRequest(Dart_LibraryTag tag, Dart_Handle url) {
+  // This port delivers loading messages to the Kernel isolate.
+  Dart_Port kernel_port = Dart_KernelPort();
+  ASSERT(kernel_port != ILLEGAL_PORT);
+
+  Dart_Handle request = Dart_NewList(3);
+  Dart_ListSetAt(request, 0, Dart_NewInteger(tag));
+  Dart_ListSetAt(request, 1, Dart_NewSendPort(port_));
+  Dart_ListSetAt(request, 2, url);
+  if (Dart_Post(kernel_port, request)) {
+    MonitorLocker ml(monitor_);
+    pending_operations_++;
+  }
+}
+
+
 void Loader::QueueMessage(Dart_CObject* message) {
   MonitorLocker ml(monitor_);
   if (results_length_ == results_capacity_) {
@@ -625,12 +643,15 @@
   if (DartUtils::IsDartExtensionSchemeURL(url_string)) {
     loader->SendImportExtensionRequest(url, Dart_LibraryUrl(library));
   } else {
-    loader->SendRequest(tag, url, (library != Dart_Null())
-                                      ? Dart_LibraryUrl(library)
-                                      : Dart_Null());
+    if (Dart_KernelIsolateIsRunning()) {
+      loader->SendKernelRequest(tag, url);
+    } else {
+      loader->SendRequest(tag, url, (library != Dart_Null())
+                                        ? Dart_LibraryUrl(library)
+                                        : Dart_Null());
+    }
   }
 
-
   if (blocking_call) {
     // The outer invocation of the tag handler will block here until all nested
     // invocations complete.
diff --git a/runtime/bin/loader.h b/runtime/bin/loader.h
index 2076be8..cc4912d 100644
--- a/runtime/bin/loader.h
+++ b/runtime/bin/loader.h
@@ -93,6 +93,9 @@
                    Dart_Handle url,
                    Dart_Handle library_url);
 
+  // Send a request from the tag handler to the kernel isolate.
+  void SendKernelRequest(Dart_LibraryTag tag, Dart_Handle url);
+
   /// Queue |message| and notify the loader that a message is available.
   void QueueMessage(Dart_CObject* message);
 
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index 0adf4ac..5a89f4d 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -61,6 +61,10 @@
 };
 static SnapshotKind gen_snapshot_kind = kNone;
 
+static bool use_dart_frontend = false;
+
+static const char* frontend_filename = NULL;
+
 // Value of the --package-root flag.
 // (This pointer points into an argv buffer and does not need to be
 // free'd.)
@@ -324,6 +328,19 @@
 }
 
 
+static bool ProcessFrontendOption(const char* filename,
+                                  CommandLineOptions* vm_options) {
+  ASSERT(filename != NULL);
+  if (filename[0] == '\0') {
+    return false;
+  }
+  use_dart_frontend = true;
+  frontend_filename = filename;
+  vm_options->AddArgument("--use-dart-frontend");
+  return true;
+}
+
+
 static bool ProcessUseBlobsOption(const char* arg,
                                   CommandLineOptions* vm_options) {
   ASSERT(arg != NULL);
@@ -540,6 +557,7 @@
     // VM specific options to the standalone dart program.
     {"--compile_all", ProcessCompileAllOption},
     {"--parse_all", ProcessParseAllOption},
+    {"--dfe=", ProcessFrontendOption},
     {"--enable-vm-service", ProcessEnableVmServiceOption},
     {"--disable-service-origin-check", ProcessDisableServiceOriginCheckOption},
     {"--observe", ProcessObserveOption},
@@ -791,6 +809,16 @@
       (strcmp(script_uri, DART_VM_SERVICE_ISOLATE_NAME) == 0)) {
     return NULL;
   }
+  if (strcmp(script_uri, DART_KERNEL_ISOLATE_NAME) == 0) {
+    if (!use_dart_frontend) {
+      *error = strdup("Kernel isolate not supported.");
+      return NULL;
+    } else {
+      if (packages_config == NULL) {
+        packages_config = commandline_packages_file;
+      }
+    }
+  }
 
   // If the script is a Kernel binary, then we will try to bootstrap from the
   // script.
@@ -870,6 +898,10 @@
     CHECK_RESULT(result);
   }
 
+  if (Dart_IsKernelIsolate(isolate)) {
+    script_uri = frontend_filename;
+  }
+
   // Setup package root if specified.
   result = DartUtils::SetupPackageRoot(package_root, packages_config);
   CHECK_RESULT(result);
@@ -877,6 +909,17 @@
   result = Dart_SetEnvironmentCallback(EnvironmentCallback);
   CHECK_RESULT(result);
 
+  if (!Dart_IsKernelIsolate(isolate) && use_dart_frontend) {
+    Log::PrintErr("Waiting for Kernel isolate to load.\n");
+    // This must be the main script to be loaded. Wait for Kernel isolate
+    // to finish initialization.
+    Dart_Port port = Dart_ServiceWaitForKernelPort();
+    if (port == ILLEGAL_PORT) {
+      *error = strdup("Error while initializing Kernel isolate");
+      return NULL;
+    }
+  }
+
   if (run_app_snapshot) {
     result = DartUtils::SetupIOLibrary(script_uri);
     CHECK_RESULT(result);
@@ -1800,7 +1843,6 @@
   bool print_flags_seen = false;
   bool verbose_debug_seen = false;
 
-  vm_options.AddArgument("--no_write_protect_code");
   // Perform platform specific initialization.
   if (!Platform::Initialize()) {
     Log::PrintErr("Initialization failed\n");
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 93d6da5..fb73fc5 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -3131,6 +3131,27 @@
 
 
 /*
+ * ======
+ * Kernel
+ * ======
+ */
+
+
+/**
+ * Experimental support for Dart to Kernel parser isolate.
+ *
+ * TODO(hausner): Document finalized interface.
+ *
+ */
+
+DART_EXPORT bool Dart_IsKernelIsolate(Dart_Isolate isolate);
+DART_EXPORT bool Dart_KernelIsolateIsRunning();
+DART_EXPORT Dart_Port Dart_ServiceWaitForKernelPort();
+DART_EXPORT Dart_Port Dart_KernelPort();
+
+#define DART_KERNEL_ISOLATE_NAME "kernel-service"
+
+/*
  * =======
  * Service
  * =======
diff --git a/runtime/lib/integers.dart b/runtime/lib/integers.dart
index f465e3b..e87dba7 100644
--- a/runtime/lib/integers.dart
+++ b/runtime/lib/integers.dart
@@ -394,8 +394,8 @@
     if (x == 0) return y;
     if (y == 0) return x;
     if ((x == 1) || (y == 1)) return 1;
-    if (other is _Bigint) {
-      return _toBigint().gcd(other);
+    if (y is _Bigint) {
+      return x._toBigint().gcd(y);
     }
     return _binaryGcd(x, y, false);
   }
diff --git a/runtime/observatory/BUILD.gn b/runtime/observatory/BUILD.gn
index d4c736c..ca85f29 100644
--- a/runtime/observatory/BUILD.gn
+++ b/runtime/observatory/BUILD.gn
@@ -22,6 +22,12 @@
   dart_host_pub_exe = rebase_path("$dart_host_sdk/bin/pub")
 }
 
+# We set this to "" in the Fuchsia build to force building with dart_bootstrap.
+if (defined(is_fuchsia) && defined(is_fuchsia_host) &&
+    (is_fuchsia || is_fuchsia_host)) {
+  dart_host_pub_exe = ""
+}
+
 # Construct arguments to the observatory tool for finding pub.
 pub_build_deps = []
 pub_build_args = []
diff --git a/runtime/observatory/tests/service/service.status b/runtime/observatory/tests/service/service.status
index 72e4980..02a1ead 100644
--- a/runtime/observatory/tests/service/service.status
+++ b/runtime/observatory/tests/service/service.status
@@ -21,8 +21,10 @@
 debugger_location_second_test: Pass, Slow
 debugger_location_test: Pass, Slow
 
-# Disable on simulators.
+# These tests are slow on simulators.
 [ $arch == simarm || $arch == simmips || $arch == simarm64 ]
+*: Pass, Slow
+[ $mode == debug && ($arch == simarm || $arch == simmips || $arch == simarm64) ]
 *: SkipSlow
 
 # All tests use dart:io
diff --git a/runtime/tools/kernel-service.dart b/runtime/tools/kernel-service.dart
new file mode 100644
index 0000000..6ee3580
--- /dev/null
+++ b/runtime/tools/kernel-service.dart
@@ -0,0 +1,146 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This is an interface to the Dart Kernel parser and Kernel binary generator.
+// It is used by the kernel-isolate to load Dart source code and generate
+// Kernel binary format.
+
+import 'dart:isolate';
+import 'dart:async';
+import "dart:io";
+import "dart:typed_data";
+
+import 'package:kernel/binary/ast_to_binary.dart';
+import 'package:kernel/analyzer/loader.dart';
+import 'package:kernel/kernel.dart';
+import 'package:kernel/target/targets.dart';
+
+bool verbose = false;
+
+final RawReceivePort scriptLoadPort = new RawReceivePort();
+
+
+bool checkIsFile(String path) {
+  var stat = new File(path).statSync();
+  switch (stat.type) {
+    case FileSystemEntityType.DIRECTORY:
+      return false;
+    case FileSystemEntityType.NOT_FOUND:
+      return false;
+  }
+  return true;
+}
+
+
+void checkSdkDirectory(String path) {
+  var stat = new File(path).statSync();
+  switch (stat.type) {
+    case FileSystemEntityType.DIRECTORY:
+    case FileSystemEntityType.LINK:
+      return true;
+    default:
+      return false;
+  }
+}
+
+
+class DataSink implements StreamSink<List<int>> {
+  var buffer = [];
+  add(List<int> data) {
+    buffer.addAll(data);
+  }
+  close() {
+    // Nothing to do.
+  }
+}
+
+
+List writeProgramToBuffer(Program program) {
+  var sink = new DataSink();
+  try {
+    new BinaryPrinter(sink).writeProgramFile(program);
+  } finally {
+    sink.close();
+  }
+  return new Uint8List.fromList(sink.buffer);
+}
+
+
+Future parseScript(Uri fileName, String packageConfig, String sdkPath) async {
+
+  if (!checkIsFile(fileName.path)) {
+    throw "Input file '${fileName.path}' does not exist.";
+  }
+
+  if (!checkSdkDirectory(sdkPath)) {
+    throw "Patched sdk directory not found at $sdkPath";
+  }
+
+  Target target = getTarget("vm", new TargetFlags(strongMode: false));
+  DartOptions dartOptions = new DartOptions(
+        strongMode: false,
+        strongModeSdk: false,
+        sdk: sdkPath,
+        packagePath: packageConfig,
+        customUriMappings: {},
+        declaredVariables: {});
+  DartLoader loader =
+      await new DartLoaderBatch().getLoader(new Repository(), dartOptions);
+  var program = loader.loadProgram(fileName, target: target);
+
+  var errors = loader.errors;
+  if (errors.isNotEmpty) {
+    throw loader.errors.first;
+  }
+
+  // Link program into one file, cf. --link option in dartk
+  target.transformProgram(program);
+
+  return writeProgramToBuffer(program);
+}
+
+
+_processLoadRequest(request) {
+  if (verbose) {
+    print("FROM DART KERNEL: load request: $request");
+    print("FROM DART KERNEL: package: ${Platform.packageConfig}");
+    print("FROM DART KERNEL: exec: ${Platform.resolvedExecutable}");
+  }
+  int tag = request[0];
+  SendPort sp = request[1];
+  String inputFileUrl = request[2];
+  Uri scriptUri = Uri.parse(inputFileUrl);
+  Uri packagesUri = Uri.parse(Platform.packageConfig ?? ".packages");
+  Uri patched_sdk = Uri.parse(Platform.resolvedExecutable).resolve("patched_sdk");
+
+  var parsingDone = parseScript(scriptUri, packagesUri.path, patched_sdk.path);
+
+  parsingDone
+    .then((data) {
+        var msg = new List(5);
+        msg[0] = tag;
+        msg[1] = inputFileUrl;
+        msg[2] = inputFileUrl;
+        msg[3] = null;
+        msg[4] = data;
+        sp.send(msg);
+        return;
+    })
+    .catchError((e) {
+        var msg = new List(5);
+        msg[0] = -tag;
+        msg[1] = inputFileUrl;
+        msg[2] = inputFileUrl;
+        msg[3] = null;
+        msg[4] = e.toString();
+        sp.send(msg);
+    });
+}
+
+
+main() {
+  scriptLoadPort.handler = _processLoadRequest;
+  Timer.run(() {});
+  return scriptLoadPort;
+}
\ No newline at end of file
diff --git a/runtime/vm/assembler.cc b/runtime/vm/assembler.cc
index 4edcedd..77d61b0 100644
--- a/runtime/vm/assembler.cc
+++ b/runtime/vm/assembler.cc
@@ -319,10 +319,10 @@
     return Object::empty_object_pool().raw();
   }
   const ObjectPool& result = ObjectPool::Handle(ObjectPool::New(len));
-  const TypedData& info_array = TypedData::Handle(result.info_array());
+  ObjectPoolInfo pool_info(result);
   for (intptr_t i = 0; i < len; ++i) {
     ObjectPool::EntryType info = object_pool_[i].type_;
-    info_array.SetInt8(i, static_cast<int8_t>(info));
+    pool_info.SetInfoAt(i, info);
     if (info == ObjectPool::kTaggedObject) {
       result.SetObjectAt(i, *object_pool_[i].obj_);
     } else {
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index 07547de..6736835 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -16,6 +16,7 @@
 #include "vm/handles.h"
 #include "vm/heap.h"
 #include "vm/isolate.h"
+#include "vm/kernel_isolate.h"
 #include "vm/message_handler.h"
 #include "vm/metrics.h"
 #include "vm/object.h"
@@ -312,6 +313,10 @@
 
   ServiceIsolate::Run();
 
+#ifndef DART_PRECOMPILED_RUNTIME
+  KernelIsolate::Run();
+#endif  // DART_PRECOMPILED_RUNTIME
+
   return NULL;
 }
 
@@ -599,6 +604,9 @@
     I->class_table()->Print();
   }
 
+#ifndef DART_PRECOMPILED_RUNTIME
+  KernelIsolate::InitCallback(I);
+#endif
   ServiceIsolate::MaybeMakeServiceIsolate(I);
   if (!ServiceIsolate::IsServiceIsolate(I)) {
     I->message_handler()->set_should_pause_on_start(
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 2e739e1..c5abb5a 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -25,6 +25,7 @@
 #include "vm/growable_array.h"
 #include "vm/lockers.h"
 #include "vm/isolate_reload.h"
+#include "vm/kernel_isolate.h"
 #include "vm/message.h"
 #include "vm/message_handler.h"
 #include "vm/native_entry.h"
@@ -5977,6 +5978,44 @@
 }
 
 
+// --- Dart Front-End (Kernel) support ---
+
+DART_EXPORT bool Dart_IsKernelIsolate(Dart_Isolate isolate) {
+#ifdef DART_PRECOMPILED_RUNTIME
+  return false;
+#else
+  Isolate* iso = reinterpret_cast<Isolate*>(isolate);
+  return KernelIsolate::IsKernelIsolate(iso);
+#endif
+}
+
+
+DART_EXPORT bool Dart_KernelIsolateIsRunning() {
+#ifdef DART_PRECOMPILED_RUNTIME
+  return false;
+#else
+  return KernelIsolate::IsRunning();
+#endif
+}
+
+
+DART_EXPORT Dart_Port Dart_ServiceWaitForKernelPort() {
+#ifdef DART_PRECOMPILED_RUNTIME
+  return ILLEGAL_PORT;
+#else
+  return KernelIsolate::WaitForKernelPort();
+#endif
+}
+
+DART_EXPORT Dart_Port Dart_KernelPort() {
+#ifdef DART_PRECOMPILED_RUNTIME
+  return false;
+#else
+  return KernelIsolate::KernelPort();
+#endif
+}
+
+
 // --- Service support ---
 
 DART_EXPORT bool Dart_IsServiceIsolate(Dart_Isolate isolate) {
diff --git a/runtime/vm/flow_graph_inliner.cc b/runtime/vm/flow_graph_inliner.cc
index 001535c..dafb659 100644
--- a/runtime/vm/flow_graph_inliner.cc
+++ b/runtime/vm/flow_graph_inliner.cc
@@ -159,7 +159,8 @@
            it.Advance()) {
         ++instruction_count_;
         Instruction* current = it.Current();
-        if (current->IsStaticCall() || current->IsClosureCall()) {
+        if (current->IsInstanceCall() || current->IsStaticCall() ||
+            current->IsClosureCall()) {
           ++call_site_count_;
           continue;
         }
@@ -1923,8 +1924,13 @@
     return true;
   }
 
-  if (function.IsImplicitGetterFunction() || function.IsGetterFunction() ||
-      function.IsImplicitSetterFunction() || function.IsSetterFunction() ||
+  if (function.IsImplicitGetterFunction() ||
+      function.IsImplicitSetterFunction()) {
+    // Inlined accessors are smaller than a call.
+    return true;
+  }
+
+  if (function.IsGetterFunction() || function.IsSetterFunction() ||
       IsInlineableOperator(function) ||
       (function.kind() == RawFunction::kConstructor)) {
     const intptr_t count = function.optimized_instruction_count();
diff --git a/runtime/vm/kernel_isolate.cc b/runtime/vm/kernel_isolate.cc
new file mode 100644
index 0000000..8d682ab
--- /dev/null
+++ b/runtime/vm/kernel_isolate.cc
@@ -0,0 +1,266 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#include "vm/kernel_isolate.h"
+
+#include "vm/compiler.h"
+#include "vm/dart_api_impl.h"
+#include "vm/dart_entry.h"
+#include "vm/isolate.h"
+#include "vm/lockers.h"
+#include "vm/message.h"
+#include "vm/message_handler.h"
+#include "vm/native_entry.h"
+#include "vm/native_arguments.h"
+#include "vm/object.h"
+#include "vm/object_store.h"
+#include "vm/port.h"
+#include "vm/service.h"
+#include "vm/symbols.h"
+#include "vm/thread_pool.h"
+#include "vm/timeline.h"
+
+namespace dart {
+
+#if !defined(DART_PRECOMPILED_RUNTIME)
+
+#define Z (T->zone())
+
+DEFINE_FLAG(bool, trace_kernel, false, "Trace Kernel service requests.");
+DEFINE_FLAG(bool,
+            use_dart_frontend,
+            false,
+            "Parse scripts with Dart-to-Kernel parser");
+
+const char* KernelIsolate::kName = "kernel-service";
+Dart_IsolateCreateCallback KernelIsolate::create_callback_ = NULL;
+Monitor* KernelIsolate::monitor_ = new Monitor();
+Isolate* KernelIsolate::isolate_ = NULL;
+bool KernelIsolate::initializing_ = true;
+Dart_Port KernelIsolate::kernel_port_ = ILLEGAL_PORT;
+
+
+class RunKernelTask : public ThreadPool::Task {
+ public:
+  virtual void Run() {
+    ASSERT(Isolate::Current() == NULL);
+
+    if (!FLAG_use_dart_frontend) {
+      ASSERT(FLAG_use_dart_frontend);
+      // In release builds, make this a no-op. In debug builds, the
+      // assert shows that this is not supposed to happen.
+      return;
+    }
+
+#ifndef PRODUCT
+    TimelineDurationScope tds(Timeline::GetVMStream(), "KernelIsolateStartup");
+#endif  // !PRODUCT
+    char* error = NULL;
+    Isolate* isolate = NULL;
+
+    Dart_IsolateCreateCallback create_callback =
+        KernelIsolate::create_callback();
+
+    if (create_callback == NULL) {
+      KernelIsolate::FinishedInitializing();
+      return;
+    }
+
+    Dart_IsolateFlags api_flags;
+    Isolate::FlagsInitialize(&api_flags);
+
+    isolate = reinterpret_cast<Isolate*>(create_callback(
+        KernelIsolate::kName, NULL, NULL, NULL, &api_flags, NULL, &error));
+    if (isolate == NULL) {
+      if (FLAG_trace_kernel) {
+        OS::PrintErr("kernel-service: Isolate creation error: %s\n", error);
+      }
+      KernelIsolate::SetKernelIsolate(NULL);
+      KernelIsolate::FinishedInitializing();
+      return;
+    }
+
+    bool init_success = false;
+    {
+      ASSERT(Isolate::Current() == NULL);
+      StartIsolateScope start_scope(isolate);
+      init_success = RunMain(isolate);
+    }
+    KernelIsolate::FinishedInitializing();
+
+    if (!init_success) {
+      ShutdownIsolate(reinterpret_cast<uword>(isolate));
+      return;
+    }
+
+    // isolate_ was set as side effect of create callback.
+    ASSERT(KernelIsolate::IsKernelIsolate(isolate));
+
+    isolate->message_handler()->Run(Dart::thread_pool(), NULL, ShutdownIsolate,
+                                    reinterpret_cast<uword>(isolate));
+  }
+
+ protected:
+  static void ShutdownIsolate(uword parameter) {
+    if (FLAG_trace_kernel) {
+      OS::Print("kernel-service: ShutdownIsolate\n");
+    }
+    Isolate* I = reinterpret_cast<Isolate*>(parameter);
+    ASSERT(KernelIsolate::IsKernelIsolate(I));
+    KernelIsolate::SetKernelIsolate(NULL);
+    KernelIsolate::SetLoadPort(ILLEGAL_PORT);
+    I->WaitForOutstandingSpawns();
+    {
+      // Print the error if there is one.  This may execute dart code to
+      // print the exception object, so we need to use a StartIsolateScope.
+      ASSERT(Isolate::Current() == NULL);
+      StartIsolateScope start_scope(I);
+      Thread* T = Thread::Current();
+      ASSERT(I == T->isolate());
+      StackZone zone(T);
+      HandleScope handle_scope(T);
+      Error& error = Error::Handle(Z);
+      error = T->sticky_error();
+      if (!error.IsNull() && !error.IsUnwindError()) {
+        OS::PrintErr("kernel-service: Error: %s\n", error.ToErrorCString());
+      }
+      error = I->sticky_error();
+      if (!error.IsNull() && !error.IsUnwindError()) {
+        OS::PrintErr("kernel-service: Error: %s\n", error.ToErrorCString());
+      }
+      Dart::RunShutdownCallback();
+    }
+    // Shut the isolate down.
+    Dart::ShutdownIsolate(I);
+    if (FLAG_trace_kernel) {
+      OS::Print("kernel-service: Shutdown.\n");
+    }
+  }
+
+  bool RunMain(Isolate* I) {
+    Thread* T = Thread::Current();
+    ASSERT(I == T->isolate());
+    StackZone zone(T);
+    HANDLESCOPE(T);
+    // Invoke main which will return the port to which load requests are sent.
+    const Library& root_library =
+        Library::Handle(Z, I->object_store()->root_library());
+    if (root_library.IsNull()) {
+      if (FLAG_trace_kernel) {
+        OS::Print("kernel-service: Embedder did not install a script.");
+      }
+      // Kernel isolate is not supported by embedder.
+      return false;
+    }
+    ASSERT(!root_library.IsNull());
+    const String& entry_name = String::Handle(Z, String::New("main"));
+    ASSERT(!entry_name.IsNull());
+    const Function& entry = Function::Handle(
+        Z, root_library.LookupFunctionAllowPrivate(entry_name));
+    if (entry.IsNull()) {
+      // Kernel isolate is not supported by embedder.
+      if (FLAG_trace_kernel) {
+        OS::Print("kernel-service: Embedder did not provide a main function.");
+      }
+      return false;
+    }
+    ASSERT(!entry.IsNull());
+    const Object& result = Object::Handle(
+        Z, DartEntry::InvokeFunction(entry, Object::empty_array()));
+    ASSERT(!result.IsNull());
+    if (result.IsError()) {
+      // Kernel isolate did not initialize properly.
+      if (FLAG_trace_kernel) {
+        const Error& error = Error::Cast(result);
+        OS::Print("kernel-service: Calling main resulted in an error: %s",
+                  error.ToErrorCString());
+      }
+      return false;
+    }
+    ASSERT(result.IsReceivePort());
+    const ReceivePort& rp = ReceivePort::Cast(result);
+    KernelIsolate::SetLoadPort(rp.Id());
+    return true;
+  }
+};
+
+
+void KernelIsolate::Run() {
+  if (!FLAG_use_dart_frontend) {
+    return;
+  }
+  // Grab the isolate create callback here to avoid race conditions with tests
+  // that change this after Dart_Initialize returns.
+  create_callback_ = Isolate::CreateCallback();
+  Dart::thread_pool()->Run(new RunKernelTask());
+}
+
+
+void KernelIsolate::InitCallback(Isolate* I) {
+  Thread* T = Thread::Current();
+  ASSERT(I == T->isolate());
+  ASSERT(I != NULL);
+  ASSERT(I->name() != NULL);
+  if (!FLAG_use_dart_frontend ||
+      (strstr(I->name(), "kernel-service") == NULL)) {
+    // Not kernel isolate.
+    return;
+  }
+  ASSERT(!Exists());
+  if (FLAG_trace_kernel) {
+    OS::Print("kernel-service: InitCallback for %s.\n", I->name());
+  }
+  SetKernelIsolate(I);
+}
+
+
+bool KernelIsolate::IsKernelIsolate(const Isolate* isolate) {
+  MonitorLocker ml(monitor_);
+  return isolate == isolate_;
+}
+
+
+bool KernelIsolate::IsRunning() {
+  MonitorLocker ml(monitor_);
+  return (kernel_port_ != ILLEGAL_PORT) && (isolate_ != NULL);
+}
+
+
+bool KernelIsolate::Exists() {
+  MonitorLocker ml(monitor_);
+  return isolate_ != NULL;
+}
+
+
+void KernelIsolate::SetKernelIsolate(Isolate* isolate) {
+  MonitorLocker ml(monitor_);
+  isolate_ = isolate;
+}
+
+void KernelIsolate::SetLoadPort(Dart_Port port) {
+  MonitorLocker ml(monitor_);
+  kernel_port_ = port;
+}
+
+void KernelIsolate::FinishedInitializing() {
+  MonitorLocker ml(monitor_);
+  initializing_ = false;
+  ml.NotifyAll();
+}
+
+
+Dart_Port KernelIsolate::WaitForKernelPort() {
+  if (!FLAG_use_dart_frontend) {
+    return ILLEGAL_PORT;
+  }
+  MonitorLocker ml(monitor_);
+  while (initializing_ && (kernel_port_ == ILLEGAL_PORT)) {
+    ml.Wait();
+  }
+  return kernel_port_;
+}
+
+#endif  // DART_PRECOMPILED_RUNTIME
+
+}  // namespace dart
diff --git a/runtime/vm/kernel_isolate.h b/runtime/vm/kernel_isolate.h
new file mode 100644
index 0000000..8f54c34
--- /dev/null
+++ b/runtime/vm/kernel_isolate.h
@@ -0,0 +1,57 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef RUNTIME_VM_KERNEL_ISOLATE_H_
+#define RUNTIME_VM_KERNEL_ISOLATE_H_
+
+#if !defined(DART_PRECOMPILED_RUNTIME)
+
+#include "include/dart_api.h"
+
+#include "vm/allocation.h"
+#include "vm/dart.h"
+#include "vm/os_thread.h"
+
+namespace dart {
+
+class KernelIsolate : public AllStatic {
+ public:
+  static const char* kName;
+
+  static void Run();
+
+  static bool Exists();
+  static bool IsRunning();
+  static bool IsKernelIsolate(const Isolate* isolate);
+  static Dart_Port WaitForKernelPort();
+  static Dart_Port KernelPort() { return kernel_port_; }
+
+  static bool LoadScript(const String& url, const String& source);
+
+ protected:
+  static Monitor* monitor_;
+  static Dart_IsolateCreateCallback create_callback_;
+
+  static void InitCallback(Isolate* I);
+  static void SetKernelIsolate(Isolate* isolate);
+  static void SetLoadPort(Dart_Port port);
+  static void FinishedInitializing();
+
+  static Dart_Port kernel_port_;
+  static Isolate* isolate_;
+  static bool initializing_;
+
+  static Dart_IsolateCreateCallback create_callback() {
+    return create_callback_;
+  }
+
+  friend class Dart;
+  friend class RunKernelTask;
+};
+
+}  // namespace dart
+
+#endif  // DART_PRECOMPILED_RUNTIME
+
+#endif  // RUNTIME_VM_KERNEL_ISOLATE_H_
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index ba60399..f60ab34 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -11602,8 +11602,8 @@
 
 
 ObjectPool::EntryType ObjectPool::InfoAt(intptr_t index) const {
-  const TypedData& array = TypedData::Handle(info_array());
-  return static_cast<EntryType>(array.GetInt8(index));
+  ObjectPoolInfo pool_info(*this);
+  return pool_info.InfoAt(index);
 }
 
 
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 61a2866..77b87e6 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -8655,6 +8655,26 @@
 };
 
 
+class ObjectPoolInfo : public ValueObject {
+ public:
+  explicit ObjectPoolInfo(const ObjectPool& pool)
+      : array_(TypedData::Handle(pool.info_array())) {}
+
+  explicit ObjectPoolInfo(const TypedData& info_array) : array_(info_array) {}
+
+  ObjectPool::EntryType InfoAt(intptr_t i) {
+    return static_cast<ObjectPool::EntryType>(array_.GetInt8(i));
+  }
+
+  void SetInfoAt(intptr_t i, ObjectPool::EntryType info) {
+    array_.SetInt8(i, static_cast<int8_t>(info));
+  }
+
+ private:
+  const TypedData& array_;
+};
+
+
 // Breaking cycles and loops.
 RawClass* Object::clazz() const {
   uword raw_value = reinterpret_cast<uword>(raw_);
diff --git a/runtime/vm/precompiler.cc b/runtime/vm/precompiler.cc
index ce07486..9f8cbca 100644
--- a/runtime/vm/precompiler.cc
+++ b/runtime/vm/precompiler.cc
@@ -830,6 +830,7 @@
 #endif
 
   const ObjectPool& pool = ObjectPool::Handle(Z, code.GetObjectPool());
+  ObjectPoolInfo pool_info(pool);
   ICData& call_site = ICData::Handle(Z);
   MegamorphicCache& cache = MegamorphicCache::Handle(Z);
   String& selector = String::Handle(Z);
@@ -838,7 +839,7 @@
   Instance& instance = Instance::Handle(Z);
   Code& target_code = Code::Handle(Z);
   for (intptr_t i = 0; i < pool.Length(); i++) {
-    if (pool.InfoAt(i) == ObjectPool::kTaggedObject) {
+    if (pool_info.InfoAt(i) == ObjectPool::kTaggedObject) {
       entry = pool.ObjectAt(i);
       if (entry.IsICData()) {
         // A dynamic call.
@@ -1032,6 +1033,9 @@
   // argument descriptors.
   if (!instance.IsCanonical()) return;
 
+  // Constants are canonicalized and we avoid repeated processing of them.
+  if (consts_to_retain_.Lookup(&instance) != NULL) return;
+
   consts_to_retain_.Insert(&Instance::ZoneHandle(Z, instance.raw()));
 
   if (cls.NumTypeArguments() > 0) {
@@ -1077,6 +1081,8 @@
 
 
 void Precompiler::AddField(const Field& field) {
+  if (fields_to_retain_.Lookup(&field) != NULL) return;
+
   fields_to_retain_.Insert(&Field::ZoneHandle(Z, field.raw()));
 
   if (field.is_static()) {
@@ -2095,6 +2101,7 @@
           code_(Code::Handle(zone)),
           pool_(ObjectPool::Handle(zone)),
           entry_(Object::Handle(zone)),
+          info_array_(TypedData::Handle(zone)),
           ic_(ICData::Handle(zone)),
           target_name_(String::Handle(zone)),
           args_descriptor_(Array::Handle(zone)),
@@ -2109,8 +2116,10 @@
 
       code_ = function.CurrentCode();
       pool_ = code_.object_pool();
+      info_array_ = pool_.info_array();
+      ObjectPoolInfo pool_info(info_array_);
       for (intptr_t i = 0; i < pool_.Length(); i++) {
-        if (pool_.InfoAt(i) != ObjectPool::kTaggedObject) continue;
+        if (pool_info.InfoAt(i) != ObjectPool::kTaggedObject) continue;
         entry_ = pool_.ObjectAt(i);
         if (entry_.IsICData()) {
           // The only IC calls generated by precompilation are for switchable
@@ -2150,6 +2159,7 @@
     Code& code_;
     ObjectPool& pool_;
     Object& entry_;
+    TypedData& info_array_;
     ICData& ic_;
     String& target_name_;
     Array& args_descriptor_;
diff --git a/runtime/vm/service_isolate.cc b/runtime/vm/service_isolate.cc
index 75342b5..042e808 100644
--- a/runtime/vm/service_isolate.cc
+++ b/runtime/vm/service_isolate.cc
@@ -175,11 +175,9 @@
 
 Dart_Port ServiceIsolate::WaitForLoadPort() {
   MonitorLocker ml(monitor_);
-
   while (initializing_ && (load_port_ == ILLEGAL_PORT)) {
     ml.Wait();
   }
-
   return load_port_;
 }
 
diff --git a/runtime/vm/vm_sources.gypi b/runtime/vm/vm_sources.gypi
index 83b325f..990a486 100644
--- a/runtime/vm/vm_sources.gypi
+++ b/runtime/vm/vm_sources.gypi
@@ -272,6 +272,8 @@
     'json_stream.h',
     'json_stream.cc',
     'json_test.cc',
+    'kernel_isolate.cc',
+    'kernel_isolate.h',
     'locations.cc',
     'locations.h',
     'lockers.cc',
diff --git a/sdk/lib/core/num.dart b/sdk/lib/core/num.dart
index 83b4925..3d59c75 100644
--- a/sdk/lib/core/num.dart
+++ b/sdk/lib/core/num.dart
@@ -36,8 +36,8 @@
    * will fail to work. The behavior is the standard IEEE-754 equality of
    * doubles.
    *
-   * If you can avoid NaN values, the remaining doubles do have a proper eqality
-   * relation, and can be used safely.
+   * If you can avoid NaN values, the remaining doubles do have a proper
+   * equality relation, and can be used safely.
    *
    * Use [compareTo] for a comparison that distinguishes zero and minus zero,
    * and that considers NaN values as equal.
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
index 424742a..f33b63c 100644
--- a/sdk/lib/isolate/isolate.dart
+++ b/sdk/lib/isolate/isolate.dart
@@ -137,11 +137,18 @@
                              this.terminateCapability});
 
   /**
-   * Return the current [Isolate].
+   * Return an [Isolate] object representing the current isolate.
    *
-   * The isolate gives access to the capabilities needed to inspect,
+   * The current isolate for code using [current]
+   * is the isolate running the code.
+   *
+   * The isolate object provides the capabilities required to inspect,
    * pause or kill the isolate, and allows granting these capabilities
    * to others.
+   *
+   * It is possible to pause the current isolate, but doing so *without*
+   * first passing the ability to resume it again to another isolate,
+   * is a sure way to hang your program.
    */
   external static Isolate get current;
 
diff --git a/tests/co19/co19-analyzer2.status b/tests/co19/co19-analyzer2.status
index 990fb9c..d5f3e37 100644
--- a/tests/co19/co19-analyzer2.status
+++ b/tests/co19/co19-analyzer2.status
@@ -182,6 +182,7 @@
 Language/Mixins/Mixin_Application/warning_t02: MissingStaticWarning # Please triage this failure.
 Language/Mixins/declaring_constructor_t05: MissingCompileTimeError # Issue 24767
 Language/Mixins/declaring_constructor_t06: MissingCompileTimeError # Issue 24767
+Language/Statements/Assert/syntax_t04: MissingCompileTimeError # Assert messages are enabled by default
 Language/Statements/Assert/type_t04: MissingStaticWarning
 Language/Statements/Switch/last_statement_t03: MissingStaticWarning
 Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t01: MissingCompileTimeError # Issue 25495
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index f2b0d5f..18f9d09 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -765,23 +765,17 @@
 LibTest/isolate/ReceivePort/asBroadcastStream_A03_t01: RuntimeError # Issue 7728, timer not supported in jsshell
 LibTest/isolate/ReceivePort/asBroadcastStream_A04_t03: RuntimeError # Issue 7728, timer not supported in jsshell
 LibTest/isolate/ReceivePort/close_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
-LibTest/typed_data/Float32List/Float32List.view_A06_t01: fail # co19-roll r587: Please triage this failure
 LibTest/typed_data/Float32List/toList_A01_t01: Skip # co19-roll r559: Please triage this failure
 LibTest/typed_data/Float32x4List/Float32x4List.view_A06_t01: fail # co19-roll r587: Please triage this failure
-LibTest/typed_data/Float64List/Float64List.view_A06_t01: fail # co19-roll r587: Please triage this failure
 LibTest/typed_data/Float64List/toList_A01_t01: Skip # co19-roll r559: Please triage this failure
-LibTest/typed_data/Int16List/Int16List.view_A06_t01: fail # co19-roll r587: Please triage this failure
 LibTest/typed_data/Int16List/toList_A01_t01: Skip # co19-roll r559: Please triage this failure
 LibTest/typed_data/Int16List/toList_A01_t01: fail # co19-roll r559: Please triage this failure
-LibTest/typed_data/Int32List/Int32List.view_A06_t01: fail # co19-roll r587: Please triage this failure
 LibTest/typed_data/Int32List/toList_A01_t01: Skip # co19-roll r559: Please triage this failure
 LibTest/typed_data/Int32List/toList_A01_t01: fail # co19-roll r559: Please triage this failure
 LibTest/typed_data/Int32x4/operator_OR_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
 LibTest/typed_data/Int8List/toList_A01_t01: Skip # co19-roll r559: Please triage this failure
-LibTest/typed_data/Uint16List/Uint16List.view_A06_t01: fail # co19-roll r587: Please triage this failure
 LibTest/typed_data/Uint16List/toList_A01_t01: Skip # co19-roll r559: Please triage this failure
 LibTest/typed_data/Uint16List/toList_A01_t01: fail # co19-roll r559: Please triage this failure
-LibTest/typed_data/Uint32List/Uint32List.view_A06_t01: fail # co19-roll r587: Please triage this failure
 LibTest/typed_data/Uint32List/toList_A01_t01: Skip # issue 16934, co19-roll r559: Please triage this failure
 LibTest/typed_data/Uint8ClampedList/toList_A01_t01: Skip # co19-roll r559: Please triage this failure
 LibTest/typed_data/Uint8List/toList_A01_t01: Skip # co19-roll r559: Please triage this failure
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
index 3ada69f..f931e86 100644
--- a/tests/co19/co19-kernel.status
+++ b/tests/co19/co19-kernel.status
@@ -34,24 +34,24 @@
 Language/Classes/Setters/name_t13: DartkCompileTimeError
 Language/Classes/Setters/name_t14: DartkCompileTimeError
 Language/Classes/Setters/name_t15: DartkCompileTimeError
-Language/Enums/syntax_t08: DartkMissingCompileTimeError
-Language/Enums/syntax_t09: DartkMissingCompileTimeError
-Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t03: DartkMissingCompileTimeError
-Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t04: DartkMissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t17: DartkMissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t18: DartkMissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t21: DartkMissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t22: DartkMissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t23: DartkMissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t24: DartkMissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t25: DartkMissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t26: DartkMissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t27: DartkMissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t28: DartkMissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t29: DartkMissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t30: DartkMissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t31: DartkMissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t32: DartkMissingCompileTimeError
+Language/Enums/syntax_t08: MissingCompileTimeError
+Language/Enums/syntax_t09: MissingCompileTimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t03: MissingCompileTimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t04: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t17: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t18: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t21: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t22: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t23: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t24: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t25: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t26: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t27: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t28: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t29: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t30: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t31: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t32: MissingCompileTimeError
 Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/identical_t01: DartkCompileTimeError
 Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/identical_t02: DartkCompileTimeError
 Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/identical_t03: DartkCompileTimeError
@@ -182,92 +182,13 @@
 Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t08: DartkCompileTimeError
 Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_method_and_getter_t01: DartkCompileTimeError
 Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_method_and_getter_t02: DartkCompileTimeError
-Language/Libraries_and_Scripts/Exports/syntax_t01: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/Exports/syntax_t04: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/Exports/syntax_t05: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/Exports/syntax_t06: DartkMissingCompileTimeError
+Language/Libraries_and_Scripts/Exports/syntax_t01: MissingCompileTimeError
+Language/Libraries_and_Scripts/Exports/syntax_t04: MissingCompileTimeError
+Language/Libraries_and_Scripts/Exports/syntax_t05: MissingCompileTimeError
+Language/Libraries_and_Scripts/Exports/syntax_t06: MissingCompileTimeError
 Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t02: DartkCompileTimeError
 Language/Libraries_and_Scripts/Scripts/top_level_main_t01: DartkCrash
 Language/Libraries_and_Scripts/Scripts/top_level_main_t02: DartkCrash
-Language/Libraries_and_Scripts/definition_syntax_t01: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t03: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t04: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t06: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t07: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t08: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t09: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t10: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t15: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t17: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t18: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t19: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t20: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t21: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t22: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t23: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t24: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t25: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t26: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t27: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/definition_syntax_t29: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t02: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t03: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t04: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t05: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t06: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t07: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t08: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t09: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t10: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t11: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t12: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t13: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t14: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t15: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t16: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t17: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t18: DartkMissingCompileTimeError
-Language/Libraries_and_Scripts/top_level_syntax_t19: DartkMissingCompileTimeError
-Language/Statements/Break/label_t03: DartkMissingCompileTimeError
-Language/Statements/Break/label_t04: DartkMissingCompileTimeError
-Language/Statements/Continue/label_t07: DartkMissingCompileTimeError
-Language/Variables/final_or_static_initialization_t01: DartkMissingCompileTimeError
-Language/Variables/final_or_static_initialization_t02: DartkMissingCompileTimeError
-Language/Variables/final_or_static_initialization_t03: DartkMissingCompileTimeError
-Language/Variables/final_t04: DartkMissingCompileTimeError
-Language/Variables/final_t05: DartkMissingCompileTimeError
-Language/Variables/final_t06: DartkMissingCompileTimeError
-Language/Variables/final_t07: DartkMissingCompileTimeError
-
-# dartk: JIT failures
-[ $compiler == dartk && $runtime == vm ]
-Language/Expressions/Constants/exception_t01: DartkMissingCompileTimeError
-Language/Expressions/Constants/exception_t02: DartkMissingCompileTimeError
-Language/Expressions/Identifier_Reference/evaluation_type_parameter_t02: DartkMissingCompileTimeError
-Language/Mixins/Mixin_Application/error_t01: DartkMissingCompileTimeError
-Language/Mixins/Mixin_Application/error_t02: DartkMissingCompileTimeError
-Language/Mixins/Mixin_Application/syntax_t16: DartkCrash
-
-# dartk: precompilation failures
-[ $compiler == dartkp && $runtime == dart_precompiled ]
-Language/Enums/syntax_t08: MissingCompileTimeError
-Language/Enums/syntax_t09: MissingCompileTimeError
-Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t03: MissingCompileTimeError
-Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t04: MissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t17: MissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t18: MissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t21: MissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t22: MissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t23: MissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t24: MissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t25: MissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t26: MissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t27: MissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t28: MissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t29: MissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t30: MissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t31: MissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t32: MissingCompileTimeError
 Language/Libraries_and_Scripts/definition_syntax_t01: MissingCompileTimeError
 Language/Libraries_and_Scripts/definition_syntax_t03: MissingCompileTimeError
 Language/Libraries_and_Scripts/definition_syntax_t04: MissingCompileTimeError
@@ -289,10 +210,6 @@
 Language/Libraries_and_Scripts/definition_syntax_t26: MissingCompileTimeError
 Language/Libraries_and_Scripts/definition_syntax_t27: MissingCompileTimeError
 Language/Libraries_and_Scripts/definition_syntax_t29: MissingCompileTimeError
-Language/Libraries_and_Scripts/Exports/syntax_t01: MissingCompileTimeError
-Language/Libraries_and_Scripts/Exports/syntax_t04: MissingCompileTimeError
-Language/Libraries_and_Scripts/Exports/syntax_t05: MissingCompileTimeError
-Language/Libraries_and_Scripts/Exports/syntax_t06: MissingCompileTimeError
 Language/Libraries_and_Scripts/top_level_syntax_t02: MissingCompileTimeError
 Language/Libraries_and_Scripts/top_level_syntax_t03: MissingCompileTimeError
 Language/Libraries_and_Scripts/top_level_syntax_t04: MissingCompileTimeError
@@ -311,6 +228,7 @@
 Language/Libraries_and_Scripts/top_level_syntax_t17: MissingCompileTimeError
 Language/Libraries_and_Scripts/top_level_syntax_t18: MissingCompileTimeError
 Language/Libraries_and_Scripts/top_level_syntax_t19: MissingCompileTimeError
+Language/Statements/Assert/syntax_t04: MissingCompileTimeError
 Language/Statements/Break/label_t03: MissingCompileTimeError
 Language/Statements/Break/label_t04: MissingCompileTimeError
 Language/Statements/Continue/label_t07: MissingCompileTimeError
@@ -322,6 +240,18 @@
 Language/Variables/final_t06: MissingCompileTimeError
 Language/Variables/final_t07: MissingCompileTimeError
 
+# dartk: JIT failures
+[ $compiler == dartk && $runtime == vm ]
+Language/Expressions/Constants/exception_t01: MissingCompileTimeError
+Language/Expressions/Constants/exception_t02: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/evaluation_type_parameter_t02: MissingCompileTimeError
+Language/Mixins/Mixin_Application/error_t01: MissingCompileTimeError
+Language/Mixins/Mixin_Application/error_t02: MissingCompileTimeError
+Language/Mixins/Mixin_Application/syntax_t16: DartkCrash
+
+# dartk: precompilation failures
+[ $compiler == dartkp && $runtime == dart_precompiled ]
+
 ###############################################################################
 # VM Entries
 ###############################################################################
diff --git a/tests/compiler/dart2js/compiler_helper.dart b/tests/compiler/dart2js/compiler_helper.dart
index ff3dffa..ccf41fa 100644
--- a/tests/compiler/dart2js/compiler_helper.dart
+++ b/tests/compiler/dart2js/compiler_helper.dart
@@ -75,11 +75,10 @@
     compiler.enqueuer.resolution
         .applyImpact(compiler.backend.computeHelpersImpact());
     compiler.processQueue(compiler.enqueuer.resolution, element);
-    compiler.openWorld.closeWorld(compiler.reporter);
-    compiler.backend.onResolutionComplete();
     ResolutionWorkItem resolutionWork =
         new ResolutionWorkItem(compiler.resolution, element);
     resolutionWork.run();
+    compiler.closeResolution();
     CodegenWorkItem work = new CodegenWorkItem(compiler.backend, element);
     compiler.phase = Compiler.PHASE_COMPILING;
     work.run();
diff --git a/tests/compiler/dart2js/diagnose_ambiguous_test.dart b/tests/compiler/dart2js/diagnose_ambiguous_test.dart
index 8867a36..268db44 100644
--- a/tests/compiler/dart2js/diagnose_ambiguous_test.dart
+++ b/tests/compiler/dart2js/diagnose_ambiguous_test.dart
@@ -23,9 +23,9 @@
     diagnostics.sort();
     var expected = [
       "MessageKind.AMBIGUOUS_LOCATION:"
-          "memory:exporter.dart:43:47:'hest' is defined here.:info",
+          "memory:exporter.dart:43:49:'hest' is defined here.:info",
       "MessageKind.AMBIGUOUS_LOCATION:"
-          "memory:library.dart:41:45:'hest' is defined here.:info",
+          "memory:library.dart:41:47:'hest' is defined here.:info",
       "MessageKind.DUPLICATE_IMPORT:"
           "memory:main.dart:86:92:Duplicate import of 'hest'.:warning",
       "MessageKind.IMPORTED_HERE:"
diff --git a/tests/compiler/dart2js/embedded_category_api_boundary_test.dart b/tests/compiler/dart2js/embedded_category_api_boundary_test.dart
index c6e391d..1240132 100644
--- a/tests/compiler/dart2js/embedded_category_api_boundary_test.dart
+++ b/tests/compiler/dart2js/embedded_category_api_boundary_test.dart
@@ -37,7 +37,7 @@
 ]);
 
 bool checkResults(Compiler compiler, CollectingDiagnosticHandler handler) {
-  return compiler.enqueuer.resolution.processedElements
+  return compiler.enqueuer.resolution.processedEntities
       .every((Element element) {
     if (whiteList.contains("$element")) return true;
     LibraryInfo info = libraries[element.library.canonicalUri.path];
diff --git a/tests/compiler/dart2js/enumset_test.dart b/tests/compiler/dart2js/enumset_test.dart
index a5f8754..92ab39c 100644
--- a/tests/compiler/dart2js/enumset_test.dart
+++ b/tests/compiler/dart2js/enumset_test.dart
@@ -7,7 +7,14 @@
 import 'package:compiler/src/util/enumset.dart';
 import 'package:expect/expect.dart';
 
-enum Enum { A, B, C, D, E, F, }
+enum Enum {
+  A,
+  B,
+  C,
+  D,
+  E,
+  F,
+}
 
 main() {
   testAddRemoveContains();
diff --git a/tests/compiler/dart2js/exit_code_test.dart b/tests/compiler/dart2js/exit_code_test.dart
index 8478d42..dfca8b34 100644
--- a/tests/compiler/dart2js/exit_code_test.dart
+++ b/tests/compiler/dart2js/exit_code_test.dart
@@ -169,8 +169,7 @@
 
   TestResolver(TestCompiler compiler, ConstantCompiler constantCompiler)
       : this.compiler = compiler,
-        super(compiler.resolution, constantCompiler, compiler.openWorld,
-            compiler.measurer);
+        super(compiler.resolution, constantCompiler, compiler.measurer);
 
   void computeClassMembers(ClassElement element) {
     compiler.test('ResolverTask.computeClassMembers');
diff --git a/tests/compiler/dart2js/kernel/closed_world_test.dart b/tests/compiler/dart2js/kernel/closed_world_test.dart
index cf642fa..8b64123 100644
--- a/tests/compiler/dart2js/kernel/closed_world_test.dart
+++ b/tests/compiler/dart2js/kernel/closed_world_test.dart
@@ -80,7 +80,7 @@
     worldBuilder.useInstantiationMap = true;
     compiler.resolution.retainCachesForTesting = true;
     await compiler.run(entryPoint);
-    compiler.openWorld.closeWorld(compiler.reporter);
+    compiler.resolverWorld.openWorld.closeWorld(compiler.reporter);
 
     JavaScriptBackend backend = compiler.backend;
     // Create a new resolution enqueuer and feed it with the [WorldImpact]s
@@ -92,7 +92,6 @@
         const TreeShakingEnqueuerStrategy(),
         compiler.globalDependencies,
         backend,
-        compiler.commonElements,
         compiler.cacheStrategy,
         'enqueuer from kernel');
     // TODO(johnniwinther): Store backend info separately. This replacement is
@@ -113,7 +112,6 @@
       ResolutionImpact resolutionImpact = build(compiler, element.resolvedAst);
       WorldImpact worldImpact = compiler.backend.impactTransformer
           .transformResolutionImpact(enqueuer, resolutionImpact);
-      enqueuer.registerProcessedElement(element);
       enqueuer.applyImpact(worldImpact, impactSource: element);
     });
     ClosedWorld closedWorld =
diff --git a/tests/compiler/dart2js/kernel/literals_test.dart b/tests/compiler/dart2js/kernel/literals_test.dart
index 4bdf271..5cc337a 100644
--- a/tests/compiler/dart2js/kernel/literals_test.dart
+++ b/tests/compiler/dart2js/kernel/literals_test.dart
@@ -19,4 +19,7 @@
   test('compile function that returns a const map', () {
     return check('main() { return const {"a": 1, "b": 2, "c": 3}; }');
   });
+  test('compile top level string field ', () {
+    return check('String foo = (() { return "a";})(); main() { return foo; }');
+  });
 }
diff --git a/tests/compiler/dart2js/map_tracer_test.dart b/tests/compiler/dart2js/map_tracer_test.dart
index 571450c..0bd5289 100644
--- a/tests/compiler/dart2js/map_tracer_test.dart
+++ b/tests/compiler/dart2js/map_tracer_test.dart
@@ -211,7 +211,8 @@
   Uri uri = new Uri(scheme: 'source');
   var compiler = compilerFor(generateTest(allocation), uri,
       expectedErrors: 0, expectedWarnings: 1);
-  var closedWorld = compiler.openWorld.closeWorld(compiler.reporter);
+  compiler.closeResolution();
+  var closedWorld = compiler.closedWorld;
   asyncTest(() => compiler.run(uri).then((_) {
         var keyType, valueType;
         var commonMasks = compiler.closedWorld.commonMasks;
diff --git a/tests/compiler/dart2js/memory_compiler.dart b/tests/compiler/dart2js/memory_compiler.dart
index 240da71..89661da 100644
--- a/tests/compiler/dart2js/memory_compiler.dart
+++ b/tests/compiler/dart2js/memory_compiler.dart
@@ -183,10 +183,10 @@
         .copyConstantValues(cachedCompiler.backend.constantCompilerTask);
 
     Iterable cachedTreeElements =
-        cachedCompiler.enqueuer.resolution.processedElements;
+        cachedCompiler.enqueuer.resolution.processedEntities;
     cachedTreeElements.forEach((element) {
       if (element.library.isPlatformLibrary) {
-        compiler.enqueuer.resolution.registerProcessedElement(element);
+        compiler.enqueuer.resolution.registerProcessedElementInternal(element);
       }
     });
 
diff --git a/tests/compiler/dart2js/mirrors_used_test.dart b/tests/compiler/dart2js/mirrors_used_test.dart
index 1befda9..9282b16 100644
--- a/tests/compiler/dart2js/mirrors_used_test.dart
+++ b/tests/compiler/dart2js/mirrors_used_test.dart
@@ -127,7 +127,7 @@
     Set<ConstantValue> compiledConstants = backend.constants.compiledConstants;
     // Make sure that most of the metadata constants aren't included in the
     // generated code.
-    backend.processMetadata(compiler.enqueuer.resolution.processedElements,
+    backend.processMetadata(compiler.enqueuer.resolution.processedEntities,
         (metadata) {
       ConstantValue constant =
           backend.constants.getConstantValueForMetadata(metadata);
diff --git a/tests/compiler/dart2js/mock_libraries.dart b/tests/compiler/dart2js/mock_libraries.dart
index 501e0dc..c6506fd 100644
--- a/tests/compiler/dart2js/mock_libraries.dart
+++ b/tests/compiler/dart2js/mock_libraries.dart
@@ -101,7 +101,6 @@
   'Symbol': 'class Symbol { final name; const Symbol(this.name); }',
   'Type': 'class Type {}',
   'Pattern': 'abstract class Pattern {}',
-
   '_genericNoSuchMethod': '_genericNoSuchMethod(a,b,c,d,e) {}',
   '_unresolvedConstructorError': '_unresolvedConstructorError(a,b,c,d,e) {}',
   '_malformedTypeError': '_malformedTypeError(message) {}',
diff --git a/tests/compiler/dart2js/patch_test.dart b/tests/compiler/dart2js/patch_test.dart
index 0eb0445..4277cd4 100644
--- a/tests/compiler/dart2js/patch_test.dart
+++ b/tests/compiler/dart2js/patch_test.dart
@@ -973,7 +973,8 @@
       """,
       runCompiler: true,
       analyzeOnly: true);
-  ClosedWorld world = compiler.openWorld.closeWorld(compiler.reporter);
+  compiler.closeResolution();
+  ClosedWorld world = compiler.closedWorld;
 
   ClassElement cls = ensure(
       compiler, "A", compiler.commonElements.coreLibrary.find,
diff --git a/tests/compiler/dart2js/related_types.dart b/tests/compiler/dart2js/related_types.dart
index a2516f7..af65613 100644
--- a/tests/compiler/dart2js/related_types.dart
+++ b/tests/compiler/dart2js/related_types.dart
@@ -35,7 +35,8 @@
 
 /// Check all loaded libraries in [compiler] for unrelated types.
 void checkRelatedTypes(Compiler compiler) {
-  compiler.openWorld.closeWorld(compiler.reporter);
+  compiler.closeResolution();
+  compiler.closedWorld;
   for (LibraryElement library in compiler.libraryLoader.libraries) {
     checkLibraryElement(compiler, library);
   }
diff --git a/tests/compiler/dart2js/related_types_test.dart b/tests/compiler/dart2js/related_types_test.dart
index 6711fb2..e256ac8 100644
--- a/tests/compiler/dart2js/related_types_test.dart
+++ b/tests/compiler/dart2js/related_types_test.dart
@@ -267,7 +267,7 @@
     Expect.isFalse(
         collector.hasRegularMessages, "Unexpected analysis messages.");
     Compiler compiler = result.compiler;
-    compiler.openWorld.closeWorld(compiler.reporter);
+    compiler.closeResolution();
 
     void checkMember(MemberElement member) {
       if (!member.name.startsWith('test_')) return;
diff --git a/tests/compiler/dart2js/resolution_test.dart b/tests/compiler/dart2js/resolution_test.dart
index cfca9a8..8ad71c2 100644
--- a/tests/compiler/dart2js/resolution_test.dart
+++ b/tests/compiler/dart2js/resolution_test.dart
@@ -103,14 +103,16 @@
 void testHasRuntimeType(String code) {
   test(code, (compiler) {
     var element = compiler.backend.helpers.createRuntimeType;
-    Expect.isTrue(compiler.enqueuer.resolution.isProcessed(element));
+    Expect.isTrue(
+        compiler.enqueuer.resolution.processedEntities.contains(element));
   });
 }
 
 main() {
   test(NO_RUNTIME_TYPE, (compiler) {
     var element = compiler.backend.helpers.createRuntimeType;
-    Expect.isFalse(compiler.enqueuer.resolution.isProcessed(element));
+    Expect.isFalse(
+        compiler.enqueuer.resolution.processedEntities.contains(element));
   });
 
   testHasRuntimeType(HAS_RUNTIME_TYPE_1);
diff --git a/tests/compiler/dart2js/serialization/model_test_helper.dart b/tests/compiler/dart2js/serialization/model_test_helper.dart
index e3e6614..e970d22 100644
--- a/tests/compiler/dart2js/serialization/model_test_helper.dart
+++ b/tests/compiler/dart2js/serialization/model_test_helper.dart
@@ -110,7 +110,7 @@
     {bool typeEquivalence(DartType a, DartType b): areTypesEquivalent,
     bool elementFilter(Element element),
     bool verbose: false}) {
-  checkSets(enqueuer1.processedElements, enqueuer2.processedElements,
+  checkSets(enqueuer1.processedEntities, enqueuer2.processedEntities,
       "Processed element mismatch", areElementsEquivalent,
       elementFilter: elementFilter, verbose: verbose);
 
@@ -146,19 +146,15 @@
   JavaScriptBackend backend1 = enqueuer1.backend;
   JavaScriptBackend backend2 = enqueuer2.backend;
   Expect.equals(backend1.hasInvokeOnSupport, backend2.hasInvokeOnSupport,
-      "Compiler.enabledInvokeOn mismatch");
+      "JavaScriptBackend.hasInvokeOnSupport mismatch");
   Expect.equals(
-      enqueuer1.universe.hasFunctionApplySupport,
-      enqueuer2.universe.hasFunctionApplySupport,
-      "ResolutionEnqueuer.universe.hasFunctionApplySupport mismatch");
-  Expect.equals(
-      enqueuer1.universe.hasRuntimeTypeSupport,
-      enqueuer2.universe.hasRuntimeTypeSupport,
-      "ResolutionEnqueuer.universe.hasRuntimeTypeSupport mismatch");
-  Expect.equals(
-      enqueuer1.universe.hasIsolateSupport,
-      enqueuer2.universe.hasIsolateSupport,
-      "ResolutionEnqueuer.universe.hasIsolateSupport mismatch");
+      backend1.hasFunctionApplySupport,
+      backend2.hasFunctionApplySupport,
+      "JavaScriptBackend.hasFunctionApplySupport mismatch");
+  Expect.equals(backend1.hasRuntimeTypeSupport, backend2.hasRuntimeTypeSupport,
+      "JavaScriptBackend.hasRuntimeTypeSupport mismatch");
+  Expect.equals(backend1.hasIsolateSupport, backend2.hasIsolateSupport,
+      "JavaScriptBackend.hasIsolateSupport mismatch");
 }
 
 void checkClosedWorlds(ClosedWorld closedWorld1, ClosedWorld closedWorld2,
@@ -174,8 +170,8 @@
 void checkBackendInfo(Compiler compilerNormal, Compiler compilerDeserialized,
     {bool verbose: false}) {
   checkSets(
-      compilerNormal.enqueuer.resolution.processedElements,
-      compilerDeserialized.enqueuer.resolution.processedElements,
+      compilerNormal.enqueuer.resolution.processedEntities,
+      compilerDeserialized.enqueuer.resolution.processedEntities,
       "Processed element mismatch",
       areElementsEquivalent, onSameElement: (a, b) {
     checkElements(compilerNormal, compilerDeserialized, a, b, verbose: verbose);
diff --git a/tests/compiler/dart2js/simple_inferrer_callers_test.dart b/tests/compiler/dart2js/simple_inferrer_callers_test.dart
index 41b9457..a6ca00e 100644
--- a/tests/compiler/dart2js/simple_inferrer_callers_test.dart
+++ b/tests/compiler/dart2js/simple_inferrer_callers_test.dart
@@ -8,6 +8,7 @@
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 import 'package:compiler/src/inferrer/type_graph_inferrer.dart';
+import 'package:compiler/src/world.dart' show ClosedWorldRefiner;
 
 import 'compiler_helper.dart';
 
@@ -29,7 +30,8 @@
 // Create our own type inferrer to avoid clearing out the internal
 // data structures.
 class MyInferrer extends TypeGraphInferrer {
-  MyInferrer(compiler, commonMasks) : super(compiler, commonMasks);
+  MyInferrer(compiler, closedWorld, closedWorldRefiner)
+      : super(compiler, closedWorld, closedWorldRefiner);
   clear() {}
 }
 
@@ -37,11 +39,12 @@
   Uri uri = new Uri(scheme: 'source');
   var compiler = compilerFor(TEST, uri, analyzeOnly: true);
   asyncTest(() => compiler.run(uri).then((_) {
-        compiler.closeResolution();
+        ClosedWorldRefiner closedWorldRefiner = compiler.closeResolution();
         var inferrer =
-            new MyInferrer(compiler, compiler.closedWorld.commonMasks);
+            new MyInferrer(compiler, compiler.closedWorld, closedWorldRefiner);
         compiler.globalInference.typesInferrerInternal = inferrer;
-        compiler.globalInference.runGlobalTypeInference(compiler.mainFunction);
+        compiler.globalInference.runGlobalTypeInference(
+            compiler.mainFunction, compiler.closedWorld, closedWorldRefiner);
         var mainElement = findElement(compiler, 'main');
         var classA = findElement(compiler, 'A');
         var fieldA = classA.lookupLocalMember('field');
diff --git a/tests/compiler/dart2js/sourcemaps/diff.dart b/tests/compiler/dart2js/sourcemaps/diff.dart
index 9627b3c..7505892 100644
--- a/tests/compiler/dart2js/sourcemaps/diff.dart
+++ b/tests/compiler/dart2js/sourcemaps/diff.dart
@@ -11,7 +11,11 @@
 import 'sourcemap_helper.dart';
 import 'sourcemap_html_helper.dart';
 
-enum DiffKind { UNMATCHED, MATCHING, IDENTICAL, }
+enum DiffKind {
+  UNMATCHED,
+  MATCHING,
+  IDENTICAL,
+}
 
 /// Id for an output column.
 class DiffColumn {
diff --git a/tests/compiler/dart2js/sourcemaps/html_parts.dart b/tests/compiler/dart2js/sourcemaps/html_parts.dart
index d4e809f..2691a09 100644
--- a/tests/compiler/dart2js/sourcemaps/html_parts.dart
+++ b/tests/compiler/dart2js/sourcemaps/html_parts.dart
@@ -125,7 +125,15 @@
   }
 }
 
-enum HtmlPartKind { CODE, LINE, CONST, NEWLINE, TEXT, TAG, LINE_NUMBER, }
+enum HtmlPartKind {
+  CODE,
+  LINE,
+  CONST,
+  NEWLINE,
+  TEXT,
+  TAG,
+  LINE_NUMBER,
+}
 
 abstract class HtmlPart {
   void printHtmlOn(StringBuffer buffer, HtmlPrintContext context);
diff --git a/tests/compiler/dart2js/sourcemaps/output_structure.dart b/tests/compiler/dart2js/sourcemaps/output_structure.dart
index 21a5bc3..648973a 100644
--- a/tests/compiler/dart2js/sourcemaps/output_structure.dart
+++ b/tests/compiler/dart2js/sourcemaps/output_structure.dart
@@ -637,7 +637,11 @@
   String toString() => '[$from,$to[';
 }
 
-enum CodeKind { LIBRARY, CLASS, MEMBER, }
+enum CodeKind {
+  LIBRARY,
+  CLASS,
+  MEMBER,
+}
 
 class CodeLocation {
   final Uri uri;
diff --git a/tests/compiler/dart2js/type_combination_test.dart b/tests/compiler/dart2js/type_combination_test.dart
index bde511b..fc68975 100644
--- a/tests/compiler/dart2js/type_combination_test.dart
+++ b/tests/compiler/dart2js/type_combination_test.dart
@@ -738,7 +738,6 @@
     """);
     JavaScriptBackend backend = compiler.backend;
     BackendHelpers helpers = backend.helpers;
-    ClosedWorld world = compiler.openWorld.closeWorld(compiler.reporter);
     WorldImpactBuilderImpl impactBuilder = new WorldImpactBuilderImpl();
     helpers.interceptorsLibrary.forEachLocalMember((element) {
       if (element.isClass) {
@@ -757,7 +756,8 @@
     impactBuilder
         .registerTypeUse(new TypeUse.instantiation(patternImplClass.rawType));
     compiler.enqueuer.resolution.applyImpact(impactBuilder);
-    compiler.openWorld.closeWorld(compiler.reporter);
+    compiler.closeResolution();
+    ClosedWorld world = compiler.closedWorld;
 
     // Grab hold of a supertype for String so we can produce potential
     // string types.
diff --git a/tests/compiler/dart2js/type_mask_test.dart b/tests/compiler/dart2js/type_mask_test.dart
index 3cb01a0..16bf898 100644
--- a/tests/compiler/dart2js/type_mask_test.dart
+++ b/tests/compiler/dart2js/type_mask_test.dart
@@ -21,7 +21,8 @@
 main() {
   Uri uri = new Uri(scheme: 'source');
   var compiler = compilerFor(CODE, uri);
-  var closedWorld = compiler.openWorld.closeWorld(compiler.reporter);
+  compiler.closeResolution();
+  var closedWorld = compiler.closedWorld;
 
   asyncTest(() => compiler.run(uri).then((_) {
         var classA = findElement(compiler, 'A');
diff --git a/tests/compiler/dart2js/union_type_test.dart b/tests/compiler/dart2js/union_type_test.dart
index 65e6da6..8294d47 100644
--- a/tests/compiler/dart2js/union_type_test.dart
+++ b/tests/compiler/dart2js/union_type_test.dart
@@ -22,8 +22,8 @@
       }
       """,
         useMockCompiler: false);
-    ClosedWorld world =
-        env.compiler.openWorld.closeWorld(env.compiler.reporter);
+    env.compiler.closeResolution();
+    ClosedWorld world = env.compiler.closedWorld;
     FlatTypeMask mask1 = new FlatTypeMask.exact(env.getElement('A'));
     FlatTypeMask mask2 = new FlatTypeMask.exact(env.getElement('B'));
     UnionTypeMask union1 = mask1.nonNullable().union(mask2, world);
diff --git a/pkg/dev_compiler/test/codegen/corelib/apply2_test.dart b/tests/corelib_strong/apply2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/apply2_test.dart
rename to tests/corelib_strong/apply2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/apply3_test.dart b/tests/corelib_strong/apply3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/apply3_test.dart
rename to tests/corelib_strong/apply3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/apply4_test.dart b/tests/corelib_strong/apply4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/apply4_test.dart
rename to tests/corelib_strong/apply4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/apply_test.dart b/tests/corelib_strong/apply_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/apply_test.dart
rename to tests/corelib_strong/apply_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/big_integer_arith_vm_test.dart b/tests/corelib_strong/big_integer_arith_vm_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/big_integer_arith_vm_test.dart
rename to tests/corelib_strong/big_integer_arith_vm_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/big_integer_huge_mul_vm_test.dart b/tests/corelib_strong/big_integer_huge_mul_vm_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/big_integer_huge_mul_vm_test.dart
rename to tests/corelib_strong/big_integer_huge_mul_vm_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/big_integer_parsed_arith_vm_test.dart b/tests/corelib_strong/big_integer_parsed_arith_vm_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/big_integer_parsed_arith_vm_test.dart
rename to tests/corelib_strong/big_integer_parsed_arith_vm_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/big_integer_parsed_div_rem_vm_test.dart b/tests/corelib_strong/big_integer_parsed_div_rem_vm_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/big_integer_parsed_div_rem_vm_test.dart
rename to tests/corelib_strong/big_integer_parsed_div_rem_vm_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/big_integer_parsed_mul_div_vm_test.dart b/tests/corelib_strong/big_integer_parsed_mul_div_vm_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/big_integer_parsed_mul_div_vm_test.dart
rename to tests/corelib_strong/big_integer_parsed_mul_div_vm_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/bit_twiddling_bigint_test.dart b/tests/corelib_strong/bit_twiddling_bigint_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/bit_twiddling_bigint_test.dart
rename to tests/corelib_strong/bit_twiddling_bigint_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/bit_twiddling_test.dart b/tests/corelib_strong/bit_twiddling_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/bit_twiddling_test.dart
rename to tests/corelib_strong/bit_twiddling_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/bool_from_environment2_test.dart b/tests/corelib_strong/bool_from_environment2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/bool_from_environment2_test.dart
rename to tests/corelib_strong/bool_from_environment2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/bool_from_environment_test.dart b/tests/corelib_strong/bool_from_environment_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/bool_from_environment_test.dart
rename to tests/corelib_strong/bool_from_environment_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/bool_hashcode_test.dart b/tests/corelib_strong/bool_hashcode_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/bool_hashcode_test.dart
rename to tests/corelib_strong/bool_hashcode_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/collection_from_test.dart b/tests/corelib_strong/collection_from_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/collection_from_test.dart
rename to tests/corelib_strong/collection_from_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/collection_length_test.dart b/tests/corelib_strong/collection_length_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/collection_length_test.dart
rename to tests/corelib_strong/collection_length_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/collection_removes_test.dart b/tests/corelib_strong/collection_removes_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/collection_removes_test.dart
rename to tests/corelib_strong/collection_removes_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/collection_test.dart b/tests/corelib_strong/collection_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/collection_test.dart
rename to tests/corelib_strong/collection_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/collection_to_string_test.dart b/tests/corelib_strong/collection_to_string_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/collection_to_string_test.dart
rename to tests/corelib_strong/collection_to_string_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/compare_to2_test.dart b/tests/corelib_strong/compare_to2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/compare_to2_test.dart
rename to tests/corelib_strong/compare_to2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/compare_to_test.dart b/tests/corelib_strong/compare_to_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/compare_to_test.dart
rename to tests/corelib_strong/compare_to_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/const_list_literal_test.dart b/tests/corelib_strong/const_list_literal_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/const_list_literal_test.dart
rename to tests/corelib_strong/const_list_literal_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/const_list_remove_range_test.dart b/tests/corelib_strong/const_list_remove_range_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/const_list_remove_range_test.dart
rename to tests/corelib_strong/const_list_remove_range_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/const_list_set_range_test.dart b/tests/corelib_strong/const_list_set_range_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/const_list_set_range_test.dart
rename to tests/corelib_strong/const_list_set_range_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/core_runtime_types_test.dart b/tests/corelib_strong/core_runtime_types_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/core_runtime_types_test.dart
rename to tests/corelib_strong/core_runtime_types_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/data_resource_test.dart b/tests/corelib_strong/data_resource_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/data_resource_test.dart
rename to tests/corelib_strong/data_resource_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/data_uri_test.dart b/tests/corelib_strong/data_uri_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/data_uri_test.dart
rename to tests/corelib_strong/data_uri_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/date_time2_test.dart b/tests/corelib_strong/date_time2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/date_time2_test.dart
rename to tests/corelib_strong/date_time2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/date_time3_test.dart b/tests/corelib_strong/date_time3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/date_time3_test.dart
rename to tests/corelib_strong/date_time3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/date_time4_test.dart b/tests/corelib_strong/date_time4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/date_time4_test.dart
rename to tests/corelib_strong/date_time4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/date_time5_test.dart b/tests/corelib_strong/date_time5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/date_time5_test.dart
rename to tests/corelib_strong/date_time5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/date_time6_test.dart b/tests/corelib_strong/date_time6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/date_time6_test.dart
rename to tests/corelib_strong/date_time6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/date_time7_test.dart b/tests/corelib_strong/date_time7_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/date_time7_test.dart
rename to tests/corelib_strong/date_time7_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/date_time8_test.dart b/tests/corelib_strong/date_time8_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/date_time8_test.dart
rename to tests/corelib_strong/date_time8_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/date_time9_test.dart b/tests/corelib_strong/date_time9_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/date_time9_test.dart
rename to tests/corelib_strong/date_time9_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/date_time_parse_test.dart b/tests/corelib_strong/date_time_parse_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/date_time_parse_test.dart
rename to tests/corelib_strong/date_time_parse_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/date_time_test.dart b/tests/corelib_strong/date_time_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/date_time_test.dart
rename to tests/corelib_strong/date_time_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_ceil2_test.dart b/tests/corelib_strong/double_ceil2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_ceil2_test.dart
rename to tests/corelib_strong/double_ceil2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_ceil_test.dart b/tests/corelib_strong/double_ceil_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_ceil_test.dart
rename to tests/corelib_strong/double_ceil_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_ceil_to_double_test.dart b/tests/corelib_strong/double_ceil_to_double_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_ceil_to_double_test.dart
rename to tests/corelib_strong/double_ceil_to_double_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_compare_test.dart b/tests/corelib_strong/double_compare_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_compare_test.dart
rename to tests/corelib_strong/double_compare_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_floor2_test.dart b/tests/corelib_strong/double_floor2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_floor2_test.dart
rename to tests/corelib_strong/double_floor2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_floor_test.dart b/tests/corelib_strong/double_floor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_floor_test.dart
rename to tests/corelib_strong/double_floor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_floor_to_double_test.dart b/tests/corelib_strong/double_floor_to_double_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_floor_to_double_test.dart
rename to tests/corelib_strong/double_floor_to_double_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_parse_test.dart b/tests/corelib_strong/double_parse_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_parse_test.dart
rename to tests/corelib_strong/double_parse_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_round2_test.dart b/tests/corelib_strong/double_round2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_round2_test.dart
rename to tests/corelib_strong/double_round2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_round3_test.dart b/tests/corelib_strong/double_round3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_round3_test.dart
rename to tests/corelib_strong/double_round3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_round4_test.dart b/tests/corelib_strong/double_round4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_round4_test.dart
rename to tests/corelib_strong/double_round4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_round_test.dart b/tests/corelib_strong/double_round_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_round_test.dart
rename to tests/corelib_strong/double_round_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_round_to_double2_test.dart b/tests/corelib_strong/double_round_to_double2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_round_to_double2_test.dart
rename to tests/corelib_strong/double_round_to_double2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_round_to_double3_test.dart b/tests/corelib_strong/double_round_to_double3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_round_to_double3_test.dart
rename to tests/corelib_strong/double_round_to_double3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_round_to_double_test.dart b/tests/corelib_strong/double_round_to_double_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_round_to_double_test.dart
rename to tests/corelib_strong/double_round_to_double_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_truncate2_test.dart b/tests/corelib_strong/double_truncate2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_truncate2_test.dart
rename to tests/corelib_strong/double_truncate2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_truncate_test.dart b/tests/corelib_strong/double_truncate_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_truncate_test.dart
rename to tests/corelib_strong/double_truncate_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/double_truncate_to_double_test.dart b/tests/corelib_strong/double_truncate_to_double_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/double_truncate_to_double_test.dart
rename to tests/corelib_strong/double_truncate_to_double_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/duration2_test.dart b/tests/corelib_strong/duration2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/duration2_test.dart
rename to tests/corelib_strong/duration2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/duration_big_num_test.dart b/tests/corelib_strong/duration_big_num_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/duration_big_num_test.dart
rename to tests/corelib_strong/duration_big_num_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/duration_double_multiplication_test.dart b/tests/corelib_strong/duration_double_multiplication_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/duration_double_multiplication_test.dart
rename to tests/corelib_strong/duration_double_multiplication_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/duration_test.dart b/tests/corelib_strong/duration_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/duration_test.dart
rename to tests/corelib_strong/duration_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/error_stack_trace1_test.dart b/tests/corelib_strong/error_stack_trace1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/error_stack_trace1_test.dart
rename to tests/corelib_strong/error_stack_trace1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/error_stack_trace2_test.dart b/tests/corelib_strong/error_stack_trace2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/error_stack_trace2_test.dart
rename to tests/corelib_strong/error_stack_trace2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/error_stack_trace_test.dart b/tests/corelib_strong/error_stack_trace_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/error_stack_trace_test.dart
rename to tests/corelib_strong/error_stack_trace_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/errors_test.dart b/tests/corelib_strong/errors_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/errors_test.dart
rename to tests/corelib_strong/errors_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/exception_implementation_test.dart b/tests/corelib_strong/exception_implementation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/exception_implementation_test.dart
rename to tests/corelib_strong/exception_implementation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/expando_test.dart b/tests/corelib_strong/expando_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/expando_test.dart
rename to tests/corelib_strong/expando_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/expression_test.dart b/tests/corelib_strong/expression_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/expression_test.dart
rename to tests/corelib_strong/expression_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/file_resource_test.dart b/tests/corelib_strong/file_resource_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/file_resource_test.dart
rename to tests/corelib_strong/file_resource_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/for_in_test.dart b/tests/corelib_strong/for_in_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/for_in_test.dart
rename to tests/corelib_strong/for_in_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/format_exception_test.dart b/tests/corelib_strong/format_exception_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/format_exception_test.dart
rename to tests/corelib_strong/format_exception_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/from_environment_const_type_test.dart b/tests/corelib_strong/from_environment_const_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/from_environment_const_type_test.dart
rename to tests/corelib_strong/from_environment_const_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/from_environment_const_type_undefined_test.dart b/tests/corelib_strong/from_environment_const_type_undefined_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/from_environment_const_type_undefined_test.dart
rename to tests/corelib_strong/from_environment_const_type_undefined_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/growable_list_test.dart b/tests/corelib_strong/growable_list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/growable_list_test.dart
rename to tests/corelib_strong/growable_list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/has_next_iterator_test.dart b/tests/corelib_strong/has_next_iterator_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/has_next_iterator_test.dart
rename to tests/corelib_strong/has_next_iterator_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/hash_map2_test.dart b/tests/corelib_strong/hash_map2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/hash_map2_test.dart
rename to tests/corelib_strong/hash_map2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/hash_map_test.dart b/tests/corelib_strong/hash_map_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/hash_map_test.dart
rename to tests/corelib_strong/hash_map_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/hash_set_test.dart b/tests/corelib_strong/hash_set_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/hash_set_test.dart
rename to tests/corelib_strong/hash_set_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/hash_set_type_check_test.dart b/tests/corelib_strong/hash_set_type_check_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/hash_set_type_check_test.dart
rename to tests/corelib_strong/hash_set_type_check_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/hashcode_boxed_test.dart b/tests/corelib_strong/hashcode_boxed_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/hashcode_boxed_test.dart
rename to tests/corelib_strong/hashcode_boxed_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/hashcode_test.dart b/tests/corelib_strong/hashcode_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/hashcode_test.dart
rename to tests/corelib_strong/hashcode_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/hidden_library2_test.dart b/tests/corelib_strong/hidden_library2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/hidden_library2_test.dart
rename to tests/corelib_strong/hidden_library2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/http_resource_test.dart b/tests/corelib_strong/http_resource_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/http_resource_test.dart
rename to tests/corelib_strong/http_resource_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/indexed_list_access_test.dart b/tests/corelib_strong/indexed_list_access_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/indexed_list_access_test.dart
rename to tests/corelib_strong/indexed_list_access_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/int_ceil_test.dart b/tests/corelib_strong/int_ceil_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/int_ceil_test.dart
rename to tests/corelib_strong/int_ceil_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/int_ceil_to_double_test.dart b/tests/corelib_strong/int_ceil_to_double_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/int_ceil_to_double_test.dart
rename to tests/corelib_strong/int_ceil_to_double_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/int_floor_test.dart b/tests/corelib_strong/int_floor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/int_floor_test.dart
rename to tests/corelib_strong/int_floor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/int_floor_to_double_test.dart b/tests/corelib_strong/int_floor_to_double_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/int_floor_to_double_test.dart
rename to tests/corelib_strong/int_floor_to_double_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/int_from_environment2_test.dart b/tests/corelib_strong/int_from_environment2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/int_from_environment2_test.dart
rename to tests/corelib_strong/int_from_environment2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/int_from_environment3_test.dart b/tests/corelib_strong/int_from_environment3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/int_from_environment3_test.dart
rename to tests/corelib_strong/int_from_environment3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/int_from_environment_test.dart b/tests/corelib_strong/int_from_environment_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/int_from_environment_test.dart
rename to tests/corelib_strong/int_from_environment_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/int_modulo_arith_test.dart b/tests/corelib_strong/int_modulo_arith_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/int_modulo_arith_test.dart
rename to tests/corelib_strong/int_modulo_arith_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/int_parse_radix_test.dart b/tests/corelib_strong/int_parse_radix_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/int_parse_radix_test.dart
rename to tests/corelib_strong/int_parse_radix_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/int_round_test.dart b/tests/corelib_strong/int_round_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/int_round_test.dart
rename to tests/corelib_strong/int_round_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/int_round_to_double_test.dart b/tests/corelib_strong/int_round_to_double_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/int_round_to_double_test.dart
rename to tests/corelib_strong/int_round_to_double_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/int_to_int_test.dart b/tests/corelib_strong/int_to_int_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/int_to_int_test.dart
rename to tests/corelib_strong/int_to_int_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/int_truncate_test.dart b/tests/corelib_strong/int_truncate_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/int_truncate_test.dart
rename to tests/corelib_strong/int_truncate_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/int_truncate_to_double_test.dart b/tests/corelib_strong/int_truncate_to_double_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/int_truncate_to_double_test.dart
rename to tests/corelib_strong/int_truncate_to_double_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/integer_to_radix_string_test.dart b/tests/corelib_strong/integer_to_radix_string_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/integer_to_radix_string_test.dart
rename to tests/corelib_strong/integer_to_radix_string_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/integer_to_string_test.dart b/tests/corelib_strong/integer_to_string_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/integer_to_string_test.dart
rename to tests/corelib_strong/integer_to_string_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/is_operator_basic_types_test.dart b/tests/corelib_strong/is_operator_basic_types_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/is_operator_basic_types_test.dart
rename to tests/corelib_strong/is_operator_basic_types_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_contains2_test.dart b/tests/corelib_strong/iterable_contains2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_contains2_test.dart
rename to tests/corelib_strong/iterable_contains2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_contains_test.dart b/tests/corelib_strong/iterable_contains_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_contains_test.dart
rename to tests/corelib_strong/iterable_contains_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_element_at_test.dart b/tests/corelib_strong/iterable_element_at_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_element_at_test.dart
rename to tests/corelib_strong/iterable_element_at_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_empty_test.dart b/tests/corelib_strong/iterable_empty_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_empty_test.dart
rename to tests/corelib_strong/iterable_empty_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_expand_test.dart b/tests/corelib_strong/iterable_expand_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_expand_test.dart
rename to tests/corelib_strong/iterable_expand_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_first_test.dart b/tests/corelib_strong/iterable_first_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_first_test.dart
rename to tests/corelib_strong/iterable_first_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_first_where_test.dart b/tests/corelib_strong/iterable_first_where_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_first_where_test.dart
rename to tests/corelib_strong/iterable_first_where_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_fold_test.dart b/tests/corelib_strong/iterable_fold_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_fold_test.dart
rename to tests/corelib_strong/iterable_fold_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_generate_test.dart b/tests/corelib_strong/iterable_generate_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_generate_test.dart
rename to tests/corelib_strong/iterable_generate_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_join_test.dart b/tests/corelib_strong/iterable_join_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_join_test.dart
rename to tests/corelib_strong/iterable_join_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_last_test.dart b/tests/corelib_strong/iterable_last_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_last_test.dart
rename to tests/corelib_strong/iterable_last_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_last_where_test.dart b/tests/corelib_strong/iterable_last_where_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_last_where_test.dart
rename to tests/corelib_strong/iterable_last_where_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_length_test.dart b/tests/corelib_strong/iterable_length_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_length_test.dart
rename to tests/corelib_strong/iterable_length_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_mapping_test.dart b/tests/corelib_strong/iterable_mapping_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_mapping_test.dart
rename to tests/corelib_strong/iterable_mapping_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_reduce_test.dart b/tests/corelib_strong/iterable_reduce_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_reduce_test.dart
rename to tests/corelib_strong/iterable_reduce_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_return_type_test.dart b/tests/corelib_strong/iterable_return_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_return_type_test.dart
rename to tests/corelib_strong/iterable_return_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_single_test.dart b/tests/corelib_strong/iterable_single_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_single_test.dart
rename to tests/corelib_strong/iterable_single_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_single_where_test.dart b/tests/corelib_strong/iterable_single_where_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_single_where_test.dart
rename to tests/corelib_strong/iterable_single_where_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_skip_test.dart b/tests/corelib_strong/iterable_skip_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_skip_test.dart
rename to tests/corelib_strong/iterable_skip_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_skip_while_test.dart b/tests/corelib_strong/iterable_skip_while_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_skip_while_test.dart
rename to tests/corelib_strong/iterable_skip_while_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_take_test.dart b/tests/corelib_strong/iterable_take_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_take_test.dart
rename to tests/corelib_strong/iterable_take_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_take_while_test.dart b/tests/corelib_strong/iterable_take_while_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_take_while_test.dart
rename to tests/corelib_strong/iterable_take_while_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_test.dart b/tests/corelib_strong/iterable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_test.dart
rename to tests/corelib_strong/iterable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_to_list_test.dart b/tests/corelib_strong/iterable_to_list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_to_list_test.dart
rename to tests/corelib_strong/iterable_to_list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_to_set_test.dart b/tests/corelib_strong/iterable_to_set_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_to_set_test.dart
rename to tests/corelib_strong/iterable_to_set_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/iterable_tostring_test.dart b/tests/corelib_strong/iterable_tostring_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/iterable_tostring_test.dart
rename to tests/corelib_strong/iterable_tostring_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/json_map_test.dart b/tests/corelib_strong/json_map_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/json_map_test.dart
rename to tests/corelib_strong/json_map_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/linked_hash_map_from_iterable_test.dart b/tests/corelib_strong/linked_hash_map_from_iterable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/linked_hash_map_from_iterable_test.dart
rename to tests/corelib_strong/linked_hash_map_from_iterable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/linked_hash_map_from_iterables_test.dart b/tests/corelib_strong/linked_hash_map_from_iterables_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/linked_hash_map_from_iterables_test.dart
rename to tests/corelib_strong/linked_hash_map_from_iterables_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/linked_hash_map_test.dart b/tests/corelib_strong/linked_hash_map_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/linked_hash_map_test.dart
rename to tests/corelib_strong/linked_hash_map_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_as_map_test.dart b/tests/corelib_strong/list_as_map_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_as_map_test.dart
rename to tests/corelib_strong/list_as_map_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_contains_argument_order_test.dart b/tests/corelib_strong/list_contains_argument_order_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_contains_argument_order_test.dart
rename to tests/corelib_strong/list_contains_argument_order_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_fill_range_test.dart b/tests/corelib_strong/list_fill_range_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_fill_range_test.dart
rename to tests/corelib_strong/list_fill_range_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_filled_type_argument_test.dart b/tests/corelib_strong/list_filled_type_argument_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_filled_type_argument_test.dart
rename to tests/corelib_strong/list_filled_type_argument_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_first_test.dart b/tests/corelib_strong/list_first_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_first_test.dart
rename to tests/corelib_strong/list_first_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_fixed_test.dart b/tests/corelib_strong/list_fixed_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_fixed_test.dart
rename to tests/corelib_strong/list_fixed_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_for_each_test.dart b/tests/corelib_strong/list_for_each_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_for_each_test.dart
rename to tests/corelib_strong/list_for_each_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_get_range_test.dart b/tests/corelib_strong/list_get_range_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_get_range_test.dart
rename to tests/corelib_strong/list_get_range_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_growable_test.dart b/tests/corelib_strong/list_growable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_growable_test.dart
rename to tests/corelib_strong/list_growable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_index_of2_test.dart b/tests/corelib_strong/list_index_of2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_index_of2_test.dart
rename to tests/corelib_strong/list_index_of2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_index_of_test.dart b/tests/corelib_strong/list_index_of_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_index_of_test.dart
rename to tests/corelib_strong/list_index_of_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_insert_all_test.dart b/tests/corelib_strong/list_insert_all_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_insert_all_test.dart
rename to tests/corelib_strong/list_insert_all_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_insert_test.dart b/tests/corelib_strong/list_insert_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_insert_test.dart
rename to tests/corelib_strong/list_insert_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_iterators_test.dart b/tests/corelib_strong/list_iterators_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_iterators_test.dart
rename to tests/corelib_strong/list_iterators_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_last_test.dart b/tests/corelib_strong/list_last_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_last_test.dart
rename to tests/corelib_strong/list_last_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_literal_is_growable_test.dart b/tests/corelib_strong/list_literal_is_growable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_literal_is_growable_test.dart
rename to tests/corelib_strong/list_literal_is_growable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_literal_test.dart b/tests/corelib_strong/list_literal_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_literal_test.dart
rename to tests/corelib_strong/list_literal_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_map_test.dart b/tests/corelib_strong/list_map_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_map_test.dart
rename to tests/corelib_strong/list_map_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_remove_range_test.dart b/tests/corelib_strong/list_remove_range_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_remove_range_test.dart
rename to tests/corelib_strong/list_remove_range_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_removeat_test.dart b/tests/corelib_strong/list_removeat_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_removeat_test.dart
rename to tests/corelib_strong/list_removeat_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_replace_range_test.dart b/tests/corelib_strong/list_replace_range_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_replace_range_test.dart
rename to tests/corelib_strong/list_replace_range_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_reversed_test.dart b/tests/corelib_strong/list_reversed_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_reversed_test.dart
rename to tests/corelib_strong/list_reversed_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_set_all_test.dart b/tests/corelib_strong/list_set_all_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_set_all_test.dart
rename to tests/corelib_strong/list_set_all_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_set_range_test.dart b/tests/corelib_strong/list_set_range_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_set_range_test.dart
rename to tests/corelib_strong/list_set_range_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_sort_test.dart b/tests/corelib_strong/list_sort_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_sort_test.dart
rename to tests/corelib_strong/list_sort_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_sublist_test.dart b/tests/corelib_strong/list_sublist_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_sublist_test.dart
rename to tests/corelib_strong/list_sublist_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_test.dart b/tests/corelib_strong/list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_test.dart
rename to tests/corelib_strong/list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_to_string2_test.dart b/tests/corelib_strong/list_to_string2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_to_string2_test.dart
rename to tests/corelib_strong/list_to_string2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_to_string_test.dart b/tests/corelib_strong/list_to_string_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_to_string_test.dart
rename to tests/corelib_strong/list_to_string_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/list_unmodifiable_test.dart b/tests/corelib_strong/list_unmodifiable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/list_unmodifiable_test.dart
rename to tests/corelib_strong/list_unmodifiable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/main_test.dart b/tests/corelib_strong/main_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/main_test.dart
rename to tests/corelib_strong/main_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/map_contains_key_test.dart b/tests/corelib_strong/map_contains_key_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/map_contains_key_test.dart
rename to tests/corelib_strong/map_contains_key_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/map_contains_value_test.dart b/tests/corelib_strong/map_contains_value_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/map_contains_value_test.dart
rename to tests/corelib_strong/map_contains_value_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/map_from_iterable_test.dart b/tests/corelib_strong/map_from_iterable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/map_from_iterable_test.dart
rename to tests/corelib_strong/map_from_iterable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/map_from_iterables_test.dart b/tests/corelib_strong/map_from_iterables_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/map_from_iterables_test.dart
rename to tests/corelib_strong/map_from_iterables_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/map_from_test.dart b/tests/corelib_strong/map_from_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/map_from_test.dart
rename to tests/corelib_strong/map_from_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/map_index_test.dart b/tests/corelib_strong/map_index_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/map_index_test.dart
rename to tests/corelib_strong/map_index_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/map_keys2_test.dart b/tests/corelib_strong/map_keys2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/map_keys2_test.dart
rename to tests/corelib_strong/map_keys2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/map_keys_test.dart b/tests/corelib_strong/map_keys_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/map_keys_test.dart
rename to tests/corelib_strong/map_keys_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/map_remove_test.dart b/tests/corelib_strong/map_remove_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/map_remove_test.dart
rename to tests/corelib_strong/map_remove_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/map_test.dart b/tests/corelib_strong/map_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/map_test.dart
rename to tests/corelib_strong/map_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/map_to_string_test.dart b/tests/corelib_strong/map_to_string_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/map_to_string_test.dart
rename to tests/corelib_strong/map_to_string_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/map_values2_test.dart b/tests/corelib_strong/map_values2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/map_values2_test.dart
rename to tests/corelib_strong/map_values2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/map_values3_test.dart b/tests/corelib_strong/map_values3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/map_values3_test.dart
rename to tests/corelib_strong/map_values3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/map_values4_test.dart b/tests/corelib_strong/map_values4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/map_values4_test.dart
rename to tests/corelib_strong/map_values4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/map_values_test.dart b/tests/corelib_strong/map_values_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/map_values_test.dart
rename to tests/corelib_strong/map_values_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/maps_test.dart b/tests/corelib_strong/maps_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/maps_test.dart
rename to tests/corelib_strong/maps_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/nan_infinity_test.dart b/tests/corelib_strong/nan_infinity_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/nan_infinity_test.dart
rename to tests/corelib_strong/nan_infinity_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/null_nosuchmethod_test.dart b/tests/corelib_strong/null_nosuchmethod_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/null_nosuchmethod_test.dart
rename to tests/corelib_strong/null_nosuchmethod_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/null_test.dart b/tests/corelib_strong/null_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/null_test.dart
rename to tests/corelib_strong/null_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/num_clamp_test.dart b/tests/corelib_strong/num_clamp_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/num_clamp_test.dart
rename to tests/corelib_strong/num_clamp_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/num_parse_test.dart b/tests/corelib_strong/num_parse_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/num_parse_test.dart
rename to tests/corelib_strong/num_parse_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/num_sign_test.dart b/tests/corelib_strong/num_sign_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/num_sign_test.dart
rename to tests/corelib_strong/num_sign_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/package_resource_test.dart b/tests/corelib_strong/package_resource_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/package_resource_test.dart
rename to tests/corelib_strong/package_resource_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/print_test.dart b/tests/corelib_strong/print_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/print_test.dart
rename to tests/corelib_strong/print_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/queue_first_test.dart b/tests/corelib_strong/queue_first_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/queue_first_test.dart
rename to tests/corelib_strong/queue_first_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/queue_iterator_test.dart b/tests/corelib_strong/queue_iterator_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/queue_iterator_test.dart
rename to tests/corelib_strong/queue_iterator_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/queue_last_test.dart b/tests/corelib_strong/queue_last_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/queue_last_test.dart
rename to tests/corelib_strong/queue_last_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/queue_single_test.dart b/tests/corelib_strong/queue_single_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/queue_single_test.dart
rename to tests/corelib_strong/queue_single_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/queue_test.dart b/tests/corelib_strong/queue_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/queue_test.dart
rename to tests/corelib_strong/queue_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/range_error_test.dart b/tests/corelib_strong/range_error_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/range_error_test.dart
rename to tests/corelib_strong/range_error_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/reg_exp1_test.dart b/tests/corelib_strong/reg_exp1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/reg_exp1_test.dart
rename to tests/corelib_strong/reg_exp1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/reg_exp4_test.dart b/tests/corelib_strong/reg_exp4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/reg_exp4_test.dart
rename to tests/corelib_strong/reg_exp4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/reg_exp5_test.dart b/tests/corelib_strong/reg_exp5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/reg_exp5_test.dart
rename to tests/corelib_strong/reg_exp5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/reg_exp_all_matches_test.dart b/tests/corelib_strong/reg_exp_all_matches_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/reg_exp_all_matches_test.dart
rename to tests/corelib_strong/reg_exp_all_matches_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/reg_exp_first_match_test.dart b/tests/corelib_strong/reg_exp_first_match_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/reg_exp_first_match_test.dart
rename to tests/corelib_strong/reg_exp_first_match_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/reg_exp_group_test.dart b/tests/corelib_strong/reg_exp_group_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/reg_exp_group_test.dart
rename to tests/corelib_strong/reg_exp_group_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/reg_exp_groups_test.dart b/tests/corelib_strong/reg_exp_groups_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/reg_exp_groups_test.dart
rename to tests/corelib_strong/reg_exp_groups_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/reg_exp_has_match_test.dart b/tests/corelib_strong/reg_exp_has_match_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/reg_exp_has_match_test.dart
rename to tests/corelib_strong/reg_exp_has_match_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/reg_exp_pattern_test.dart b/tests/corelib_strong/reg_exp_pattern_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/reg_exp_pattern_test.dart
rename to tests/corelib_strong/reg_exp_pattern_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/reg_exp_start_end_test.dart b/tests/corelib_strong/reg_exp_start_end_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/reg_exp_start_end_test.dart
rename to tests/corelib_strong/reg_exp_start_end_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/reg_exp_string_match_test.dart b/tests/corelib_strong/reg_exp_string_match_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/reg_exp_string_match_test.dart
rename to tests/corelib_strong/reg_exp_string_match_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/UC16_test.dart b/tests/corelib_strong/regexp/UC16_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/UC16_test.dart
rename to tests/corelib_strong/regexp/UC16_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/alternative-length-miscalculation_test.dart b/tests/corelib_strong/regexp/alternative-length-miscalculation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/alternative-length-miscalculation_test.dart
rename to tests/corelib_strong/regexp/alternative-length-miscalculation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/alternatives_test.dart b/tests/corelib_strong/regexp/alternatives_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/alternatives_test.dart
rename to tests/corelib_strong/regexp/alternatives_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/ascii-regexp-subject_test.dart b/tests/corelib_strong/regexp/ascii-regexp-subject_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/ascii-regexp-subject_test.dart
rename to tests/corelib_strong/regexp/ascii-regexp-subject_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/assertion_test.dart b/tests/corelib_strong/regexp/assertion_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/assertion_test.dart
rename to tests/corelib_strong/regexp/assertion_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/backreferences_test.dart b/tests/corelib_strong/regexp/backreferences_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/backreferences_test.dart
rename to tests/corelib_strong/regexp/backreferences_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/bol-with-multiline_test.dart b/tests/corelib_strong/regexp/bol-with-multiline_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/bol-with-multiline_test.dart
rename to tests/corelib_strong/regexp/bol-with-multiline_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/bol_test.dart b/tests/corelib_strong/regexp/bol_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/bol_test.dart
rename to tests/corelib_strong/regexp/bol_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/capture-3_test.dart b/tests/corelib_strong/regexp/capture-3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/capture-3_test.dart
rename to tests/corelib_strong/regexp/capture-3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/capture_test.dart b/tests/corelib_strong/regexp/capture_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/capture_test.dart
rename to tests/corelib_strong/regexp/capture_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/captures_test.dart b/tests/corelib_strong/regexp/captures_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/captures_test.dart
rename to tests/corelib_strong/regexp/captures_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/char-insensitive_test.dart b/tests/corelib_strong/regexp/char-insensitive_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/char-insensitive_test.dart
rename to tests/corelib_strong/regexp/char-insensitive_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/character-match-out-of-order_test.dart b/tests/corelib_strong/regexp/character-match-out-of-order_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/character-match-out-of-order_test.dart
rename to tests/corelib_strong/regexp/character-match-out-of-order_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/compile-crash_test.dart b/tests/corelib_strong/regexp/compile-crash_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/compile-crash_test.dart
rename to tests/corelib_strong/regexp/compile-crash_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/compile_test.dart b/tests/corelib_strong/regexp/compile_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/compile_test.dart
rename to tests/corelib_strong/regexp/compile_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/constructor_test.dart b/tests/corelib_strong/regexp/constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/constructor_test.dart
rename to tests/corelib_strong/regexp/constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/default_arguments_test.dart b/tests/corelib_strong/regexp/default_arguments_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/default_arguments_test.dart
rename to tests/corelib_strong/regexp/default_arguments_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/dotstar_test.dart b/tests/corelib_strong/regexp/dotstar_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/dotstar_test.dart
rename to tests/corelib_strong/regexp/dotstar_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/early-acid3-86_test.dart b/tests/corelib_strong/regexp/early-acid3-86_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/early-acid3-86_test.dart
rename to tests/corelib_strong/regexp/early-acid3-86_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/ecma-regex-examples_test.dart b/tests/corelib_strong/regexp/ecma-regex-examples_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/ecma-regex-examples_test.dart
rename to tests/corelib_strong/regexp/ecma-regex-examples_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/extended-characters-match_test.dart b/tests/corelib_strong/regexp/extended-characters-match_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/extended-characters-match_test.dart
rename to tests/corelib_strong/regexp/extended-characters-match_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/extended-characters-more_test.dart b/tests/corelib_strong/regexp/extended-characters-more_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/extended-characters-more_test.dart
rename to tests/corelib_strong/regexp/extended-characters-more_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/find-first-asserted_test.dart b/tests/corelib_strong/regexp/find-first-asserted_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/find-first-asserted_test.dart
rename to tests/corelib_strong/regexp/find-first-asserted_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/global_test.dart b/tests/corelib_strong/regexp/global_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/global_test.dart
rename to tests/corelib_strong/regexp/global_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/indexof_test.dart b/tests/corelib_strong/regexp/indexof_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/indexof_test.dart
rename to tests/corelib_strong/regexp/indexof_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/invalid-range-in-class_test.dart b/tests/corelib_strong/regexp/invalid-range-in-class_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/invalid-range-in-class_test.dart
rename to tests/corelib_strong/regexp/invalid-range-in-class_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/issue_19193_test.dart b/tests/corelib_strong/regexp/issue_19193_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/issue_19193_test.dart
rename to tests/corelib_strong/regexp/issue_19193_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/lastindex_test.dart b/tests/corelib_strong/regexp/lastindex_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/lastindex_test.dart
rename to tests/corelib_strong/regexp/lastindex_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/look-ahead_test.dart b/tests/corelib_strong/regexp/look-ahead_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/look-ahead_test.dart
rename to tests/corelib_strong/regexp/look-ahead_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/lookahead_test.dart b/tests/corelib_strong/regexp/lookahead_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/lookahead_test.dart
rename to tests/corelib_strong/regexp/lookahead_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/loop-capture_test.dart b/tests/corelib_strong/regexp/loop-capture_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/loop-capture_test.dart
rename to tests/corelib_strong/regexp/loop-capture_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/malformed-escapes_test.dart b/tests/corelib_strong/regexp/malformed-escapes_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/malformed-escapes_test.dart
rename to tests/corelib_strong/regexp/malformed-escapes_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/many-brackets_test.dart b/tests/corelib_strong/regexp/many-brackets_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/many-brackets_test.dart
rename to tests/corelib_strong/regexp/many-brackets_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/multiline_test.dart b/tests/corelib_strong/regexp/multiline_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/multiline_test.dart
rename to tests/corelib_strong/regexp/multiline_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/negative-special-characters_test.dart b/tests/corelib_strong/regexp/negative-special-characters_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/negative-special-characters_test.dart
rename to tests/corelib_strong/regexp/negative-special-characters_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/no-extensions_test.dart b/tests/corelib_strong/regexp/no-extensions_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/no-extensions_test.dart
rename to tests/corelib_strong/regexp/no-extensions_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/non-bmp_test.dart b/tests/corelib_strong/regexp/non-bmp_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/non-bmp_test.dart
rename to tests/corelib_strong/regexp/non-bmp_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/non-capturing-backtracking_test.dart b/tests/corelib_strong/regexp/non-capturing-backtracking_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/non-capturing-backtracking_test.dart
rename to tests/corelib_strong/regexp/non-capturing-backtracking_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/non-capturing-groups_test.dart b/tests/corelib_strong/regexp/non-capturing-groups_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/non-capturing-groups_test.dart
rename to tests/corelib_strong/regexp/non-capturing-groups_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/non-character_test.dart b/tests/corelib_strong/regexp/non-character_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/non-character_test.dart
rename to tests/corelib_strong/regexp/non-character_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/non-greedy-parentheses_test.dart b/tests/corelib_strong/regexp/non-greedy-parentheses_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/non-greedy-parentheses_test.dart
rename to tests/corelib_strong/regexp/non-greedy-parentheses_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/norepeat_test.dart b/tests/corelib_strong/regexp/norepeat_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/norepeat_test.dart
rename to tests/corelib_strong/regexp/norepeat_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/overflow_test.dart b/tests/corelib_strong/regexp/overflow_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/overflow_test.dart
rename to tests/corelib_strong/regexp/overflow_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/parentheses_test.dart b/tests/corelib_strong/regexp/parentheses_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/parentheses_test.dart
rename to tests/corelib_strong/regexp/parentheses_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/pcre-test-4_test.dart b/tests/corelib_strong/regexp/pcre-test-4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/pcre-test-4_test.dart
rename to tests/corelib_strong/regexp/pcre-test-4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/pcre_test.dart b/tests/corelib_strong/regexp/pcre_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/pcre_test.dart
rename to tests/corelib_strong/regexp/pcre_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/quantified-assertions_test.dart b/tests/corelib_strong/regexp/quantified-assertions_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/quantified-assertions_test.dart
rename to tests/corelib_strong/regexp/quantified-assertions_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/range-bound-ffff_test.dart b/tests/corelib_strong/regexp/range-bound-ffff_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/range-bound-ffff_test.dart
rename to tests/corelib_strong/regexp/range-bound-ffff_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/range-out-of-order_test.dart b/tests/corelib_strong/regexp/range-out-of-order_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/range-out-of-order_test.dart
rename to tests/corelib_strong/regexp/range-out-of-order_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/ranges-and-escaped-hyphens_test.dart b/tests/corelib_strong/regexp/ranges-and-escaped-hyphens_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/ranges-and-escaped-hyphens_test.dart
rename to tests/corelib_strong/regexp/ranges-and-escaped-hyphens_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/regexp_kde_test.dart b/tests/corelib_strong/regexp/regexp_kde_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/regexp_kde_test.dart
rename to tests/corelib_strong/regexp/regexp_kde_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/regexp_test.dart b/tests/corelib_strong/regexp/regexp_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/regexp_test.dart
rename to tests/corelib_strong/regexp/regexp_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/regress-6-9-regexp_test.dart b/tests/corelib_strong/regexp/regress-6-9-regexp_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/regress-6-9-regexp_test.dart
rename to tests/corelib_strong/regexp/regress-6-9-regexp_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/regress-regexp-codeflush_test.dart b/tests/corelib_strong/regexp/regress-regexp-codeflush_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/regress-regexp-codeflush_test.dart
rename to tests/corelib_strong/regexp/regress-regexp-codeflush_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/regress-regexp-construct-result_test.dart b/tests/corelib_strong/regexp/regress-regexp-construct-result_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/regress-regexp-construct-result_test.dart
rename to tests/corelib_strong/regexp/regress-regexp-construct-result_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/repeat-match-waldemar_test.dart b/tests/corelib_strong/regexp/repeat-match-waldemar_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/repeat-match-waldemar_test.dart
rename to tests/corelib_strong/regexp/repeat-match-waldemar_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/results-cache_test.dart b/tests/corelib_strong/regexp/results-cache_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/results-cache_test.dart
rename to tests/corelib_strong/regexp/results-cache_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/stack-overflow2_test.dart b/tests/corelib_strong/regexp/stack-overflow2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/stack-overflow2_test.dart
rename to tests/corelib_strong/regexp/stack-overflow2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/stack-overflow_test.dart b/tests/corelib_strong/regexp/stack-overflow_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/stack-overflow_test.dart
rename to tests/corelib_strong/regexp/stack-overflow_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/standalones_test.dart b/tests/corelib_strong/regexp/standalones_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/standalones_test.dart
rename to tests/corelib_strong/regexp/standalones_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/toString_test.dart b/tests/corelib_strong/regexp/toString_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/toString_test.dart
rename to tests/corelib_strong/regexp/toString_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/unicode-handling_test.dart b/tests/corelib_strong/regexp/unicode-handling_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/unicode-handling_test.dart
rename to tests/corelib_strong/regexp/unicode-handling_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/unicodeCaseInsensitive_test.dart b/tests/corelib_strong/regexp/unicodeCaseInsensitive_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/unicodeCaseInsensitive_test.dart
rename to tests/corelib_strong/regexp/unicodeCaseInsensitive_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/v8_regexp_utils.dart b/tests/corelib_strong/regexp/v8_regexp_utils.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/v8_regexp_utils.dart
rename to tests/corelib_strong/regexp/v8_regexp_utils.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regexp/zero-length-alternatives_test.dart b/tests/corelib_strong/regexp/zero-length-alternatives_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regexp/zero-length-alternatives_test.dart
rename to tests/corelib_strong/regexp/zero-length-alternatives_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regress_11099_test.dart b/tests/corelib_strong/regress_11099_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regress_11099_test.dart
rename to tests/corelib_strong/regress_11099_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/regress_r21715_test.dart b/tests/corelib_strong/regress_r21715_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/regress_r21715_test.dart
rename to tests/corelib_strong/regress_r21715_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/safe_to_string_test.dart b/tests/corelib_strong/safe_to_string_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/safe_to_string_test.dart
rename to tests/corelib_strong/safe_to_string_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/set_containsAll_test.dart b/tests/corelib_strong/set_containsAll_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/set_containsAll_test.dart
rename to tests/corelib_strong/set_containsAll_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/set_contains_test.dart b/tests/corelib_strong/set_contains_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/set_contains_test.dart
rename to tests/corelib_strong/set_contains_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/set_intersection_test.dart b/tests/corelib_strong/set_intersection_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/set_intersection_test.dart
rename to tests/corelib_strong/set_intersection_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/set_iterator_test.dart b/tests/corelib_strong/set_iterator_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/set_iterator_test.dart
rename to tests/corelib_strong/set_iterator_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/set_removeAll_test.dart b/tests/corelib_strong/set_removeAll_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/set_removeAll_test.dart
rename to tests/corelib_strong/set_removeAll_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/set_remove_test.dart b/tests/corelib_strong/set_remove_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/set_remove_test.dart
rename to tests/corelib_strong/set_remove_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/set_retainAll_test.dart b/tests/corelib_strong/set_retainAll_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/set_retainAll_test.dart
rename to tests/corelib_strong/set_retainAll_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/set_test.dart b/tests/corelib_strong/set_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/set_test.dart
rename to tests/corelib_strong/set_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/set_to_string_test.dart b/tests/corelib_strong/set_to_string_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/set_to_string_test.dart
rename to tests/corelib_strong/set_to_string_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/shuffle_test.dart b/tests/corelib_strong/shuffle_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/shuffle_test.dart
rename to tests/corelib_strong/shuffle_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/sort_helper.dart b/tests/corelib_strong/sort_helper.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/sort_helper.dart
rename to tests/corelib_strong/sort_helper.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/sort_test.dart b/tests/corelib_strong/sort_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/sort_test.dart
rename to tests/corelib_strong/sort_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/splay_tree_from_iterable_test.dart b/tests/corelib_strong/splay_tree_from_iterable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/splay_tree_from_iterable_test.dart
rename to tests/corelib_strong/splay_tree_from_iterable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/splay_tree_from_iterables_test.dart b/tests/corelib_strong/splay_tree_from_iterables_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/splay_tree_from_iterables_test.dart
rename to tests/corelib_strong/splay_tree_from_iterables_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/splay_tree_test.dart b/tests/corelib_strong/splay_tree_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/splay_tree_test.dart
rename to tests/corelib_strong/splay_tree_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/stacktrace_current_test.dart b/tests/corelib_strong/stacktrace_current_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/stacktrace_current_test.dart
rename to tests/corelib_strong/stacktrace_current_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/stacktrace_fromstring_test.dart b/tests/corelib_strong/stacktrace_fromstring_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/stacktrace_fromstring_test.dart
rename to tests/corelib_strong/stacktrace_fromstring_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/stopwatch2_test.dart b/tests/corelib_strong/stopwatch2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/stopwatch2_test.dart
rename to tests/corelib_strong/stopwatch2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/stopwatch_test.dart b/tests/corelib_strong/stopwatch_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/stopwatch_test.dart
rename to tests/corelib_strong/stopwatch_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_base_vm_test.dart b/tests/corelib_strong/string_base_vm_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_base_vm_test.dart
rename to tests/corelib_strong/string_base_vm_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_buffer_test.dart b/tests/corelib_strong/string_buffer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_buffer_test.dart
rename to tests/corelib_strong/string_buffer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_case_test.dart b/tests/corelib_strong/string_case_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_case_test.dart
rename to tests/corelib_strong/string_case_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_codeunits_test.dart b/tests/corelib_strong/string_codeunits_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_codeunits_test.dart
rename to tests/corelib_strong/string_codeunits_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_from_environment2_test.dart b/tests/corelib_strong/string_from_environment2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_from_environment2_test.dart
rename to tests/corelib_strong/string_from_environment2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_from_environment3_test.dart b/tests/corelib_strong/string_from_environment3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_from_environment3_test.dart
rename to tests/corelib_strong/string_from_environment3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_from_environment_test.dart b/tests/corelib_strong/string_from_environment_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_from_environment_test.dart
rename to tests/corelib_strong/string_from_environment_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_from_list_test.dart b/tests/corelib_strong/string_from_list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_from_list_test.dart
rename to tests/corelib_strong/string_from_list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_fromcharcode_test.dart b/tests/corelib_strong/string_fromcharcode_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_fromcharcode_test.dart
rename to tests/corelib_strong/string_fromcharcode_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_fromcharcodes_test.dart b/tests/corelib_strong/string_fromcharcodes_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_fromcharcodes_test.dart
rename to tests/corelib_strong/string_fromcharcodes_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_operations_with_null_test.dart b/tests/corelib_strong/string_operations_with_null_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_operations_with_null_test.dart
rename to tests/corelib_strong/string_operations_with_null_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_pattern_test.dart b/tests/corelib_strong/string_pattern_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_pattern_test.dart
rename to tests/corelib_strong/string_pattern_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_replace_all_test.dart b/tests/corelib_strong/string_replace_all_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_replace_all_test.dart
rename to tests/corelib_strong/string_replace_all_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_replace_dollar_test.dart b/tests/corelib_strong/string_replace_dollar_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_replace_dollar_test.dart
rename to tests/corelib_strong/string_replace_dollar_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_replace_test.dart b/tests/corelib_strong/string_replace_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_replace_test.dart
rename to tests/corelib_strong/string_replace_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_runes_test.dart b/tests/corelib_strong/string_runes_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_runes_test.dart
rename to tests/corelib_strong/string_runes_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_source_test.dart b/tests/corelib_strong/string_source_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_source_test.dart
rename to tests/corelib_strong/string_source_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_split_test.dart b/tests/corelib_strong/string_split_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_split_test.dart
rename to tests/corelib_strong/string_split_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_substring_test.dart b/tests/corelib_strong/string_substring_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_substring_test.dart
rename to tests/corelib_strong/string_substring_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_test.dart b/tests/corelib_strong/string_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_test.dart
rename to tests/corelib_strong/string_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_to_lower_case_test.dart b/tests/corelib_strong/string_to_lower_case_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_to_lower_case_test.dart
rename to tests/corelib_strong/string_to_lower_case_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_trim2_test.dart b/tests/corelib_strong/string_trim2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_trim2_test.dart
rename to tests/corelib_strong/string_trim2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_trim_test.dart b/tests/corelib_strong/string_trim_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_trim_test.dart
rename to tests/corelib_strong/string_trim_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/string_trimlr_test.dart b/tests/corelib_strong/string_trimlr_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/string_trimlr_test.dart
rename to tests/corelib_strong/string_trimlr_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/strings_test.dart b/tests/corelib_strong/strings_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/strings_test.dart
rename to tests/corelib_strong/strings_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/symbol_map_helper.dart b/tests/corelib_strong/symbol_map_helper.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/symbol_map_helper.dart
rename to tests/corelib_strong/symbol_map_helper.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/symbol_operator_test.dart b/tests/corelib_strong/symbol_operator_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/symbol_operator_test.dart
rename to tests/corelib_strong/symbol_operator_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/symbol_reserved_word_test.dart b/tests/corelib_strong/symbol_reserved_word_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/symbol_reserved_word_test.dart
rename to tests/corelib_strong/symbol_reserved_word_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/symbol_test.dart b/tests/corelib_strong/symbol_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/symbol_test.dart
rename to tests/corelib_strong/symbol_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/throw_half_surrogate_pair_test.dart b/tests/corelib_strong/throw_half_surrogate_pair_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/throw_half_surrogate_pair_test.dart
rename to tests/corelib_strong/throw_half_surrogate_pair_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/toInt_test.dart b/tests/corelib_strong/toInt_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/toInt_test.dart
rename to tests/corelib_strong/toInt_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/type_hashcode_test.dart b/tests/corelib_strong/type_hashcode_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/type_hashcode_test.dart
rename to tests/corelib_strong/type_hashcode_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/unicode2_test.dart b/tests/corelib_strong/unicode2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/unicode2_test.dart
rename to tests/corelib_strong/unicode2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/unicode_test.dart b/tests/corelib_strong/unicode_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/unicode_test.dart
rename to tests/corelib_strong/unicode_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/uri_base_test.dart b/tests/corelib_strong/uri_base_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/uri_base_test.dart
rename to tests/corelib_strong/uri_base_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/uri_file_test.dart b/tests/corelib_strong/uri_file_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/uri_file_test.dart
rename to tests/corelib_strong/uri_file_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/uri_http_test.dart b/tests/corelib_strong/uri_http_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/uri_http_test.dart
rename to tests/corelib_strong/uri_http_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/uri_ipv4_test.dart b/tests/corelib_strong/uri_ipv4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/uri_ipv4_test.dart
rename to tests/corelib_strong/uri_ipv4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/uri_ipv6_test.dart b/tests/corelib_strong/uri_ipv6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/uri_ipv6_test.dart
rename to tests/corelib_strong/uri_ipv6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/uri_normalize_path_test.dart b/tests/corelib_strong/uri_normalize_path_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/uri_normalize_path_test.dart
rename to tests/corelib_strong/uri_normalize_path_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/uri_normalize_test.dart b/tests/corelib_strong/uri_normalize_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/uri_normalize_test.dart
rename to tests/corelib_strong/uri_normalize_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/uri_parameters_all_test.dart b/tests/corelib_strong/uri_parameters_all_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/uri_parameters_all_test.dart
rename to tests/corelib_strong/uri_parameters_all_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/uri_parse_test.dart b/tests/corelib_strong/uri_parse_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/uri_parse_test.dart
rename to tests/corelib_strong/uri_parse_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/uri_path_test.dart b/tests/corelib_strong/uri_path_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/uri_path_test.dart
rename to tests/corelib_strong/uri_path_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/uri_query_test.dart b/tests/corelib_strong/uri_query_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/uri_query_test.dart
rename to tests/corelib_strong/uri_query_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/uri_scheme_test.dart b/tests/corelib_strong/uri_scheme_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/uri_scheme_test.dart
rename to tests/corelib_strong/uri_scheme_test.dart
diff --git a/pkg/dev_compiler/test/codegen/corelib/uri_test.dart b/tests/corelib_strong/uri_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/corelib/uri_test.dart
rename to tests/corelib_strong/uri_test.dart
diff --git a/tests/language/language_kernel.status b/tests/language/language_kernel.status
index f2569e9..793c381 100644
--- a/tests/language/language_kernel.status
+++ b/tests/language/language_kernel.status
@@ -17,95 +17,14 @@
 conditional_import_string_test: DartkCompileTimeError
 conditional_import_test: DartkCompileTimeError
 conflicting_type_variable_and_setter_test: DartkCompileTimeError
-const_for_in_variable_test/01: DartkMissingCompileTimeError
-constructor_duplicate_final_test/03: DartkMissingCompileTimeError
+const_for_in_variable_test/01: MissingCompileTimeError
+constructor_duplicate_final_test/03: MissingCompileTimeError
 deep_nesting1_negative_test: DartkCrash
 deep_nesting2_negative_test: DartkCrash
 deferred_closurize_load_library_test: DartkCrash
-enum_syntax_test/06: DartkMissingCompileTimeError
+enum_syntax_test/06: MissingCompileTimeError
 export_double_same_main_test: DartkCrash
 export_main_test: DartkCrash
-external_test/21: DartkMissingCompileTimeError
-external_test/24: DartkMissingCompileTimeError
-external_test/25: DartkMissingCompileTimeError
-final_syntax_test/01: DartkMissingCompileTimeError
-final_syntax_test/02: DartkMissingCompileTimeError
-final_syntax_test/03: DartkMissingCompileTimeError
-final_syntax_test/04: DartkMissingCompileTimeError
-main_not_a_function_test/01: DartkCrash
-metadata_test: DartkCompileTimeError
-mixin_illegal_super_use_test/01: DartkMissingCompileTimeError
-mixin_illegal_super_use_test/02: DartkMissingCompileTimeError
-mixin_illegal_super_use_test/03: DartkMissingCompileTimeError
-mixin_illegal_super_use_test/04: DartkMissingCompileTimeError
-mixin_illegal_super_use_test/05: DartkMissingCompileTimeError
-mixin_illegal_super_use_test/06: DartkMissingCompileTimeError
-mixin_illegal_super_use_test/07: DartkMissingCompileTimeError
-mixin_illegal_super_use_test/08: DartkMissingCompileTimeError
-mixin_illegal_super_use_test/09: DartkMissingCompileTimeError
-mixin_illegal_super_use_test/10: DartkMissingCompileTimeError
-mixin_illegal_super_use_test/11: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/01: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/02: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/03: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/04: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/05: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/06: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/07: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/08: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/09: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/10: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/11: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/12: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/13: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/14: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/15: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/16: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/17: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/18: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/19: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/20: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/21: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/22: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/23: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/24: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/25: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/26: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/27: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/28: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/29: DartkMissingCompileTimeError
-mixin_illegal_superclass_test/30: DartkMissingCompileTimeError
-multiline_newline_test/01: DartkCompileTimeError
-multiline_newline_test/02: DartkCompileTimeError
-multiline_newline_test/03: DartkCompileTimeError
-multiline_newline_test/04: DartkMissingCompileTimeError
-multiline_newline_test/05: DartkMissingCompileTimeError
-multiline_newline_test/06: DartkMissingCompileTimeError
-no_main_test/01: DartkCrash
-not_enough_positional_arguments_test/01: DartkCompileTimeError
-regress_27617_test/1: DartkMissingCompileTimeError
-super_call3_test/01: DartkCrash
-tearoff_basic_test: DartkCompileTimeError
-tearoff_constructor_basic_test: DartkCompileTimeError
-type_variable_conflict2_test/02: DartkMissingCompileTimeError
-vm/debug_break_enabled_vm_test/01: DartkCompileTimeError
-vm/debug_break_enabled_vm_test/none: DartkCompileTimeError
-vm/reflect_core_vm_test: DartkCompileTimeError
-vm/regress_27201_test: DartkCompileTimeError
-
-# dartk: JIT failures
-[ $compiler == dartk && $runtime == vm ]
-enum_syntax_test/05: DartkMissingCompileTimeError
-reify_typevar_static_test/00: DartkMissingCompileTimeError
-type_variable_conflict2_test/06: DartkMissingCompileTimeError
-type_variable_conflict2_test/08: DartkMissingCompileTimeError
-type_variable_conflict2_test/10: DartkMissingCompileTimeError
-
-# dartk: precompilation failures
-[ $compiler == dartkp && $runtime == dart_precompiled ]
-const_for_in_variable_test/01: MissingCompileTimeError
-constructor_duplicate_final_test/03: MissingCompileTimeError
-enum_syntax_test/06: MissingCompileTimeError
 external_test/21: MissingCompileTimeError
 external_test/24: MissingCompileTimeError
 external_test/25: MissingCompileTimeError
@@ -113,6 +32,19 @@
 final_syntax_test/02: MissingCompileTimeError
 final_syntax_test/03: MissingCompileTimeError
 final_syntax_test/04: MissingCompileTimeError
+main_not_a_function_test/01: DartkCrash
+metadata_test: DartkCompileTimeError
+mixin_illegal_super_use_test/01: MissingCompileTimeError
+mixin_illegal_super_use_test/02: MissingCompileTimeError
+mixin_illegal_super_use_test/03: MissingCompileTimeError
+mixin_illegal_super_use_test/04: MissingCompileTimeError
+mixin_illegal_super_use_test/05: MissingCompileTimeError
+mixin_illegal_super_use_test/06: MissingCompileTimeError
+mixin_illegal_super_use_test/07: MissingCompileTimeError
+mixin_illegal_super_use_test/08: MissingCompileTimeError
+mixin_illegal_super_use_test/09: MissingCompileTimeError
+mixin_illegal_super_use_test/10: MissingCompileTimeError
+mixin_illegal_super_use_test/11: MissingCompileTimeError
 mixin_illegal_superclass_test/01: MissingCompileTimeError
 mixin_illegal_superclass_test/02: MissingCompileTimeError
 mixin_illegal_superclass_test/03: MissingCompileTimeError
@@ -143,22 +75,34 @@
 mixin_illegal_superclass_test/28: MissingCompileTimeError
 mixin_illegal_superclass_test/29: MissingCompileTimeError
 mixin_illegal_superclass_test/30: MissingCompileTimeError
-mixin_illegal_super_use_test/01: MissingCompileTimeError
-mixin_illegal_super_use_test/02: MissingCompileTimeError
-mixin_illegal_super_use_test/03: MissingCompileTimeError
-mixin_illegal_super_use_test/04: MissingCompileTimeError
-mixin_illegal_super_use_test/05: MissingCompileTimeError
-mixin_illegal_super_use_test/06: MissingCompileTimeError
-mixin_illegal_super_use_test/07: MissingCompileTimeError
-mixin_illegal_super_use_test/08: MissingCompileTimeError
-mixin_illegal_super_use_test/09: MissingCompileTimeError
-mixin_illegal_super_use_test/10: MissingCompileTimeError
-mixin_illegal_super_use_test/11: MissingCompileTimeError
+multiline_newline_test/01: DartkCompileTimeError
+multiline_newline_test/02: DartkCompileTimeError
+multiline_newline_test/03: DartkCompileTimeError
 multiline_newline_test/04: MissingCompileTimeError
 multiline_newline_test/05: MissingCompileTimeError
 multiline_newline_test/06: MissingCompileTimeError
+no_main_test/01: DartkCrash
+not_enough_positional_arguments_test/01: DartkCompileTimeError
 regress_27617_test/1: MissingCompileTimeError
+super_call3_test/01: DartkCrash
+tearoff_basic_test: DartkCompileTimeError
+tearoff_constructor_basic_test: DartkCompileTimeError
 type_variable_conflict2_test/02: MissingCompileTimeError
+vm/debug_break_enabled_vm_test/01: DartkCompileTimeError
+vm/debug_break_enabled_vm_test/none: DartkCompileTimeError
+vm/reflect_core_vm_test: DartkCompileTimeError
+vm/regress_27201_test: DartkCompileTimeError
+
+# dartk: JIT failures
+[ $compiler == dartk && $runtime == vm ]
+enum_syntax_test/05: MissingCompileTimeError
+reify_typevar_static_test/00: MissingCompileTimeError
+type_variable_conflict2_test/06: MissingCompileTimeError
+type_variable_conflict2_test/08: MissingCompileTimeError
+type_variable_conflict2_test/10: MissingCompileTimeError
+
+# dartk: precompilation failures
+[ $compiler == dartkp && $runtime == dart_precompiled ]
 
 
 ###############################################################################
diff --git a/pkg/dev_compiler/test/codegen/language/aborting_switch_case_test.dart b/tests/language_strong/aborting_switch_case_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/aborting_switch_case_test.dart
rename to tests/language_strong/aborting_switch_case_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/abstract_exact_selector_test.dart b/tests/language_strong/abstract_exact_selector_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/abstract_exact_selector_test.dart
rename to tests/language_strong/abstract_exact_selector_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/abstract_factory_constructor_test.dart b/tests/language_strong/abstract_factory_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/abstract_factory_constructor_test.dart
rename to tests/language_strong/abstract_factory_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/abstract_getter_test.dart b/tests/language_strong/abstract_getter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/abstract_getter_test.dart
rename to tests/language_strong/abstract_getter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/abstract_method_test.dart b/tests/language_strong/abstract_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/abstract_method_test.dart
rename to tests/language_strong/abstract_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/abstract_object_method_test.dart b/tests/language_strong/abstract_object_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/abstract_object_method_test.dart
rename to tests/language_strong/abstract_object_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/abstract_runtime_error_test.dart b/tests/language_strong/abstract_runtime_error_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/abstract_runtime_error_test.dart
rename to tests/language_strong/abstract_runtime_error_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/abstract_syntax_test.dart b/tests/language_strong/abstract_syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/abstract_syntax_test.dart
rename to tests/language_strong/abstract_syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/ackermann_test.dart b/tests/language_strong/ackermann_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/ackermann_test.dart
rename to tests/language_strong/ackermann_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/adjacent_const_string_literals_test.dart b/tests/language_strong/adjacent_const_string_literals_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/adjacent_const_string_literals_test.dart
rename to tests/language_strong/adjacent_const_string_literals_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/adjacent_string_literals_test.dart b/tests/language_strong/adjacent_string_literals_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/adjacent_string_literals_test.dart
rename to tests/language_strong/adjacent_string_literals_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/allocate_large_object_test.dart b/tests/language_strong/allocate_large_object_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/allocate_large_object_test.dart
rename to tests/language_strong/allocate_large_object_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/allocate_test.dart b/tests/language_strong/allocate_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/allocate_test.dart
rename to tests/language_strong/allocate_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/allocation_sinking_inlining_test.dart b/tests/language_strong/allocation_sinking_inlining_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/allocation_sinking_inlining_test.dart
rename to tests/language_strong/allocation_sinking_inlining_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/and_operation_on_non_integer_operand_test.dart b/tests/language_strong/and_operation_on_non_integer_operand_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/and_operation_on_non_integer_operand_test.dart
rename to tests/language_strong/and_operation_on_non_integer_operand_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/application_negative_test.dart b/tests/language_strong/application_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/application_negative_test.dart
rename to tests/language_strong/application_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/application_test.dart b/tests/language_strong/application_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/application_test.dart
rename to tests/language_strong/application_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/argument_definition_test.dart b/tests/language_strong/argument_definition_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/argument_definition_test.dart
rename to tests/language_strong/argument_definition_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/arithmetic2_test.dart b/tests/language_strong/arithmetic2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/arithmetic2_test.dart
rename to tests/language_strong/arithmetic2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/arithmetic_canonicalization_test.dart b/tests/language_strong/arithmetic_canonicalization_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/arithmetic_canonicalization_test.dart
rename to tests/language_strong/arithmetic_canonicalization_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/arithmetic_smi_overflow_test.dart b/tests/language_strong/arithmetic_smi_overflow_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/arithmetic_smi_overflow_test.dart
rename to tests/language_strong/arithmetic_smi_overflow_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/arithmetic_test.dart b/tests/language_strong/arithmetic_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/arithmetic_test.dart
rename to tests/language_strong/arithmetic_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/assert_assignable_type_test.dart b/tests/language_strong/assert_assignable_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/assert_assignable_type_test.dart
rename to tests/language_strong/assert_assignable_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/assert_with_type_test_or_cast_test.dart b/tests/language_strong/assert_with_type_test_or_cast_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/assert_with_type_test_or_cast_test.dart
rename to tests/language_strong/assert_with_type_test_or_cast_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/assertion_test.dart b/tests/language_strong/assertion_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/assertion_test.dart
rename to tests/language_strong/assertion_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/assign_instance_method_negative_test.dart b/tests/language_strong/assign_instance_method_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/assign_instance_method_negative_test.dart
rename to tests/language_strong/assign_instance_method_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/assign_op_test.dart b/tests/language_strong/assign_op_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/assign_op_test.dart
rename to tests/language_strong/assign_op_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/assign_static_type_test.dart b/tests/language_strong/assign_static_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/assign_static_type_test.dart
rename to tests/language_strong/assign_static_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/assign_to_type_test.dart b/tests/language_strong/assign_to_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/assign_to_type_test.dart
rename to tests/language_strong/assign_to_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/assign_top_method_test.dart b/tests/language_strong/assign_top_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/assign_top_method_test.dart
rename to tests/language_strong/assign_top_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/assignable_expression_test.dart b/tests/language_strong/assignable_expression_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/assignable_expression_test.dart
rename to tests/language_strong/assignable_expression_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_and_or_test.dart b/tests/language_strong/async_and_or_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_and_or_test.dart
rename to tests/language_strong/async_and_or_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_await_catch_regression_test.dart b/tests/language_strong/async_await_catch_regression_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_await_catch_regression_test.dart
rename to tests/language_strong/async_await_catch_regression_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_await_syntax_test.dart b/tests/language_strong/async_await_syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_await_syntax_test.dart
rename to tests/language_strong/async_await_syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_await_test.dart b/tests/language_strong/async_await_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_await_test.dart
rename to tests/language_strong/async_await_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_backwards_compatibility_1_test.dart b/tests/language_strong/async_backwards_compatibility_1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_backwards_compatibility_1_test.dart
rename to tests/language_strong/async_backwards_compatibility_1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_backwards_compatibility_2_test.dart b/tests/language_strong/async_backwards_compatibility_2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_backwards_compatibility_2_test.dart
rename to tests/language_strong/async_backwards_compatibility_2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_break_in_finally_test.dart b/tests/language_strong/async_break_in_finally_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_break_in_finally_test.dart
rename to tests/language_strong/async_break_in_finally_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_continue_label_test.dart b/tests/language_strong/async_continue_label_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_continue_label_test.dart
rename to tests/language_strong/async_continue_label_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_control_structures_test.dart b/tests/language_strong/async_control_structures_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_control_structures_test.dart
rename to tests/language_strong/async_control_structures_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_finally_rethrow_test.dart b/tests/language_strong/async_finally_rethrow_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_finally_rethrow_test.dart
rename to tests/language_strong/async_finally_rethrow_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_helper_lib.dart b/tests/language_strong/async_helper_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_helper_lib.dart
rename to tests/language_strong/async_helper_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_or_generator_return_type_stacktrace_test.dart b/tests/language_strong/async_or_generator_return_type_stacktrace_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_or_generator_return_type_stacktrace_test.dart
rename to tests/language_strong/async_or_generator_return_type_stacktrace_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_regression_23058_test.dart b/tests/language_strong/async_regression_23058_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_regression_23058_test.dart
rename to tests/language_strong/async_regression_23058_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_rethrow_test.dart b/tests/language_strong/async_rethrow_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_rethrow_test.dart
rename to tests/language_strong/async_rethrow_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_return_types_test.dart b/tests/language_strong/async_return_types_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_return_types_test.dart
rename to tests/language_strong/async_return_types_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_star_await_pauses_test.dart b/tests/language_strong/async_star_await_pauses_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_star_await_pauses_test.dart
rename to tests/language_strong/async_star_await_pauses_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_star_cancel_and_throw_in_finally_test.dart b/tests/language_strong/async_star_cancel_and_throw_in_finally_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_star_cancel_and_throw_in_finally_test.dart
rename to tests/language_strong/async_star_cancel_and_throw_in_finally_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_star_cancel_while_paused_test.dart b/tests/language_strong/async_star_cancel_while_paused_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_star_cancel_while_paused_test.dart
rename to tests/language_strong/async_star_cancel_while_paused_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_star_regression_2238_test.dart b/tests/language_strong/async_star_regression_2238_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_star_regression_2238_test.dart
rename to tests/language_strong/async_star_regression_2238_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_star_regression_23116_test.dart b/tests/language_strong/async_star_regression_23116_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_star_regression_23116_test.dart
rename to tests/language_strong/async_star_regression_23116_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_star_regression_fisk_test.dart b/tests/language_strong/async_star_regression_fisk_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_star_regression_fisk_test.dart
rename to tests/language_strong/async_star_regression_fisk_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_star_stream_take_test.dart b/tests/language_strong/async_star_stream_take_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_star_stream_take_test.dart
rename to tests/language_strong/async_star_stream_take_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_star_take_reyield_test.dart b/tests/language_strong/async_star_take_reyield_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_star_take_reyield_test.dart
rename to tests/language_strong/async_star_take_reyield_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_star_test.dart b/tests/language_strong/async_star_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_star_test.dart
rename to tests/language_strong/async_star_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_switch_test.dart b/tests/language_strong/async_switch_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_switch_test.dart
rename to tests/language_strong/async_switch_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_test.dart b/tests/language_strong/async_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_test.dart
rename to tests/language_strong/async_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_this_bound_test.dart b/tests/language_strong/async_this_bound_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_this_bound_test.dart
rename to tests/language_strong/async_this_bound_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/async_throw_in_catch_test.dart b/tests/language_strong/async_throw_in_catch_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/async_throw_in_catch_test.dart
rename to tests/language_strong/async_throw_in_catch_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/asyncstar_concat_test.dart b/tests/language_strong/asyncstar_concat_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/asyncstar_concat_test.dart
rename to tests/language_strong/asyncstar_concat_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/asyncstar_throw_in_catch_test.dart b/tests/language_strong/asyncstar_throw_in_catch_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/asyncstar_throw_in_catch_test.dart
rename to tests/language_strong/asyncstar_throw_in_catch_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/asyncstar_yield_test.dart b/tests/language_strong/asyncstar_yield_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/asyncstar_yield_test.dart
rename to tests/language_strong/asyncstar_yield_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/asyncstar_yieldstar_test.dart b/tests/language_strong/asyncstar_yieldstar_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/asyncstar_yieldstar_test.dart
rename to tests/language_strong/asyncstar_yieldstar_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/await_backwards_compatibility_test.dart b/tests/language_strong/await_backwards_compatibility_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/await_backwards_compatibility_test.dart
rename to tests/language_strong/await_backwards_compatibility_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/await_exceptions_test.dart b/tests/language_strong/await_exceptions_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/await_exceptions_test.dart
rename to tests/language_strong/await_exceptions_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/await_for_cancel_test.dart b/tests/language_strong/await_for_cancel_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/await_for_cancel_test.dart
rename to tests/language_strong/await_for_cancel_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/await_for_test.dart b/tests/language_strong/await_for_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/await_for_test.dart
rename to tests/language_strong/await_for_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/await_for_use_local_test.dart b/tests/language_strong/await_for_use_local_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/await_for_use_local_test.dart
rename to tests/language_strong/await_for_use_local_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/await_future_test.dart b/tests/language_strong/await_future_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/await_future_test.dart
rename to tests/language_strong/await_future_test.dart
diff --git a/tests/language_strong/await_in_cascade_test.dart b/tests/language_strong/await_in_cascade_test.dart
new file mode 100644
index 0000000..e9fbcf9
--- /dev/null
+++ b/tests/language_strong/await_in_cascade_test.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'package:expect/expect.dart';
+
+class C {
+  Future<List<int>> m() async => []..add(await _m());
+  Future<int> _m() async => 42;
+}
+
+main() async {
+  Expect.equals(await new C().m(), 42);
+}
diff --git a/pkg/dev_compiler/test/codegen/language/await_nonfuture_test.dart b/tests/language_strong/await_nonfuture_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/await_nonfuture_test.dart
rename to tests/language_strong/await_nonfuture_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/await_not_started_immediately_test.dart b/tests/language_strong/await_not_started_immediately_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/await_not_started_immediately_test.dart
rename to tests/language_strong/await_not_started_immediately_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/await_postfix_expr_test.dart b/tests/language_strong/await_postfix_expr_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/await_postfix_expr_test.dart
rename to tests/language_strong/await_postfix_expr_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/await_regression_test.dart b/tests/language_strong/await_regression_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/await_regression_test.dart
rename to tests/language_strong/await_regression_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/await_test.dart b/tests/language_strong/await_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/await_test.dart
rename to tests/language_strong/await_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bad_constructor_test.dart b/tests/language_strong/bad_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bad_constructor_test.dart
rename to tests/language_strong/bad_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bad_initializer1_negative_test.dart b/tests/language_strong/bad_initializer1_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bad_initializer1_negative_test.dart
rename to tests/language_strong/bad_initializer1_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bad_initializer2_negative_test.dart b/tests/language_strong/bad_initializer2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bad_initializer2_negative_test.dart
rename to tests/language_strong/bad_initializer2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bad_named_constructor_negative_test.dart b/tests/language_strong/bad_named_constructor_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bad_named_constructor_negative_test.dart
rename to tests/language_strong/bad_named_constructor_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bad_named_parameters2_test.dart b/tests/language_strong/bad_named_parameters2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bad_named_parameters2_test.dart
rename to tests/language_strong/bad_named_parameters2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bad_named_parameters_test.dart b/tests/language_strong/bad_named_parameters_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bad_named_parameters_test.dart
rename to tests/language_strong/bad_named_parameters_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bad_override_test.dart b/tests/language_strong/bad_override_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bad_override_test.dart
rename to tests/language_strong/bad_override_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bad_raw_string_negative_test.dart b/tests/language_strong/bad_raw_string_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bad_raw_string_negative_test.dart
rename to tests/language_strong/bad_raw_string_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bailout2_test.dart b/tests/language_strong/bailout2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bailout2_test.dart
rename to tests/language_strong/bailout2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bailout3_test.dart b/tests/language_strong/bailout3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bailout3_test.dart
rename to tests/language_strong/bailout3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bailout4_test.dart b/tests/language_strong/bailout4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bailout4_test.dart
rename to tests/language_strong/bailout4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bailout5_test.dart b/tests/language_strong/bailout5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bailout5_test.dart
rename to tests/language_strong/bailout5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bailout6_test.dart b/tests/language_strong/bailout6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bailout6_test.dart
rename to tests/language_strong/bailout6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bailout7_test.dart b/tests/language_strong/bailout7_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bailout7_test.dart
rename to tests/language_strong/bailout7_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bailout_container_type_test.dart b/tests/language_strong/bailout_container_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bailout_container_type_test.dart
rename to tests/language_strong/bailout_container_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bailout_test.dart b/tests/language_strong/bailout_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bailout_test.dart
rename to tests/language_strong/bailout_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bind_test.dart b/tests/language_strong/bind_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bind_test.dart
rename to tests/language_strong/bind_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bit_operations_test.dart b/tests/language_strong/bit_operations_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bit_operations_test.dart
rename to tests/language_strong/bit_operations_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bit_shift_test.dart b/tests/language_strong/bit_shift_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bit_shift_test.dart
rename to tests/language_strong/bit_shift_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/black_listed_test.dart b/tests/language_strong/black_listed_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/black_listed_test.dart
rename to tests/language_strong/black_listed_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/body_less_constructor_wrong_arg_negative_test.dart b/tests/language_strong/body_less_constructor_wrong_arg_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/body_less_constructor_wrong_arg_negative_test.dart
rename to tests/language_strong/body_less_constructor_wrong_arg_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bool_check_test.dart b/tests/language_strong/bool_check_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bool_check_test.dart
rename to tests/language_strong/bool_check_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bool_condition_check_test.dart b/tests/language_strong/bool_condition_check_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bool_condition_check_test.dart
rename to tests/language_strong/bool_condition_check_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bool_test.dart b/tests/language_strong/bool_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bool_test.dart
rename to tests/language_strong/bool_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bootstrap_test.dart b/tests/language_strong/bootstrap_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bootstrap_test.dart
rename to tests/language_strong/bootstrap_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bound_closure_equality_test.dart b/tests/language_strong/bound_closure_equality_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bound_closure_equality_test.dart
rename to tests/language_strong/bound_closure_equality_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/bound_closure_primitives_test.dart b/tests/language_strong/bound_closure_primitives_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/bound_closure_primitives_test.dart
rename to tests/language_strong/bound_closure_primitives_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/branch_canonicalization_test.dart b/tests/language_strong/branch_canonicalization_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/branch_canonicalization_test.dart
rename to tests/language_strong/branch_canonicalization_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/branches_test.dart b/tests/language_strong/branches_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/branches_test.dart
rename to tests/language_strong/branches_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/break_test.dart b/tests/language_strong/break_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/break_test.dart
rename to tests/language_strong/break_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_illegal_test.dart b/tests/language_strong/built_in_identifier_illegal_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_illegal_test.dart
rename to tests/language_strong/built_in_identifier_illegal_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_abstract.dart b/tests/language_strong/built_in_identifier_prefix_library_abstract.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_abstract.dart
rename to tests/language_strong/built_in_identifier_prefix_library_abstract.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_as.dart b/tests/language_strong/built_in_identifier_prefix_library_as.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_as.dart
rename to tests/language_strong/built_in_identifier_prefix_library_as.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_dynamic.dart b/tests/language_strong/built_in_identifier_prefix_library_dynamic.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_dynamic.dart
rename to tests/language_strong/built_in_identifier_prefix_library_dynamic.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_export.dart b/tests/language_strong/built_in_identifier_prefix_library_export.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_export.dart
rename to tests/language_strong/built_in_identifier_prefix_library_export.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_external.dart b/tests/language_strong/built_in_identifier_prefix_library_external.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_external.dart
rename to tests/language_strong/built_in_identifier_prefix_library_external.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_factory.dart b/tests/language_strong/built_in_identifier_prefix_library_factory.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_factory.dart
rename to tests/language_strong/built_in_identifier_prefix_library_factory.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_get.dart b/tests/language_strong/built_in_identifier_prefix_library_get.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_get.dart
rename to tests/language_strong/built_in_identifier_prefix_library_get.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_implements.dart b/tests/language_strong/built_in_identifier_prefix_library_implements.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_implements.dart
rename to tests/language_strong/built_in_identifier_prefix_library_implements.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_import.dart b/tests/language_strong/built_in_identifier_prefix_library_import.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_import.dart
rename to tests/language_strong/built_in_identifier_prefix_library_import.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_library.dart b/tests/language_strong/built_in_identifier_prefix_library_library.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_library.dart
rename to tests/language_strong/built_in_identifier_prefix_library_library.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_operator.dart b/tests/language_strong/built_in_identifier_prefix_library_operator.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_operator.dart
rename to tests/language_strong/built_in_identifier_prefix_library_operator.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_part.dart b/tests/language_strong/built_in_identifier_prefix_library_part.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_part.dart
rename to tests/language_strong/built_in_identifier_prefix_library_part.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_set.dart b/tests/language_strong/built_in_identifier_prefix_library_set.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_set.dart
rename to tests/language_strong/built_in_identifier_prefix_library_set.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_static.dart b/tests/language_strong/built_in_identifier_prefix_library_static.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_static.dart
rename to tests/language_strong/built_in_identifier_prefix_library_static.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_typedef.dart b/tests/language_strong/built_in_identifier_prefix_library_typedef.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_library_typedef.dart
rename to tests/language_strong/built_in_identifier_prefix_library_typedef.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_test.dart b/tests/language_strong/built_in_identifier_prefix_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_test.dart
rename to tests/language_strong/built_in_identifier_prefix_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/built_in_identifier_test.dart b/tests/language_strong/built_in_identifier_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/built_in_identifier_test.dart
rename to tests/language_strong/built_in_identifier_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/call_argument_inference_test.dart b/tests/language_strong/call_argument_inference_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/call_argument_inference_test.dart
rename to tests/language_strong/call_argument_inference_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/call_closurization_test.dart b/tests/language_strong/call_closurization_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/call_closurization_test.dart
rename to tests/language_strong/call_closurization_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/call_constructor_on_unresolvable_class_test.dart b/tests/language_strong/call_constructor_on_unresolvable_class_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/call_constructor_on_unresolvable_class_test.dart
rename to tests/language_strong/call_constructor_on_unresolvable_class_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/call_function2_test.dart b/tests/language_strong/call_function2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/call_function2_test.dart
rename to tests/language_strong/call_function2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/call_function_apply_test.dart b/tests/language_strong/call_function_apply_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/call_function_apply_test.dart
rename to tests/language_strong/call_function_apply_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/call_function_test.dart b/tests/language_strong/call_function_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/call_function_test.dart
rename to tests/language_strong/call_function_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/call_non_method_field_test.dart b/tests/language_strong/call_non_method_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/call_non_method_field_test.dart
rename to tests/language_strong/call_non_method_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/call_nonexistent_constructor_test.dart b/tests/language_strong/call_nonexistent_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/call_nonexistent_constructor_test.dart
rename to tests/language_strong/call_nonexistent_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/call_nonexistent_static_test.dart b/tests/language_strong/call_nonexistent_static_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/call_nonexistent_static_test.dart
rename to tests/language_strong/call_nonexistent_static_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/call_operator_test.dart b/tests/language_strong/call_operator_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/call_operator_test.dart
rename to tests/language_strong/call_operator_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/call_property_test.dart b/tests/language_strong/call_property_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/call_property_test.dart
rename to tests/language_strong/call_property_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/call_test.dart b/tests/language_strong/call_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/call_test.dart
rename to tests/language_strong/call_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/call_this_test.dart b/tests/language_strong/call_this_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/call_this_test.dart
rename to tests/language_strong/call_this_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/call_through_getter_test.dart b/tests/language_strong/call_through_getter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/call_through_getter_test.dart
rename to tests/language_strong/call_through_getter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/call_through_null_getter_test.dart b/tests/language_strong/call_through_null_getter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/call_through_null_getter_test.dart
rename to tests/language_strong/call_through_null_getter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/call_type_literal_test.dart b/tests/language_strong/call_type_literal_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/call_type_literal_test.dart
rename to tests/language_strong/call_type_literal_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/call_with_no_such_method_test.dart b/tests/language_strong/call_with_no_such_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/call_with_no_such_method_test.dart
rename to tests/language_strong/call_with_no_such_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/callable_test.dart b/tests/language_strong/callable_test.dart
similarity index 87%
rename from pkg/dev_compiler/test/codegen/language/callable_test.dart
rename to tests/language_strong/callable_test.dart
index 57e7ffb..7865d20 100644
--- a/pkg/dev_compiler/test/codegen/language/callable_test.dart
+++ b/tests/language_strong/callable_test.dart
@@ -8,6 +8,10 @@
   call() => 42;
 }
 
+class XX extends X {
+  XX.named();
+}
+
 class Y {
   call(int x) => 87 + x;
 
@@ -24,6 +28,7 @@
 
 typedef F(int x);
 typedef G(String y);
+typedef H();
 
 main() {
   X x = new X();
@@ -44,4 +49,10 @@
 
   Expect.equals(Y.staticMethod(6), 7);
   Expect.equals(Z.staticMethod(6), 7);
+
+  var xx = new XX.named();
+  Expect.equals(xx(), 42);
+
+  H xx2 = new XX.named();
+  Expect.equals(xx2(), 42);
 }
diff --git a/pkg/dev_compiler/test/codegen/language/canonical_const2_test.dart b/tests/language_strong/canonical_const2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/canonical_const2_test.dart
rename to tests/language_strong/canonical_const2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/canonical_const3_test.dart b/tests/language_strong/canonical_const3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/canonical_const3_test.dart
rename to tests/language_strong/canonical_const3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/canonical_const_test.dart b/tests/language_strong/canonical_const_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/canonical_const_test.dart
rename to tests/language_strong/canonical_const_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cascade2_test.dart b/tests/language_strong/cascade2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cascade2_test.dart
rename to tests/language_strong/cascade2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cascade_2_test.dart b/tests/language_strong/cascade_2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cascade_2_test.dart
rename to tests/language_strong/cascade_2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cascade_in_expression_function_test.dart b/tests/language_strong/cascade_in_expression_function_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cascade_in_expression_function_test.dart
rename to tests/language_strong/cascade_in_expression_function_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cascade_in_initializer_list_test.dart b/tests/language_strong/cascade_in_initializer_list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cascade_in_initializer_list_test.dart
rename to tests/language_strong/cascade_in_initializer_list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cascade_nested_test.dart b/tests/language_strong/cascade_nested_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cascade_nested_test.dart
rename to tests/language_strong/cascade_nested_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cascade_precedence_test.dart b/tests/language_strong/cascade_precedence_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cascade_precedence_test.dart
rename to tests/language_strong/cascade_precedence_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cascade_test.dart b/tests/language_strong/cascade_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cascade_test.dart
rename to tests/language_strong/cascade_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cast2_test.dart b/tests/language_strong/cast2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cast2_test.dart
rename to tests/language_strong/cast2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cast_test.dart b/tests/language_strong/cast_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cast_test.dart
rename to tests/language_strong/cast_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/catch_liveness_test.dart b/tests/language_strong/catch_liveness_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/catch_liveness_test.dart
rename to tests/language_strong/catch_liveness_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cha_deopt1_deferred_lib.dart b/tests/language_strong/cha_deopt1_deferred_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cha_deopt1_deferred_lib.dart
rename to tests/language_strong/cha_deopt1_deferred_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cha_deopt1_lib.dart b/tests/language_strong/cha_deopt1_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cha_deopt1_lib.dart
rename to tests/language_strong/cha_deopt1_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cha_deopt1_test.dart b/tests/language_strong/cha_deopt1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cha_deopt1_test.dart
rename to tests/language_strong/cha_deopt1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cha_deopt2_deferred_lib.dart b/tests/language_strong/cha_deopt2_deferred_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cha_deopt2_deferred_lib.dart
rename to tests/language_strong/cha_deopt2_deferred_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cha_deopt2_lib.dart b/tests/language_strong/cha_deopt2_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cha_deopt2_lib.dart
rename to tests/language_strong/cha_deopt2_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cha_deopt2_test.dart b/tests/language_strong/cha_deopt2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cha_deopt2_test.dart
rename to tests/language_strong/cha_deopt2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cha_deopt3_deferred_lib.dart b/tests/language_strong/cha_deopt3_deferred_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cha_deopt3_deferred_lib.dart
rename to tests/language_strong/cha_deopt3_deferred_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cha_deopt3_lib.dart b/tests/language_strong/cha_deopt3_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cha_deopt3_lib.dart
rename to tests/language_strong/cha_deopt3_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cha_deopt3_test.dart b/tests/language_strong/cha_deopt3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cha_deopt3_test.dart
rename to tests/language_strong/cha_deopt3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/char_escape_test.dart b/tests/language_strong/char_escape_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/char_escape_test.dart
rename to tests/language_strong/char_escape_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/check_member_static_test.dart b/tests/language_strong/check_member_static_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/check_member_static_test.dart
rename to tests/language_strong/check_member_static_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/check_method_override_test.dart b/tests/language_strong/check_method_override_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/check_method_override_test.dart
rename to tests/language_strong/check_method_override_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/checked_covariant_overrides_test.dart b/tests/language_strong/checked_covariant_overrides_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/checked_covariant_overrides_test.dart
rename to tests/language_strong/checked_covariant_overrides_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/checked_mode_helper.dart b/tests/language_strong/checked_mode_helper.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/checked_mode_helper.dart
rename to tests/language_strong/checked_mode_helper.dart
diff --git a/pkg/dev_compiler/test/codegen/language/checked_null_test.dart b/tests/language_strong/checked_null_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/checked_null_test.dart
rename to tests/language_strong/checked_null_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/checked_setter2_test.dart b/tests/language_strong/checked_setter2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/checked_setter2_test.dart
rename to tests/language_strong/checked_setter2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/checked_setter3_test.dart b/tests/language_strong/checked_setter3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/checked_setter3_test.dart
rename to tests/language_strong/checked_setter3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/checked_setter_test.dart b/tests/language_strong/checked_setter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/checked_setter_test.dart
rename to tests/language_strong/checked_setter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/class_codegen_test.dart b/tests/language_strong/class_codegen_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/class_codegen_test.dart
rename to tests/language_strong/class_codegen_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/class_cycle2_test.dart b/tests/language_strong/class_cycle2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/class_cycle2_test.dart
rename to tests/language_strong/class_cycle2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/class_cycle_test.dart b/tests/language_strong/class_cycle_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/class_cycle_test.dart
rename to tests/language_strong/class_cycle_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/class_keyword_test.dart b/tests/language_strong/class_keyword_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/class_keyword_test.dart
rename to tests/language_strong/class_keyword_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/class_literal_test.dart b/tests/language_strong/class_literal_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/class_literal_test.dart
rename to tests/language_strong/class_literal_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/class_override_test.dart b/tests/language_strong/class_override_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/class_override_test.dart
rename to tests/language_strong/class_override_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/class_syntax2_test.dart b/tests/language_strong/class_syntax2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/class_syntax2_test.dart
rename to tests/language_strong/class_syntax2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/class_syntax_test.dart b/tests/language_strong/class_syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/class_syntax_test.dart
rename to tests/language_strong/class_syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/class_test.dart b/tests/language_strong/class_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/class_test.dart
rename to tests/language_strong/class_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/classes_static_method_clash_test.dart b/tests/language_strong/classes_static_method_clash_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/classes_static_method_clash_test.dart
rename to tests/language_strong/classes_static_method_clash_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure2_test.dart b/tests/language_strong/closure2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure2_test.dart
rename to tests/language_strong/closure2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure3_test.dart b/tests/language_strong/closure3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure3_test.dart
rename to tests/language_strong/closure3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure4_test.dart b/tests/language_strong/closure4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure4_test.dart
rename to tests/language_strong/closure4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure5_test.dart b/tests/language_strong/closure5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure5_test.dart
rename to tests/language_strong/closure5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure6_test.dart b/tests/language_strong/closure6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure6_test.dart
rename to tests/language_strong/closure6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure7_test.dart b/tests/language_strong/closure7_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure7_test.dart
rename to tests/language_strong/closure7_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure8_test.dart b/tests/language_strong/closure8_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure8_test.dart
rename to tests/language_strong/closure8_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_break1_test.dart b/tests/language_strong/closure_break1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_break1_test.dart
rename to tests/language_strong/closure_break1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_break2_test.dart b/tests/language_strong/closure_break2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_break2_test.dart
rename to tests/language_strong/closure_break2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_break_test.dart b/tests/language_strong/closure_break_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_break_test.dart
rename to tests/language_strong/closure_break_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_call_wrong_argument_count_negative_test.dart b/tests/language_strong/closure_call_wrong_argument_count_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_call_wrong_argument_count_negative_test.dart
rename to tests/language_strong/closure_call_wrong_argument_count_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_cycles_test.dart b/tests/language_strong/closure_cycles_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_cycles_test.dart
rename to tests/language_strong/closure_cycles_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_in_constructor_test.dart b/tests/language_strong/closure_in_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_in_constructor_test.dart
rename to tests/language_strong/closure_in_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_in_field_initializer_test.dart b/tests/language_strong/closure_in_field_initializer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_in_field_initializer_test.dart
rename to tests/language_strong/closure_in_field_initializer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_in_initializer2_test.dart b/tests/language_strong/closure_in_initializer2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_in_initializer2_test.dart
rename to tests/language_strong/closure_in_initializer2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_in_initializer_test.dart b/tests/language_strong/closure_in_initializer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_in_initializer_test.dart
rename to tests/language_strong/closure_in_initializer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_internals_test.dart b/tests/language_strong/closure_internals_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_internals_test.dart
rename to tests/language_strong/closure_internals_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_parameter_types_test.dart b/tests/language_strong/closure_parameter_types_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_parameter_types_test.dart
rename to tests/language_strong/closure_parameter_types_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_self_reference_test.dart b/tests/language_strong/closure_self_reference_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_self_reference_test.dart
rename to tests/language_strong/closure_self_reference_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_shared_state_test.dart b/tests/language_strong/closure_shared_state_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_shared_state_test.dart
rename to tests/language_strong/closure_shared_state_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_side_effect_test.dart b/tests/language_strong/closure_side_effect_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_side_effect_test.dart
rename to tests/language_strong/closure_side_effect_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_test.dart b/tests/language_strong/closure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_test.dart
rename to tests/language_strong/closure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_type_test.dart b/tests/language_strong/closure_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_type_test.dart
rename to tests/language_strong/closure_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_type_variable_test.dart b/tests/language_strong/closure_type_variable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_type_variable_test.dart
rename to tests/language_strong/closure_type_variable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_type_variables_test.dart b/tests/language_strong/closure_type_variables_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_type_variables_test.dart
rename to tests/language_strong/closure_type_variables_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_variable_shadow_test.dart b/tests/language_strong/closure_variable_shadow_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_variable_shadow_test.dart
rename to tests/language_strong/closure_variable_shadow_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_with_super_field_test.dart b/tests/language_strong/closure_with_super_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_with_super_field_test.dart
rename to tests/language_strong/closure_with_super_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closure_with_super_send_test.dart b/tests/language_strong/closure_with_super_send_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closure_with_super_send_test.dart
rename to tests/language_strong/closure_with_super_send_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closures_initializer2_test.dart b/tests/language_strong/closures_initializer2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closures_initializer2_test.dart
rename to tests/language_strong/closures_initializer2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closures_initializer_test.dart b/tests/language_strong/closures_initializer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closures_initializer_test.dart
rename to tests/language_strong/closures_initializer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/closures_with_complex_params_test.dart b/tests/language_strong/closures_with_complex_params_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/closures_with_complex_params_test.dart
rename to tests/language_strong/closures_with_complex_params_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/code_after_try_is_executed_test.dart b/tests/language_strong/code_after_try_is_executed_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/code_after_try_is_executed_test.dart
rename to tests/language_strong/code_after_try_is_executed_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/code_motion_crash_test.dart b/tests/language_strong/code_motion_crash_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/code_motion_crash_test.dart
rename to tests/language_strong/code_motion_crash_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/comparison_test.dart b/tests/language_strong/comparison_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/comparison_test.dart
rename to tests/language_strong/comparison_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant10_test.dart b/tests/language_strong/compile_time_constant10_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant10_test.dart
rename to tests/language_strong/compile_time_constant10_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant11_test.dart b/tests/language_strong/compile_time_constant11_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant11_test.dart
rename to tests/language_strong/compile_time_constant11_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant12_test.dart b/tests/language_strong/compile_time_constant12_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant12_test.dart
rename to tests/language_strong/compile_time_constant12_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant13_test.dart b/tests/language_strong/compile_time_constant13_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant13_test.dart
rename to tests/language_strong/compile_time_constant13_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant2_test.dart b/tests/language_strong/compile_time_constant2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant2_test.dart
rename to tests/language_strong/compile_time_constant2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant3_test.dart b/tests/language_strong/compile_time_constant3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant3_test.dart
rename to tests/language_strong/compile_time_constant3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant5_test.dart b/tests/language_strong/compile_time_constant5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant5_test.dart
rename to tests/language_strong/compile_time_constant5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant6_test.dart b/tests/language_strong/compile_time_constant6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant6_test.dart
rename to tests/language_strong/compile_time_constant6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant7_test.dart b/tests/language_strong/compile_time_constant7_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant7_test.dart
rename to tests/language_strong/compile_time_constant7_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant8_test.dart b/tests/language_strong/compile_time_constant8_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant8_test.dart
rename to tests/language_strong/compile_time_constant8_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant9_test.dart b/tests/language_strong/compile_time_constant9_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant9_test.dart
rename to tests/language_strong/compile_time_constant9_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_a_test.dart b/tests/language_strong/compile_time_constant_a_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_a_test.dart
rename to tests/language_strong/compile_time_constant_a_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_arguments_test.dart b/tests/language_strong/compile_time_constant_arguments_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_arguments_test.dart
rename to tests/language_strong/compile_time_constant_arguments_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_b_test.dart b/tests/language_strong/compile_time_constant_b_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_b_test.dart
rename to tests/language_strong/compile_time_constant_b_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_c_test.dart b/tests/language_strong/compile_time_constant_c_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_c_test.dart
rename to tests/language_strong/compile_time_constant_c_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_checked2_test.dart b/tests/language_strong/compile_time_constant_checked2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_checked2_test.dart
rename to tests/language_strong/compile_time_constant_checked2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_checked3_test.dart b/tests/language_strong/compile_time_constant_checked3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_checked3_test.dart
rename to tests/language_strong/compile_time_constant_checked3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_checked4_test.dart b/tests/language_strong/compile_time_constant_checked4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_checked4_test.dart
rename to tests/language_strong/compile_time_constant_checked4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_checked5_test.dart b/tests/language_strong/compile_time_constant_checked5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_checked5_test.dart
rename to tests/language_strong/compile_time_constant_checked5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_checked_test.dart b/tests/language_strong/compile_time_constant_checked_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_checked_test.dart
rename to tests/language_strong/compile_time_constant_checked_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_d_test.dart b/tests/language_strong/compile_time_constant_d_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_d_test.dart
rename to tests/language_strong/compile_time_constant_d_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_e_test.dart b/tests/language_strong/compile_time_constant_e_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_e_test.dart
rename to tests/language_strong/compile_time_constant_e_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_f_test.dart b/tests/language_strong/compile_time_constant_f_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_f_test.dart
rename to tests/language_strong/compile_time_constant_f_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_g_test.dart b/tests/language_strong/compile_time_constant_g_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_g_test.dart
rename to tests/language_strong/compile_time_constant_g_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_h_test.dart b/tests/language_strong/compile_time_constant_h_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_h_test.dart
rename to tests/language_strong/compile_time_constant_h_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_i_test.dart b/tests/language_strong/compile_time_constant_i_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_i_test.dart
rename to tests/language_strong/compile_time_constant_i_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_j_test.dart b/tests/language_strong/compile_time_constant_j_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_j_test.dart
rename to tests/language_strong/compile_time_constant_j_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_k_test.dart b/tests/language_strong/compile_time_constant_k_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_k_test.dart
rename to tests/language_strong/compile_time_constant_k_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_l_test.dart b/tests/language_strong/compile_time_constant_l_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_l_test.dart
rename to tests/language_strong/compile_time_constant_l_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_m_test.dart b/tests/language_strong/compile_time_constant_m_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_m_test.dart
rename to tests/language_strong/compile_time_constant_m_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_n_test.dart b/tests/language_strong/compile_time_constant_n_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_n_test.dart
rename to tests/language_strong/compile_time_constant_n_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_o_test.dart b/tests/language_strong/compile_time_constant_o_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_o_test.dart
rename to tests/language_strong/compile_time_constant_o_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_p_test.dart b/tests/language_strong/compile_time_constant_p_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_p_test.dart
rename to tests/language_strong/compile_time_constant_p_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_q_test.dart b/tests/language_strong/compile_time_constant_q_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_q_test.dart
rename to tests/language_strong/compile_time_constant_q_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_r_test.dart b/tests/language_strong/compile_time_constant_r_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_r_test.dart
rename to tests/language_strong/compile_time_constant_r_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compile_time_constant_test.dart b/tests/language_strong/compile_time_constant_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compile_time_constant_test.dart
rename to tests/language_strong/compile_time_constant_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compiler_annotations.dart b/tests/language_strong/compiler_annotations.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compiler_annotations.dart
rename to tests/language_strong/compiler_annotations.dart
diff --git a/pkg/dev_compiler/test/codegen/language/compound_assignment_operator_test.dart b/tests/language_strong/compound_assignment_operator_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/compound_assignment_operator_test.dart
rename to tests/language_strong/compound_assignment_operator_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cond_expr_test.dart b/tests/language_strong/cond_expr_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cond_expr_test.dart
rename to tests/language_strong/cond_expr_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/condition_bailout_test.dart b/tests/language_strong/condition_bailout_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/condition_bailout_test.dart
rename to tests/language_strong/condition_bailout_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/conditional_access_helper.dart b/tests/language_strong/conditional_access_helper.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/conditional_access_helper.dart
rename to tests/language_strong/conditional_access_helper.dart
diff --git a/pkg/dev_compiler/test/codegen/language/conditional_method_invocation_test.dart b/tests/language_strong/conditional_method_invocation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/conditional_method_invocation_test.dart
rename to tests/language_strong/conditional_method_invocation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/conditional_property_access_test.dart b/tests/language_strong/conditional_property_access_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/conditional_property_access_test.dart
rename to tests/language_strong/conditional_property_access_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/conditional_property_assignment_test.dart b/tests/language_strong/conditional_property_assignment_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/conditional_property_assignment_test.dart
rename to tests/language_strong/conditional_property_assignment_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/conditional_property_increment_decrement_test.dart b/tests/language_strong/conditional_property_increment_decrement_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/conditional_property_increment_decrement_test.dart
rename to tests/language_strong/conditional_property_increment_decrement_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/conditional_rewrite_test.dart b/tests/language_strong/conditional_rewrite_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/conditional_rewrite_test.dart
rename to tests/language_strong/conditional_rewrite_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_conditional_test.dart b/tests/language_strong/const_conditional_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_conditional_test.dart
rename to tests/language_strong/const_conditional_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_constructor2_test.dart b/tests/language_strong/const_constructor2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_constructor2_test.dart
rename to tests/language_strong/const_constructor2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_constructor3_test.dart b/tests/language_strong/const_constructor3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_constructor3_test.dart
rename to tests/language_strong/const_constructor3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_constructor_mixin2_test.dart b/tests/language_strong/const_constructor_mixin2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_constructor_mixin2_test.dart
rename to tests/language_strong/const_constructor_mixin2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_constructor_mixin3_test.dart b/tests/language_strong/const_constructor_mixin3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_constructor_mixin3_test.dart
rename to tests/language_strong/const_constructor_mixin3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_constructor_mixin_test.dart b/tests/language_strong/const_constructor_mixin_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_constructor_mixin_test.dart
rename to tests/language_strong/const_constructor_mixin_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_constructor_nonconst_field_test.dart b/tests/language_strong/const_constructor_nonconst_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_constructor_nonconst_field_test.dart
rename to tests/language_strong/const_constructor_nonconst_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_constructor_super_test.dart b/tests/language_strong/const_constructor_super_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_constructor_super_test.dart
rename to tests/language_strong/const_constructor_super_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_constructor_syntax_test.dart b/tests/language_strong/const_constructor_syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_constructor_syntax_test.dart
rename to tests/language_strong/const_constructor_syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_constructor_test.dart b/tests/language_strong/const_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_constructor_test.dart
rename to tests/language_strong/const_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_counter_negative_test.dart b/tests/language_strong/const_counter_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_counter_negative_test.dart
rename to tests/language_strong/const_counter_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_dynamic_type_literal_test.dart b/tests/language_strong/const_dynamic_type_literal_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_dynamic_type_literal_test.dart
rename to tests/language_strong/const_dynamic_type_literal_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_error_multiply_initialized_test.dart b/tests/language_strong/const_error_multiply_initialized_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_error_multiply_initialized_test.dart
rename to tests/language_strong/const_error_multiply_initialized_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_escape_frog_test.dart b/tests/language_strong/const_escape_frog_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_escape_frog_test.dart
rename to tests/language_strong/const_escape_frog_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_evaluation_test.dart b/tests/language_strong/const_evaluation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_evaluation_test.dart
rename to tests/language_strong/const_evaluation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_factory_redirection_test.dart b/tests/language_strong/const_factory_redirection_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_factory_redirection_test.dart
rename to tests/language_strong/const_factory_redirection_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_factory_with_body_test.dart b/tests/language_strong/const_factory_with_body_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_factory_with_body_test.dart
rename to tests/language_strong/const_factory_with_body_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_global_test.dart b/tests/language_strong/const_global_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_global_test.dart
rename to tests/language_strong/const_global_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_init2_test.dart b/tests/language_strong/const_init2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_init2_test.dart
rename to tests/language_strong/const_init2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_init_test.dart b/tests/language_strong/const_init_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_init_test.dart
rename to tests/language_strong/const_init_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_instance_field_test.dart b/tests/language_strong/const_instance_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_instance_field_test.dart
rename to tests/language_strong/const_instance_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_list_test.dart b/tests/language_strong/const_list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_list_test.dart
rename to tests/language_strong/const_list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_local_test.dart b/tests/language_strong/const_local_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_local_test.dart
rename to tests/language_strong/const_local_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_locals_test.dart b/tests/language_strong/const_locals_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_locals_test.dart
rename to tests/language_strong/const_locals_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_map2_test.dart b/tests/language_strong/const_map2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_map2_test.dart
rename to tests/language_strong/const_map2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_map3_test.dart b/tests/language_strong/const_map3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_map3_test.dart
rename to tests/language_strong/const_map3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_map4_test.dart b/tests/language_strong/const_map4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_map4_test.dart
rename to tests/language_strong/const_map4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_map_test.dart b/tests/language_strong/const_map_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_map_test.dart
rename to tests/language_strong/const_map_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_named_test.dart b/tests/language_strong/const_named_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_named_test.dart
rename to tests/language_strong/const_named_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_native_factory_test.dart b/tests/language_strong/const_native_factory_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_native_factory_test.dart
rename to tests/language_strong/const_native_factory_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_nested_test.dart b/tests/language_strong/const_nested_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_nested_test.dart
rename to tests/language_strong/const_nested_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_objects_are_immutable_test.dart b/tests/language_strong/const_objects_are_immutable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_objects_are_immutable_test.dart
rename to tests/language_strong/const_objects_are_immutable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_optional_args_negative_test.dart b/tests/language_strong/const_optional_args_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_optional_args_negative_test.dart
rename to tests/language_strong/const_optional_args_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_redirecting_factory_test.dart b/tests/language_strong/const_redirecting_factory_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_redirecting_factory_test.dart
rename to tests/language_strong/const_redirecting_factory_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_string_test.dart b/tests/language_strong/const_string_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_string_test.dart
rename to tests/language_strong/const_string_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_switch2_test.dart b/tests/language_strong/const_switch2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_switch2_test.dart
rename to tests/language_strong/const_switch2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_switch_test.dart b/tests/language_strong/const_switch_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_switch_test.dart
rename to tests/language_strong/const_switch_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_syntax_test.dart b/tests/language_strong/const_syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_syntax_test.dart
rename to tests/language_strong/const_syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_test.dart b/tests/language_strong/const_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_test.dart
rename to tests/language_strong/const_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_types_test.dart b/tests/language_strong/const_types_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_types_test.dart
rename to tests/language_strong/const_types_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_var_helper.dart b/tests/language_strong/const_var_helper.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_var_helper.dart
rename to tests/language_strong/const_var_helper.dart
diff --git a/pkg/dev_compiler/test/codegen/language/const_var_test.dart b/tests/language_strong/const_var_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/const_var_test.dart
rename to tests/language_strong/const_var_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constant_fold_equals_test.dart b/tests/language_strong/constant_fold_equals_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constant_fold_equals_test.dart
rename to tests/language_strong/constant_fold_equals_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constant_locals_test.dart b/tests/language_strong/constant_locals_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constant_locals_test.dart
rename to tests/language_strong/constant_locals_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constant_propagation_phis_test.dart b/tests/language_strong/constant_propagation_phis_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constant_propagation_phis_test.dart
rename to tests/language_strong/constant_propagation_phis_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constant_string_interpolation_test.dart b/tests/language_strong/constant_string_interpolation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constant_string_interpolation_test.dart
rename to tests/language_strong/constant_string_interpolation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constant_type_literal_test.dart b/tests/language_strong/constant_type_literal_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constant_type_literal_test.dart
rename to tests/language_strong/constant_type_literal_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor10_test.dart b/tests/language_strong/constructor10_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor10_test.dart
rename to tests/language_strong/constructor10_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor11_test.dart b/tests/language_strong/constructor11_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor11_test.dart
rename to tests/language_strong/constructor11_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor12_test.dart b/tests/language_strong/constructor12_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor12_test.dart
rename to tests/language_strong/constructor12_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor2_test.dart b/tests/language_strong/constructor2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor2_test.dart
rename to tests/language_strong/constructor2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor3_negative_test.dart b/tests/language_strong/constructor3_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor3_negative_test.dart
rename to tests/language_strong/constructor3_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor3_test.dart b/tests/language_strong/constructor3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor3_test.dart
rename to tests/language_strong/constructor3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor4_test.dart b/tests/language_strong/constructor4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor4_test.dart
rename to tests/language_strong/constructor4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor5_test.dart b/tests/language_strong/constructor5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor5_test.dart
rename to tests/language_strong/constructor5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor6_test.dart b/tests/language_strong/constructor6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor6_test.dart
rename to tests/language_strong/constructor6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor7_test.dart b/tests/language_strong/constructor7_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor7_test.dart
rename to tests/language_strong/constructor7_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor8_test.dart b/tests/language_strong/constructor8_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor8_test.dart
rename to tests/language_strong/constructor8_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor9_test.dart b/tests/language_strong/constructor9_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor9_test.dart
rename to tests/language_strong/constructor9_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_body_test.dart b/tests/language_strong/constructor_body_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_body_test.dart
rename to tests/language_strong/constructor_body_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_call_as_function_test.dart b/tests/language_strong/constructor_call_as_function_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_call_as_function_test.dart
rename to tests/language_strong/constructor_call_as_function_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_call_wrong_argument_count_negative_test.dart b/tests/language_strong/constructor_call_wrong_argument_count_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_call_wrong_argument_count_negative_test.dart
rename to tests/language_strong/constructor_call_wrong_argument_count_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_default_test.dart b/tests/language_strong/constructor_default_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_default_test.dart
rename to tests/language_strong/constructor_default_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_duplicate_final_test.dart b/tests/language_strong/constructor_duplicate_final_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_duplicate_final_test.dart
rename to tests/language_strong/constructor_duplicate_final_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_duplicate_initializers_test.dart b/tests/language_strong/constructor_duplicate_initializers_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_duplicate_initializers_test.dart
rename to tests/language_strong/constructor_duplicate_initializers_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_initializer_test.dart b/tests/language_strong/constructor_initializer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_initializer_test.dart
rename to tests/language_strong/constructor_initializer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_name_clash_lib.dart b/tests/language_strong/constructor_name_clash_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_name_clash_lib.dart
rename to tests/language_strong/constructor_name_clash_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_name_clash_test.dart b/tests/language_strong/constructor_name_clash_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_name_clash_test.dart
rename to tests/language_strong/constructor_name_clash_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_name_test.dart b/tests/language_strong/constructor_name_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_name_test.dart
rename to tests/language_strong/constructor_name_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_named_arguments_test.dart b/tests/language_strong/constructor_named_arguments_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_named_arguments_test.dart
rename to tests/language_strong/constructor_named_arguments_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_redirect1_negative_test.dart b/tests/language_strong/constructor_redirect1_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_redirect1_negative_test.dart
rename to tests/language_strong/constructor_redirect1_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_redirect2_negative_test.dart b/tests/language_strong/constructor_redirect2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_redirect2_negative_test.dart
rename to tests/language_strong/constructor_redirect2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_redirect2_test.dart b/tests/language_strong/constructor_redirect2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_redirect2_test.dart
rename to tests/language_strong/constructor_redirect2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_redirect_test.dart b/tests/language_strong/constructor_redirect_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_redirect_test.dart
rename to tests/language_strong/constructor_redirect_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_return_test.dart b/tests/language_strong/constructor_return_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_return_test.dart
rename to tests/language_strong/constructor_return_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_setter_negative_test.dart b/tests/language_strong/constructor_setter_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_setter_negative_test.dart
rename to tests/language_strong/constructor_setter_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_test.dart b/tests/language_strong/constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_test.dart
rename to tests/language_strong/constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/constructor_with_mixin_test.dart b/tests/language_strong/constructor_with_mixin_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/constructor_with_mixin_test.dart
rename to tests/language_strong/constructor_with_mixin_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/context2_test.dart b/tests/language_strong/context2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/context2_test.dart
rename to tests/language_strong/context2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/context_args_with_defaults_test.dart b/tests/language_strong/context_args_with_defaults_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/context_args_with_defaults_test.dart
rename to tests/language_strong/context_args_with_defaults_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/context_test.dart b/tests/language_strong/context_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/context_test.dart
rename to tests/language_strong/context_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/continue_test.dart b/tests/language_strong/continue_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/continue_test.dart
rename to tests/language_strong/continue_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/core_type_check_test.dart b/tests/language_strong/core_type_check_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/core_type_check_test.dart
rename to tests/language_strong/core_type_check_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/crash_12118_test.dart b/tests/language_strong/crash_12118_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/crash_12118_test.dart
rename to tests/language_strong/crash_12118_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/crash_6725_part.dart b/tests/language_strong/crash_6725_part.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/crash_6725_part.dart
rename to tests/language_strong/crash_6725_part.dart
diff --git a/pkg/dev_compiler/test/codegen/language/crash_6725_test.dart b/tests/language_strong/crash_6725_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/crash_6725_test.dart
rename to tests/language_strong/crash_6725_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/create_unresolved_type_test.dart b/tests/language_strong/create_unresolved_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/create_unresolved_type_test.dart
rename to tests/language_strong/create_unresolved_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/critical_edge2_test.dart b/tests/language_strong/critical_edge2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/critical_edge2_test.dart
rename to tests/language_strong/critical_edge2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/critical_edge_test.dart b/tests/language_strong/critical_edge_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/critical_edge_test.dart
rename to tests/language_strong/critical_edge_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/ct_const2_test.dart b/tests/language_strong/ct_const2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/ct_const2_test.dart
rename to tests/language_strong/ct_const2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/ct_const3_test.dart b/tests/language_strong/ct_const3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/ct_const3_test.dart
rename to tests/language_strong/ct_const3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/ct_const4_lib.dart b/tests/language_strong/ct_const4_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/ct_const4_lib.dart
rename to tests/language_strong/ct_const4_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/ct_const4_test.dart b/tests/language_strong/ct_const4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/ct_const4_test.dart
rename to tests/language_strong/ct_const4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/ct_const_test.dart b/tests/language_strong/ct_const_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/ct_const_test.dart
rename to tests/language_strong/ct_const_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/custom_await_stack_trace_test.dart b/tests/language_strong/custom_await_stack_trace_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/custom_await_stack_trace_test.dart
rename to tests/language_strong/custom_await_stack_trace_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cyclic_class_member_test.dart b/tests/language_strong/cyclic_class_member_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cyclic_class_member_test.dart
rename to tests/language_strong/cyclic_class_member_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cyclic_constructor_test.dart b/tests/language_strong/cyclic_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cyclic_constructor_test.dart
rename to tests/language_strong/cyclic_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cyclic_default_values_test.dart b/tests/language_strong/cyclic_default_values_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cyclic_default_values_test.dart
rename to tests/language_strong/cyclic_default_values_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cyclic_import_test.dart b/tests/language_strong/cyclic_import_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cyclic_import_test.dart
rename to tests/language_strong/cyclic_import_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cyclic_metadata_test.dart b/tests/language_strong/cyclic_metadata_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cyclic_metadata_test.dart
rename to tests/language_strong/cyclic_metadata_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cyclic_type2_test.dart b/tests/language_strong/cyclic_type2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cyclic_type2_test.dart
rename to tests/language_strong/cyclic_type2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cyclic_type_test.dart b/tests/language_strong/cyclic_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cyclic_type_test.dart
rename to tests/language_strong/cyclic_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cyclic_type_variable_test.dart b/tests/language_strong/cyclic_type_variable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cyclic_type_variable_test.dart
rename to tests/language_strong/cyclic_type_variable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/cyclic_typedef_test.dart b/tests/language_strong/cyclic_typedef_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/cyclic_typedef_test.dart
rename to tests/language_strong/cyclic_typedef_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/dangling_else_test.dart b/tests/language_strong/dangling_else_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/dangling_else_test.dart
rename to tests/language_strong/dangling_else_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/dead_field_access_test.dart b/tests/language_strong/dead_field_access_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/dead_field_access_test.dart
rename to tests/language_strong/dead_field_access_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/default_class_implicit_constructor_test.dart b/tests/language_strong/default_class_implicit_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/default_class_implicit_constructor_test.dart
rename to tests/language_strong/default_class_implicit_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/default_factory2_test.dart b/tests/language_strong/default_factory2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/default_factory2_test.dart
rename to tests/language_strong/default_factory2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/default_factory3_test.dart b/tests/language_strong/default_factory3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/default_factory3_test.dart
rename to tests/language_strong/default_factory3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/default_factory_library.dart b/tests/language_strong/default_factory_library.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/default_factory_library.dart
rename to tests/language_strong/default_factory_library.dart
diff --git a/pkg/dev_compiler/test/codegen/language/default_factory_library_test.dart b/tests/language_strong/default_factory_library_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/default_factory_library_test.dart
rename to tests/language_strong/default_factory_library_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/default_factory_test.dart b/tests/language_strong/default_factory_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/default_factory_test.dart
rename to tests/language_strong/default_factory_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/default_implementation2_test.dart b/tests/language_strong/default_implementation2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/default_implementation2_test.dart
rename to tests/language_strong/default_implementation2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/default_implementation_test.dart b/tests/language_strong/default_implementation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/default_implementation_test.dart
rename to tests/language_strong/default_implementation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/default_init_test.dart b/tests/language_strong/default_init_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/default_init_test.dart
rename to tests/language_strong/default_init_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_call_empty_before_load_lib.dart b/tests/language_strong/deferred_call_empty_before_load_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_call_empty_before_load_lib.dart
rename to tests/language_strong/deferred_call_empty_before_load_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_call_empty_before_load_test.dart b/tests/language_strong/deferred_call_empty_before_load_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_call_empty_before_load_test.dart
rename to tests/language_strong/deferred_call_empty_before_load_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_closurize_load_library_lib.dart b/tests/language_strong/deferred_closurize_load_library_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_closurize_load_library_lib.dart
rename to tests/language_strong/deferred_closurize_load_library_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_closurize_load_library_test.dart b/tests/language_strong/deferred_closurize_load_library_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_closurize_load_library_test.dart
rename to tests/language_strong/deferred_closurize_load_library_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_constant_list_lib.dart b/tests/language_strong/deferred_constant_list_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_constant_list_lib.dart
rename to tests/language_strong/deferred_constant_list_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_constant_list_test.dart b/tests/language_strong/deferred_constant_list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_constant_list_test.dart
rename to tests/language_strong/deferred_constant_list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_constraints_constants_lib.dart b/tests/language_strong/deferred_constraints_constants_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_constraints_constants_lib.dart
rename to tests/language_strong/deferred_constraints_constants_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_constraints_constants_test.dart b/tests/language_strong/deferred_constraints_constants_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_constraints_constants_test.dart
rename to tests/language_strong/deferred_constraints_constants_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_constraints_lib.dart b/tests/language_strong/deferred_constraints_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_constraints_lib.dart
rename to tests/language_strong/deferred_constraints_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_constraints_lib2.dart b/tests/language_strong/deferred_constraints_lib2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_constraints_lib2.dart
rename to tests/language_strong/deferred_constraints_lib2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_constraints_type_annotation_test.dart b/tests/language_strong/deferred_constraints_type_annotation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_constraints_type_annotation_test.dart
rename to tests/language_strong/deferred_constraints_type_annotation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_duplicate_prefix1_test.dart b/tests/language_strong/deferred_duplicate_prefix1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_duplicate_prefix1_test.dart
rename to tests/language_strong/deferred_duplicate_prefix1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_duplicate_prefix2_test.dart b/tests/language_strong/deferred_duplicate_prefix2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_duplicate_prefix2_test.dart
rename to tests/language_strong/deferred_duplicate_prefix2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_duplicate_prefix3_test.dart b/tests/language_strong/deferred_duplicate_prefix3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_duplicate_prefix3_test.dart
rename to tests/language_strong/deferred_duplicate_prefix3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_function_type_lib.dart b/tests/language_strong/deferred_function_type_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_function_type_lib.dart
rename to tests/language_strong/deferred_function_type_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_function_type_test.dart b/tests/language_strong/deferred_function_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_function_type_test.dart
rename to tests/language_strong/deferred_function_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_global_lib.dart b/tests/language_strong/deferred_global_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_global_lib.dart
rename to tests/language_strong/deferred_global_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_global_test.dart b/tests/language_strong/deferred_global_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_global_test.dart
rename to tests/language_strong/deferred_global_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_inheritance_constraints_lib.dart b/tests/language_strong/deferred_inheritance_constraints_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_inheritance_constraints_lib.dart
rename to tests/language_strong/deferred_inheritance_constraints_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_inheritance_constraints_test.dart b/tests/language_strong/deferred_inheritance_constraints_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_inheritance_constraints_test.dart
rename to tests/language_strong/deferred_inheritance_constraints_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_inlined_test.dart b/tests/language_strong/deferred_inlined_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_inlined_test.dart
rename to tests/language_strong/deferred_inlined_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_load_constants.dart b/tests/language_strong/deferred_load_constants.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_load_constants.dart
rename to tests/language_strong/deferred_load_constants.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_load_constants_test.dart b/tests/language_strong/deferred_load_constants_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_load_constants_test.dart
rename to tests/language_strong/deferred_load_constants_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_load_inval_code_lib.dart b/tests/language_strong/deferred_load_inval_code_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_load_inval_code_lib.dart
rename to tests/language_strong/deferred_load_inval_code_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_load_inval_code_test.dart b/tests/language_strong/deferred_load_inval_code_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_load_inval_code_test.dart
rename to tests/language_strong/deferred_load_inval_code_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_load_library_wrong_args_lib.dart b/tests/language_strong/deferred_load_library_wrong_args_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_load_library_wrong_args_lib.dart
rename to tests/language_strong/deferred_load_library_wrong_args_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_load_library_wrong_args_test.dart b/tests/language_strong/deferred_load_library_wrong_args_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_load_library_wrong_args_test.dart
rename to tests/language_strong/deferred_load_library_wrong_args_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_mixin_lib1.dart b/tests/language_strong/deferred_mixin_lib1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_mixin_lib1.dart
rename to tests/language_strong/deferred_mixin_lib1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_mixin_lib2.dart b/tests/language_strong/deferred_mixin_lib2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_mixin_lib2.dart
rename to tests/language_strong/deferred_mixin_lib2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_mixin_shared.dart b/tests/language_strong/deferred_mixin_shared.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_mixin_shared.dart
rename to tests/language_strong/deferred_mixin_shared.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_mixin_test.dart b/tests/language_strong/deferred_mixin_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_mixin_test.dart
rename to tests/language_strong/deferred_mixin_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_no_prefix_test.dart b/tests/language_strong/deferred_no_prefix_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_no_prefix_test.dart
rename to tests/language_strong/deferred_no_prefix_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_no_such_method_lib.dart b/tests/language_strong/deferred_no_such_method_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_no_such_method_lib.dart
rename to tests/language_strong/deferred_no_such_method_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_no_such_method_test.dart b/tests/language_strong/deferred_no_such_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_no_such_method_test.dart
rename to tests/language_strong/deferred_no_such_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_not_loaded_check_lib.dart b/tests/language_strong/deferred_not_loaded_check_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_not_loaded_check_lib.dart
rename to tests/language_strong/deferred_not_loaded_check_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_not_loaded_check_test.dart b/tests/language_strong/deferred_not_loaded_check_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_not_loaded_check_test.dart
rename to tests/language_strong/deferred_not_loaded_check_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_only_constant_lib.dart b/tests/language_strong/deferred_only_constant_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_only_constant_lib.dart
rename to tests/language_strong/deferred_only_constant_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_only_constant_test.dart b/tests/language_strong/deferred_only_constant_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_only_constant_test.dart
rename to tests/language_strong/deferred_only_constant_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_optimized_test.dart b/tests/language_strong/deferred_optimized_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_optimized_test.dart
rename to tests/language_strong/deferred_optimized_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_prefix_constraints_lib.dart b/tests/language_strong/deferred_prefix_constraints_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_prefix_constraints_lib.dart
rename to tests/language_strong/deferred_prefix_constraints_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_prefix_constraints_lib2.dart b/tests/language_strong/deferred_prefix_constraints_lib2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_prefix_constraints_lib2.dart
rename to tests/language_strong/deferred_prefix_constraints_lib2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_redirecting_factory_lib1.dart b/tests/language_strong/deferred_redirecting_factory_lib1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_redirecting_factory_lib1.dart
rename to tests/language_strong/deferred_redirecting_factory_lib1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_redirecting_factory_lib2.dart b/tests/language_strong/deferred_redirecting_factory_lib2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_redirecting_factory_lib2.dart
rename to tests/language_strong/deferred_redirecting_factory_lib2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_redirecting_factory_test.dart b/tests/language_strong/deferred_redirecting_factory_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_redirecting_factory_test.dart
rename to tests/language_strong/deferred_redirecting_factory_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_regression_22995_lib.dart b/tests/language_strong/deferred_regression_22995_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_regression_22995_lib.dart
rename to tests/language_strong/deferred_regression_22995_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_regression_22995_test.dart b/tests/language_strong/deferred_regression_22995_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_regression_22995_test.dart
rename to tests/language_strong/deferred_regression_22995_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_shadow_load_library_lib.dart b/tests/language_strong/deferred_shadow_load_library_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_shadow_load_library_lib.dart
rename to tests/language_strong/deferred_shadow_load_library_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_shadow_load_library_test.dart b/tests/language_strong/deferred_shadow_load_library_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_shadow_load_library_test.dart
rename to tests/language_strong/deferred_shadow_load_library_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_shared_and_unshared_classes_lib1.dart b/tests/language_strong/deferred_shared_and_unshared_classes_lib1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_shared_and_unshared_classes_lib1.dart
rename to tests/language_strong/deferred_shared_and_unshared_classes_lib1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_shared_and_unshared_classes_lib2.dart b/tests/language_strong/deferred_shared_and_unshared_classes_lib2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_shared_and_unshared_classes_lib2.dart
rename to tests/language_strong/deferred_shared_and_unshared_classes_lib2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_shared_and_unshared_classes_lib_shared.dart b/tests/language_strong/deferred_shared_and_unshared_classes_lib_shared.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_shared_and_unshared_classes_lib_shared.dart
rename to tests/language_strong/deferred_shared_and_unshared_classes_lib_shared.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_shared_and_unshared_classes_test.dart b/tests/language_strong/deferred_shared_and_unshared_classes_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_shared_and_unshared_classes_test.dart
rename to tests/language_strong/deferred_shared_and_unshared_classes_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_static_seperate_lib1.dart b/tests/language_strong/deferred_static_seperate_lib1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_static_seperate_lib1.dart
rename to tests/language_strong/deferred_static_seperate_lib1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_static_seperate_lib2.dart b/tests/language_strong/deferred_static_seperate_lib2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_static_seperate_lib2.dart
rename to tests/language_strong/deferred_static_seperate_lib2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_static_seperate_test.dart b/tests/language_strong/deferred_static_seperate_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_static_seperate_test.dart
rename to tests/language_strong/deferred_static_seperate_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_type_dependency_lib1.dart b/tests/language_strong/deferred_type_dependency_lib1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_type_dependency_lib1.dart
rename to tests/language_strong/deferred_type_dependency_lib1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_type_dependency_lib2.dart b/tests/language_strong/deferred_type_dependency_lib2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_type_dependency_lib2.dart
rename to tests/language_strong/deferred_type_dependency_lib2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_type_dependency_lib3.dart b/tests/language_strong/deferred_type_dependency_lib3.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_type_dependency_lib3.dart
rename to tests/language_strong/deferred_type_dependency_lib3.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deferred_type_dependency_test.dart b/tests/language_strong/deferred_type_dependency_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deferred_type_dependency_test.dart
rename to tests/language_strong/deferred_type_dependency_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deopt_inlined_function_lazy_test.dart b/tests/language_strong/deopt_inlined_function_lazy_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deopt_inlined_function_lazy_test.dart
rename to tests/language_strong/deopt_inlined_function_lazy_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deopt_inlined_function_test.dart b/tests/language_strong/deopt_inlined_function_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deopt_inlined_function_test.dart
rename to tests/language_strong/deopt_inlined_function_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deopt_lazy_finalization_test.dart b/tests/language_strong/deopt_lazy_finalization_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deopt_lazy_finalization_test.dart
rename to tests/language_strong/deopt_lazy_finalization_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deopt_no_feedback_test.dart b/tests/language_strong/deopt_no_feedback_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deopt_no_feedback_test.dart
rename to tests/language_strong/deopt_no_feedback_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deopt_smi_op_test.dart b/tests/language_strong/deopt_smi_op_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deopt_smi_op_test.dart
rename to tests/language_strong/deopt_smi_op_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/deoptimized_function_on_stack_test.dart b/tests/language_strong/deoptimized_function_on_stack_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/deoptimized_function_on_stack_test.dart
rename to tests/language_strong/deoptimized_function_on_stack_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/disassemble_test.dart b/tests/language_strong/disassemble_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/disassemble_test.dart
rename to tests/language_strong/disassemble_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/div_by_zero_test.dart b/tests/language_strong/div_by_zero_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/div_by_zero_test.dart
rename to tests/language_strong/div_by_zero_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/div_with_power_of_two2_test.dart b/tests/language_strong/div_with_power_of_two2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/div_with_power_of_two2_test.dart
rename to tests/language_strong/div_with_power_of_two2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/div_with_power_of_two_test.dart b/tests/language_strong/div_with_power_of_two_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/div_with_power_of_two_test.dart
rename to tests/language_strong/div_with_power_of_two_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/do_while2_test.dart b/tests/language_strong/do_while2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/do_while2_test.dart
rename to tests/language_strong/do_while2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/do_while3_test.dart b/tests/language_strong/do_while3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/do_while3_test.dart
rename to tests/language_strong/do_while3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/do_while4_test.dart b/tests/language_strong/do_while4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/do_while4_test.dart
rename to tests/language_strong/do_while4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/do_while_test.dart b/tests/language_strong/do_while_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/do_while_test.dart
rename to tests/language_strong/do_while_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/double_comparison_test.dart b/tests/language_strong/double_comparison_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/double_comparison_test.dart
rename to tests/language_strong/double_comparison_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/double_int_addition_test.dart b/tests/language_strong/double_int_addition_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/double_int_addition_test.dart
rename to tests/language_strong/double_int_addition_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/double_int_to_string_test.dart b/tests/language_strong/double_int_to_string_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/double_int_to_string_test.dart
rename to tests/language_strong/double_int_to_string_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/double_modulo_test.dart b/tests/language_strong/double_modulo_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/double_modulo_test.dart
rename to tests/language_strong/double_modulo_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/double_nan_comparison_test.dart b/tests/language_strong/double_nan_comparison_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/double_nan_comparison_test.dart
rename to tests/language_strong/double_nan_comparison_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/double_to_string_as_exponential2_test.dart b/tests/language_strong/double_to_string_as_exponential2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/double_to_string_as_exponential2_test.dart
rename to tests/language_strong/double_to_string_as_exponential2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/double_to_string_as_exponential3_test.dart b/tests/language_strong/double_to_string_as_exponential3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/double_to_string_as_exponential3_test.dart
rename to tests/language_strong/double_to_string_as_exponential3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/double_to_string_as_exponential_test.dart b/tests/language_strong/double_to_string_as_exponential_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/double_to_string_as_exponential_test.dart
rename to tests/language_strong/double_to_string_as_exponential_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/double_to_string_as_fixed2_test.dart b/tests/language_strong/double_to_string_as_fixed2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/double_to_string_as_fixed2_test.dart
rename to tests/language_strong/double_to_string_as_fixed2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/double_to_string_as_fixed_test.dart b/tests/language_strong/double_to_string_as_fixed_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/double_to_string_as_fixed_test.dart
rename to tests/language_strong/double_to_string_as_fixed_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/double_to_string_as_precision2_test.dart b/tests/language_strong/double_to_string_as_precision2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/double_to_string_as_precision2_test.dart
rename to tests/language_strong/double_to_string_as_precision2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/double_to_string_as_precision3_test.dart b/tests/language_strong/double_to_string_as_precision3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/double_to_string_as_precision3_test.dart
rename to tests/language_strong/double_to_string_as_precision3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/double_to_string_as_precision_test.dart b/tests/language_strong/double_to_string_as_precision_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/double_to_string_as_precision_test.dart
rename to tests/language_strong/double_to_string_as_precision_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/double_to_string_test.dart b/tests/language_strong/double_to_string_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/double_to_string_test.dart
rename to tests/language_strong/double_to_string_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/duplicate_constructor_test.dart b/tests/language_strong/duplicate_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/duplicate_constructor_test.dart
rename to tests/language_strong/duplicate_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/duplicate_export_liba.dart b/tests/language_strong/duplicate_export_liba.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/duplicate_export_liba.dart
rename to tests/language_strong/duplicate_export_liba.dart
diff --git a/pkg/dev_compiler/test/codegen/language/duplicate_export_negative_test.dart b/tests/language_strong/duplicate_export_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/duplicate_export_negative_test.dart
rename to tests/language_strong/duplicate_export_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/duplicate_export_test.dart b/tests/language_strong/duplicate_export_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/duplicate_export_test.dart
rename to tests/language_strong/duplicate_export_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/duplicate_implements_test.dart b/tests/language_strong/duplicate_implements_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/duplicate_implements_test.dart
rename to tests/language_strong/duplicate_implements_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/duplicate_import_liba.dart b/tests/language_strong/duplicate_import_liba.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/duplicate_import_liba.dart
rename to tests/language_strong/duplicate_import_liba.dart
diff --git a/pkg/dev_compiler/test/codegen/language/duplicate_import_libb.dart b/tests/language_strong/duplicate_import_libb.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/duplicate_import_libb.dart
rename to tests/language_strong/duplicate_import_libb.dart
diff --git a/pkg/dev_compiler/test/codegen/language/duplicate_import_libc.dart b/tests/language_strong/duplicate_import_libc.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/duplicate_import_libc.dart
rename to tests/language_strong/duplicate_import_libc.dart
diff --git a/pkg/dev_compiler/test/codegen/language/duplicate_import_libd.dart b/tests/language_strong/duplicate_import_libd.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/duplicate_import_libd.dart
rename to tests/language_strong/duplicate_import_libd.dart
diff --git a/pkg/dev_compiler/test/codegen/language/duplicate_import_prefix_test.dart b/tests/language_strong/duplicate_import_prefix_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/duplicate_import_prefix_test.dart
rename to tests/language_strong/duplicate_import_prefix_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/duplicate_interface_lib.dart b/tests/language_strong/duplicate_interface_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/duplicate_interface_lib.dart
rename to tests/language_strong/duplicate_interface_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/duplicate_interface_negative_test.dart b/tests/language_strong/duplicate_interface_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/duplicate_interface_negative_test.dart
rename to tests/language_strong/duplicate_interface_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/duplicate_interface_test.dart b/tests/language_strong/duplicate_interface_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/duplicate_interface_test.dart
rename to tests/language_strong/duplicate_interface_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/dynamic2_test.dart b/tests/language_strong/dynamic2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/dynamic2_test.dart
rename to tests/language_strong/dynamic2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/dynamic_call_test.dart b/tests/language_strong/dynamic_call_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/dynamic_call_test.dart
rename to tests/language_strong/dynamic_call_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/dynamic_field_test.dart b/tests/language_strong/dynamic_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/dynamic_field_test.dart
rename to tests/language_strong/dynamic_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/dynamic_prefix_core_test.dart b/tests/language_strong/dynamic_prefix_core_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/dynamic_prefix_core_test.dart
rename to tests/language_strong/dynamic_prefix_core_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/dynamic_test.dart b/tests/language_strong/dynamic_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/dynamic_test.dart
rename to tests/language_strong/dynamic_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/dynamic_type_literal_test.dart b/tests/language_strong/dynamic_type_literal_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/dynamic_type_literal_test.dart
rename to tests/language_strong/dynamic_type_literal_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/emit_const_fields_test.dart b/tests/language_strong/emit_const_fields_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/emit_const_fields_test.dart
rename to tests/language_strong/emit_const_fields_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/empty_block_case_test.dart b/tests/language_strong/empty_block_case_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/empty_block_case_test.dart
rename to tests/language_strong/empty_block_case_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/empty_library.dart b/tests/language_strong/empty_library.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/empty_library.dart
rename to tests/language_strong/empty_library.dart
diff --git a/pkg/dev_compiler/test/codegen/language/empty_main.dart b/tests/language_strong/empty_main.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/empty_main.dart
rename to tests/language_strong/empty_main.dart
diff --git a/pkg/dev_compiler/test/codegen/language/enum_duplicate_lib.dart b/tests/language_strong/enum_duplicate_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/enum_duplicate_lib.dart
rename to tests/language_strong/enum_duplicate_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/enum_duplicate_test.dart b/tests/language_strong/enum_duplicate_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/enum_duplicate_test.dart
rename to tests/language_strong/enum_duplicate_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/enum_index_test.dart b/tests/language_strong/enum_index_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/enum_index_test.dart
rename to tests/language_strong/enum_index_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/enum_is_keyword_test.dart b/tests/language_strong/enum_is_keyword_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/enum_is_keyword_test.dart
rename to tests/language_strong/enum_is_keyword_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/enum_mirror_test.dart b/tests/language_strong/enum_mirror_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/enum_mirror_test.dart
rename to tests/language_strong/enum_mirror_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/enum_private_lib.dart b/tests/language_strong/enum_private_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/enum_private_lib.dart
rename to tests/language_strong/enum_private_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/enum_private_test.dart b/tests/language_strong/enum_private_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/enum_private_test.dart
rename to tests/language_strong/enum_private_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/enum_syntax_test.dart b/tests/language_strong/enum_syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/enum_syntax_test.dart
rename to tests/language_strong/enum_syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/enum_test.dart b/tests/language_strong/enum_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/enum_test.dart
rename to tests/language_strong/enum_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/enum_value_name_test.dart b/tests/language_strong/enum_value_name_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/enum_value_name_test.dart
rename to tests/language_strong/enum_value_name_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/equality_test.dart b/tests/language_strong/equality_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/equality_test.dart
rename to tests/language_strong/equality_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/error_stacktrace_test.dart b/tests/language_strong/error_stacktrace_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/error_stacktrace_test.dart
rename to tests/language_strong/error_stacktrace_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/evaluation_redirecting_constructor_test.dart b/tests/language_strong/evaluation_redirecting_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/evaluation_redirecting_constructor_test.dart
rename to tests/language_strong/evaluation_redirecting_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/example_constructor_test.dart b/tests/language_strong/example_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/example_constructor_test.dart
rename to tests/language_strong/example_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/exception_identity_test.dart b/tests/language_strong/exception_identity_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/exception_identity_test.dart
rename to tests/language_strong/exception_identity_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/exception_in_increment_test.dart b/tests/language_strong/exception_in_increment_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/exception_in_increment_test.dart
rename to tests/language_strong/exception_in_increment_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/exception_test.dart b/tests/language_strong/exception_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/exception_test.dart
rename to tests/language_strong/exception_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/execute_finally10_test.dart b/tests/language_strong/execute_finally10_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/execute_finally10_test.dart
rename to tests/language_strong/execute_finally10_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/execute_finally11_test.dart b/tests/language_strong/execute_finally11_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/execute_finally11_test.dart
rename to tests/language_strong/execute_finally11_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/execute_finally12_test.dart b/tests/language_strong/execute_finally12_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/execute_finally12_test.dart
rename to tests/language_strong/execute_finally12_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/execute_finally1_test.dart b/tests/language_strong/execute_finally1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/execute_finally1_test.dart
rename to tests/language_strong/execute_finally1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/execute_finally2_test.dart b/tests/language_strong/execute_finally2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/execute_finally2_test.dart
rename to tests/language_strong/execute_finally2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/execute_finally3_test.dart b/tests/language_strong/execute_finally3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/execute_finally3_test.dart
rename to tests/language_strong/execute_finally3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/execute_finally4_test.dart b/tests/language_strong/execute_finally4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/execute_finally4_test.dart
rename to tests/language_strong/execute_finally4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/execute_finally5_test.dart b/tests/language_strong/execute_finally5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/execute_finally5_test.dart
rename to tests/language_strong/execute_finally5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/execute_finally6_test.dart b/tests/language_strong/execute_finally6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/execute_finally6_test.dart
rename to tests/language_strong/execute_finally6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/execute_finally7_test.dart b/tests/language_strong/execute_finally7_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/execute_finally7_test.dart
rename to tests/language_strong/execute_finally7_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/execute_finally8_test.dart b/tests/language_strong/execute_finally8_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/execute_finally8_test.dart
rename to tests/language_strong/execute_finally8_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/execute_finally9_test.dart b/tests/language_strong/execute_finally9_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/execute_finally9_test.dart
rename to tests/language_strong/execute_finally9_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/exhaustive_for_test.dart b/tests/language_strong/exhaustive_for_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/exhaustive_for_test.dart
rename to tests/language_strong/exhaustive_for_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/expect_test.dart b/tests/language_strong/expect_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/expect_test.dart
rename to tests/language_strong/expect_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export1_lib.dart b/tests/language_strong/export1_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export1_lib.dart
rename to tests/language_strong/export1_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_ambiguous_main_a.dart b/tests/language_strong/export_ambiguous_main_a.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_ambiguous_main_a.dart
rename to tests/language_strong/export_ambiguous_main_a.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_ambiguous_main_b.dart b/tests/language_strong/export_ambiguous_main_b.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_ambiguous_main_b.dart
rename to tests/language_strong/export_ambiguous_main_b.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_ambiguous_main_negative_test.dart b/tests/language_strong/export_ambiguous_main_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_ambiguous_main_negative_test.dart
rename to tests/language_strong/export_ambiguous_main_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_cyclic_helper1.dart b/tests/language_strong/export_cyclic_helper1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_cyclic_helper1.dart
rename to tests/language_strong/export_cyclic_helper1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_cyclic_helper2.dart b/tests/language_strong/export_cyclic_helper2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_cyclic_helper2.dart
rename to tests/language_strong/export_cyclic_helper2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_cyclic_helper3.dart b/tests/language_strong/export_cyclic_helper3.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_cyclic_helper3.dart
rename to tests/language_strong/export_cyclic_helper3.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_cyclic_test.dart b/tests/language_strong/export_cyclic_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_cyclic_test.dart
rename to tests/language_strong/export_cyclic_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_double_same_main_test.dart b/tests/language_strong/export_double_same_main_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_double_same_main_test.dart
rename to tests/language_strong/export_double_same_main_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_helper1.dart b/tests/language_strong/export_helper1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_helper1.dart
rename to tests/language_strong/export_helper1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_helper2.dart b/tests/language_strong/export_helper2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_helper2.dart
rename to tests/language_strong/export_helper2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_helper3.dart b/tests/language_strong/export_helper3.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_helper3.dart
rename to tests/language_strong/export_helper3.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_helper4.dart b/tests/language_strong/export_helper4.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_helper4.dart
rename to tests/language_strong/export_helper4.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_main_override_test.dart b/tests/language_strong/export_main_override_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_main_override_test.dart
rename to tests/language_strong/export_main_override_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_main_test.dart b/tests/language_strong/export_main_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_main_test.dart
rename to tests/language_strong/export_main_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_order_helper1.dart b/tests/language_strong/export_order_helper1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_order_helper1.dart
rename to tests/language_strong/export_order_helper1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_order_helper2.dart b/tests/language_strong/export_order_helper2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_order_helper2.dart
rename to tests/language_strong/export_order_helper2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_order_test.dart b/tests/language_strong/export_order_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_order_test.dart
rename to tests/language_strong/export_order_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_private_test.dart b/tests/language_strong/export_private_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_private_test.dart
rename to tests/language_strong/export_private_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/export_test.dart b/tests/language_strong/export_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/export_test.dart
rename to tests/language_strong/export_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/extend_type_parameter2_negative_test.dart b/tests/language_strong/extend_type_parameter2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/extend_type_parameter2_negative_test.dart
rename to tests/language_strong/extend_type_parameter2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/extend_type_parameter_negative_test.dart b/tests/language_strong/extend_type_parameter_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/extend_type_parameter_negative_test.dart
rename to tests/language_strong/extend_type_parameter_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/extends_test.dart b/tests/language_strong/extends_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/extends_test.dart
rename to tests/language_strong/extends_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/extends_test_lib.dart b/tests/language_strong/extends_test_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/extends_test_lib.dart
rename to tests/language_strong/extends_test_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/external_test.dart b/tests/language_strong/external_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/external_test.dart
rename to tests/language_strong/external_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/f_bounded_equality_test.dart b/tests/language_strong/f_bounded_equality_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/f_bounded_equality_test.dart
rename to tests/language_strong/f_bounded_equality_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/f_bounded_quantification2_test.dart b/tests/language_strong/f_bounded_quantification2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/f_bounded_quantification2_test.dart
rename to tests/language_strong/f_bounded_quantification2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/f_bounded_quantification3_test.dart b/tests/language_strong/f_bounded_quantification3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/f_bounded_quantification3_test.dart
rename to tests/language_strong/f_bounded_quantification3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/f_bounded_quantification4_test.dart b/tests/language_strong/f_bounded_quantification4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/f_bounded_quantification4_test.dart
rename to tests/language_strong/f_bounded_quantification4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/f_bounded_quantification5_test.dart b/tests/language_strong/f_bounded_quantification5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/f_bounded_quantification5_test.dart
rename to tests/language_strong/f_bounded_quantification5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/f_bounded_quantification_test.dart b/tests/language_strong/f_bounded_quantification_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/f_bounded_quantification_test.dart
rename to tests/language_strong/f_bounded_quantification_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/factory1_test.dart b/tests/language_strong/factory1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/factory1_test.dart
rename to tests/language_strong/factory1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/factory2_negative_test.dart b/tests/language_strong/factory2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/factory2_negative_test.dart
rename to tests/language_strong/factory2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/factory2_test.dart b/tests/language_strong/factory2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/factory2_test.dart
rename to tests/language_strong/factory2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/factory3_negative_test.dart b/tests/language_strong/factory3_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/factory3_negative_test.dart
rename to tests/language_strong/factory3_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/factory3_test.dart b/tests/language_strong/factory3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/factory3_test.dart
rename to tests/language_strong/factory3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/factory4_test.dart b/tests/language_strong/factory4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/factory4_test.dart
rename to tests/language_strong/factory4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/factory5_test.dart b/tests/language_strong/factory5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/factory5_test.dart
rename to tests/language_strong/factory5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/factory_arrow_test.dart b/tests/language_strong/factory_arrow_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/factory_arrow_test.dart
rename to tests/language_strong/factory_arrow_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/factory_implementation_test.dart b/tests/language_strong/factory_implementation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/factory_implementation_test.dart
rename to tests/language_strong/factory_implementation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/factory_negative_test.dart b/tests/language_strong/factory_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/factory_negative_test.dart
rename to tests/language_strong/factory_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/factory_redirection2_test.dart b/tests/language_strong/factory_redirection2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/factory_redirection2_test.dart
rename to tests/language_strong/factory_redirection2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/factory_redirection3_cyclic_test.dart b/tests/language_strong/factory_redirection3_cyclic_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/factory_redirection3_cyclic_test.dart
rename to tests/language_strong/factory_redirection3_cyclic_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/factory_redirection_test.dart b/tests/language_strong/factory_redirection_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/factory_redirection_test.dart
rename to tests/language_strong/factory_redirection_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/factory_return_type_checked_test.dart b/tests/language_strong/factory_return_type_checked_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/factory_return_type_checked_test.dart
rename to tests/language_strong/factory_return_type_checked_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/factory_test.dart b/tests/language_strong/factory_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/factory_test.dart
rename to tests/language_strong/factory_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/factory_type_parameter2_test.dart b/tests/language_strong/factory_type_parameter2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/factory_type_parameter2_test.dart
rename to tests/language_strong/factory_type_parameter2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/factory_type_parameter_test.dart b/tests/language_strong/factory_type_parameter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/factory_type_parameter_test.dart
rename to tests/language_strong/factory_type_parameter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/failing_main.dart b/tests/language_strong/failing_main.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/failing_main.dart
rename to tests/language_strong/failing_main.dart
diff --git a/pkg/dev_compiler/test/codegen/language/fannkuch_test.dart b/tests/language_strong/fannkuch_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/fannkuch_test.dart
rename to tests/language_strong/fannkuch_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/fast_method_extraction_test.dart b/tests/language_strong/fast_method_extraction_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/fast_method_extraction_test.dart
rename to tests/language_strong/fast_method_extraction_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/fauxverride_test.dart b/tests/language_strong/fauxverride_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/fauxverride_test.dart
rename to tests/language_strong/fauxverride_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/fibo_test.dart b/tests/language_strong/fibo_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/fibo_test.dart
rename to tests/language_strong/fibo_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field1_negative_test.dart b/tests/language_strong/field1_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field1_negative_test.dart
rename to tests/language_strong/field1_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field2_negative_test.dart b/tests/language_strong/field2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field2_negative_test.dart
rename to tests/language_strong/field2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field3_negative_test.dart b/tests/language_strong/field3_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field3_negative_test.dart
rename to tests/language_strong/field3_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field3a_negative_test.dart b/tests/language_strong/field3a_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field3a_negative_test.dart
rename to tests/language_strong/field3a_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field4_negative_test.dart b/tests/language_strong/field4_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field4_negative_test.dart
rename to tests/language_strong/field4_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field5_negative_test.dart b/tests/language_strong/field5_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field5_negative_test.dart
rename to tests/language_strong/field5_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field6_negative_test.dart b/tests/language_strong/field6_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field6_negative_test.dart
rename to tests/language_strong/field6_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field6a_negative_test.dart b/tests/language_strong/field6a_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field6a_negative_test.dart
rename to tests/language_strong/field6a_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_decl_missing_var_type_test.dart b/tests/language_strong/field_decl_missing_var_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_decl_missing_var_type_test.dart
rename to tests/language_strong/field_decl_missing_var_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_increment_bailout_test.dart b/tests/language_strong/field_increment_bailout_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_increment_bailout_test.dart
rename to tests/language_strong/field_increment_bailout_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_inference_test.dart b/tests/language_strong/field_inference_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_inference_test.dart
rename to tests/language_strong/field_inference_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_initialization_order_test.dart b/tests/language_strong/field_initialization_order_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_initialization_order_test.dart
rename to tests/language_strong/field_initialization_order_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_method4_negative_test.dart b/tests/language_strong/field_method4_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_method4_negative_test.dart
rename to tests/language_strong/field_method4_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_method_test.dart b/tests/language_strong/field_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_method_test.dart
rename to tests/language_strong/field_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_optimization2_test.dart b/tests/language_strong/field_optimization2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_optimization2_test.dart
rename to tests/language_strong/field_optimization2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_optimization3_test.dart b/tests/language_strong/field_optimization3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_optimization3_test.dart
rename to tests/language_strong/field_optimization3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_optimization_test.dart b/tests/language_strong/field_optimization_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_optimization_test.dart
rename to tests/language_strong/field_optimization_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_override2_test.dart b/tests/language_strong/field_override2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_override2_test.dart
rename to tests/language_strong/field_override2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_override3_test.dart b/tests/language_strong/field_override3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_override3_test.dart
rename to tests/language_strong/field_override3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_override4_test.dart b/tests/language_strong/field_override4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_override4_test.dart
rename to tests/language_strong/field_override4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_override_test.dart b/tests/language_strong/field_override_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_override_test.dart
rename to tests/language_strong/field_override_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_parameter_test.dart b/tests/language_strong/field_parameter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_parameter_test.dart
rename to tests/language_strong/field_parameter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_super_access2_test.dart b/tests/language_strong/field_super_access2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_super_access2_test.dart
rename to tests/language_strong/field_super_access2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_super_access_test.dart b/tests/language_strong/field_super_access_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_super_access_test.dart
rename to tests/language_strong/field_super_access_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_test.dart b/tests/language_strong/field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_test.dart
rename to tests/language_strong/field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_type_check2_test.dart b/tests/language_strong/field_type_check2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_type_check2_test.dart
rename to tests/language_strong/field_type_check2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/field_type_check_test.dart b/tests/language_strong/field_type_check_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/field_type_check_test.dart
rename to tests/language_strong/field_type_check_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/final_field_initialization_order_test.dart b/tests/language_strong/final_field_initialization_order_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/final_field_initialization_order_test.dart
rename to tests/language_strong/final_field_initialization_order_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/final_field_override_test.dart b/tests/language_strong/final_field_override_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/final_field_override_test.dart
rename to tests/language_strong/final_field_override_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/final_for_in_variable_test.dart b/tests/language_strong/final_for_in_variable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/final_for_in_variable_test.dart
rename to tests/language_strong/final_for_in_variable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/final_is_not_const_test.dart b/tests/language_strong/final_is_not_const_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/final_is_not_const_test.dart
rename to tests/language_strong/final_is_not_const_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/final_param_test.dart b/tests/language_strong/final_param_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/final_param_test.dart
rename to tests/language_strong/final_param_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/final_super_field_set_test.dart b/tests/language_strong/final_super_field_set_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/final_super_field_set_test.dart
rename to tests/language_strong/final_super_field_set_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/final_syntax_test.dart b/tests/language_strong/final_syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/final_syntax_test.dart
rename to tests/language_strong/final_syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/final_used_in_try_test.dart b/tests/language_strong/final_used_in_try_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/final_used_in_try_test.dart
rename to tests/language_strong/final_used_in_try_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/final_variable_assignment_test.dart b/tests/language_strong/final_variable_assignment_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/final_variable_assignment_test.dart
rename to tests/language_strong/final_variable_assignment_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/finally_test.dart b/tests/language_strong/finally_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/finally_test.dart
rename to tests/language_strong/finally_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/first_class_types_constants_test.dart b/tests/language_strong/first_class_types_constants_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/first_class_types_constants_test.dart
rename to tests/language_strong/first_class_types_constants_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/first_class_types_lib1.dart b/tests/language_strong/first_class_types_lib1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/first_class_types_lib1.dart
rename to tests/language_strong/first_class_types_lib1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/first_class_types_lib2.dart b/tests/language_strong/first_class_types_lib2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/first_class_types_lib2.dart
rename to tests/language_strong/first_class_types_lib2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/first_class_types_libraries_test.dart b/tests/language_strong/first_class_types_libraries_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/first_class_types_libraries_test.dart
rename to tests/language_strong/first_class_types_libraries_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/first_class_types_literals_test.dart b/tests/language_strong/first_class_types_literals_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/first_class_types_literals_test.dart
rename to tests/language_strong/first_class_types_literals_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/first_class_types_test.dart b/tests/language_strong/first_class_types_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/first_class_types_test.dart
rename to tests/language_strong/first_class_types_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/first_test.dart b/tests/language_strong/first_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/first_test.dart
rename to tests/language_strong/first_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/fixed_length_test.dart b/tests/language_strong/fixed_length_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/fixed_length_test.dart
rename to tests/language_strong/fixed_length_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/fixed_type_variable2_test.dart b/tests/language_strong/fixed_type_variable2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/fixed_type_variable2_test.dart
rename to tests/language_strong/fixed_type_variable2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/fixed_type_variable_test.dart b/tests/language_strong/fixed_type_variable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/fixed_type_variable_test.dart
rename to tests/language_strong/fixed_type_variable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/flatten_test.dart b/tests/language_strong/flatten_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/flatten_test.dart
rename to tests/language_strong/flatten_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/for2_test.dart b/tests/language_strong/for2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/for2_test.dart
rename to tests/language_strong/for2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/for_in2_test.dart b/tests/language_strong/for_in2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/for_in2_test.dart
rename to tests/language_strong/for_in2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/for_in_side_effects_test.dart b/tests/language_strong/for_in_side_effects_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/for_in_side_effects_test.dart
rename to tests/language_strong/for_in_side_effects_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/for_in_test.dart b/tests/language_strong/for_in_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/for_in_test.dart
rename to tests/language_strong/for_in_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/for_inlining_test.dart b/tests/language_strong/for_inlining_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/for_inlining_test.dart
rename to tests/language_strong/for_inlining_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/for_test.dart b/tests/language_strong/for_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/for_test.dart
rename to tests/language_strong/for_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/for_variable_capture_test.dart b/tests/language_strong/for_variable_capture_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/for_variable_capture_test.dart
rename to tests/language_strong/for_variable_capture_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/for_without_condition_test.dart b/tests/language_strong/for_without_condition_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/for_without_condition_test.dart
rename to tests/language_strong/for_without_condition_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/forwarding_factory_constructor_default_values_test.dart b/tests/language_strong/forwarding_factory_constructor_default_values_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/forwarding_factory_constructor_default_values_test.dart
rename to tests/language_strong/forwarding_factory_constructor_default_values_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/full_stacktrace1_test.dart b/tests/language_strong/full_stacktrace1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/full_stacktrace1_test.dart
rename to tests/language_strong/full_stacktrace1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/full_stacktrace2_test.dart b/tests/language_strong/full_stacktrace2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/full_stacktrace2_test.dart
rename to tests/language_strong/full_stacktrace2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/full_stacktrace3_test.dart b/tests/language_strong/full_stacktrace3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/full_stacktrace3_test.dart
rename to tests/language_strong/full_stacktrace3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_argument_test.dart b/tests/language_strong/function_argument_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_argument_test.dart
rename to tests/language_strong/function_argument_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_field_test.dart b/tests/language_strong/function_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_field_test.dart
rename to tests/language_strong/function_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_getter_test.dart b/tests/language_strong/function_getter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_getter_test.dart
rename to tests/language_strong/function_getter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_literals2_test.dart b/tests/language_strong/function_literals2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_literals2_test.dart
rename to tests/language_strong/function_literals2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_literals_test.dart b/tests/language_strong/function_literals_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_literals_test.dart
rename to tests/language_strong/function_literals_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_malformed_result_type_test.dart b/tests/language_strong/function_malformed_result_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_malformed_result_type_test.dart
rename to tests/language_strong/function_malformed_result_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_propagation_test.dart b/tests/language_strong/function_propagation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_propagation_test.dart
rename to tests/language_strong/function_propagation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype0_test.dart b/tests/language_strong/function_subtype0_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype0_test.dart
rename to tests/language_strong/function_subtype0_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype1_test.dart b/tests/language_strong/function_subtype1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype1_test.dart
rename to tests/language_strong/function_subtype1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype2_test.dart b/tests/language_strong/function_subtype2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype2_test.dart
rename to tests/language_strong/function_subtype2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype3_test.dart b/tests/language_strong/function_subtype3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype3_test.dart
rename to tests/language_strong/function_subtype3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure0_test.dart b/tests/language_strong/function_subtype_bound_closure0_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure0_test.dart
rename to tests/language_strong/function_subtype_bound_closure0_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure1_test.dart b/tests/language_strong/function_subtype_bound_closure1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure1_test.dart
rename to tests/language_strong/function_subtype_bound_closure1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure2_test.dart b/tests/language_strong/function_subtype_bound_closure2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure2_test.dart
rename to tests/language_strong/function_subtype_bound_closure2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure3_test.dart b/tests/language_strong/function_subtype_bound_closure3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure3_test.dart
rename to tests/language_strong/function_subtype_bound_closure3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure4_test.dart b/tests/language_strong/function_subtype_bound_closure4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure4_test.dart
rename to tests/language_strong/function_subtype_bound_closure4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure5_test.dart b/tests/language_strong/function_subtype_bound_closure5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure5_test.dart
rename to tests/language_strong/function_subtype_bound_closure5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure5a_test.dart b/tests/language_strong/function_subtype_bound_closure5a_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure5a_test.dart
rename to tests/language_strong/function_subtype_bound_closure5a_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure6_test.dart b/tests/language_strong/function_subtype_bound_closure6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure6_test.dart
rename to tests/language_strong/function_subtype_bound_closure6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure7_test.dart b/tests/language_strong/function_subtype_bound_closure7_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_bound_closure7_test.dart
rename to tests/language_strong/function_subtype_bound_closure7_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_call0_test.dart b/tests/language_strong/function_subtype_call0_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_call0_test.dart
rename to tests/language_strong/function_subtype_call0_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_call1_test.dart b/tests/language_strong/function_subtype_call1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_call1_test.dart
rename to tests/language_strong/function_subtype_call1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_call2_test.dart b/tests/language_strong/function_subtype_call2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_call2_test.dart
rename to tests/language_strong/function_subtype_call2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_cast0_test.dart b/tests/language_strong/function_subtype_cast0_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_cast0_test.dart
rename to tests/language_strong/function_subtype_cast0_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_cast1_test.dart b/tests/language_strong/function_subtype_cast1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_cast1_test.dart
rename to tests/language_strong/function_subtype_cast1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_cast2_test.dart b/tests/language_strong/function_subtype_cast2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_cast2_test.dart
rename to tests/language_strong/function_subtype_cast2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_cast3_test.dart b/tests/language_strong/function_subtype_cast3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_cast3_test.dart
rename to tests/language_strong/function_subtype_cast3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_checked0_test.dart b/tests/language_strong/function_subtype_checked0_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_checked0_test.dart
rename to tests/language_strong/function_subtype_checked0_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_closure0_test.dart b/tests/language_strong/function_subtype_closure0_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_closure0_test.dart
rename to tests/language_strong/function_subtype_closure0_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_closure1_test.dart b/tests/language_strong/function_subtype_closure1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_closure1_test.dart
rename to tests/language_strong/function_subtype_closure1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_factory0_test.dart b/tests/language_strong/function_subtype_factory0_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_factory0_test.dart
rename to tests/language_strong/function_subtype_factory0_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_factory1_test.dart b/tests/language_strong/function_subtype_factory1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_factory1_test.dart
rename to tests/language_strong/function_subtype_factory1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_inline0_test.dart b/tests/language_strong/function_subtype_inline0_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_inline0_test.dart
rename to tests/language_strong/function_subtype_inline0_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_inline1_test.dart b/tests/language_strong/function_subtype_inline1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_inline1_test.dart
rename to tests/language_strong/function_subtype_inline1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_inline2_test.dart b/tests/language_strong/function_subtype_inline2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_inline2_test.dart
rename to tests/language_strong/function_subtype_inline2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_local0_test.dart b/tests/language_strong/function_subtype_local0_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_local0_test.dart
rename to tests/language_strong/function_subtype_local0_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_local1_test.dart b/tests/language_strong/function_subtype_local1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_local1_test.dart
rename to tests/language_strong/function_subtype_local1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_local2_test.dart b/tests/language_strong/function_subtype_local2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_local2_test.dart
rename to tests/language_strong/function_subtype_local2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_local3_test.dart b/tests/language_strong/function_subtype_local3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_local3_test.dart
rename to tests/language_strong/function_subtype_local3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_local4_test.dart b/tests/language_strong/function_subtype_local4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_local4_test.dart
rename to tests/language_strong/function_subtype_local4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_local5_test.dart b/tests/language_strong/function_subtype_local5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_local5_test.dart
rename to tests/language_strong/function_subtype_local5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_local6_test.dart b/tests/language_strong/function_subtype_local6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_local6_test.dart
rename to tests/language_strong/function_subtype_local6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_named1_test.dart b/tests/language_strong/function_subtype_named1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_named1_test.dart
rename to tests/language_strong/function_subtype_named1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_named2_test.dart b/tests/language_strong/function_subtype_named2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_named2_test.dart
rename to tests/language_strong/function_subtype_named2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_not0_test.dart b/tests/language_strong/function_subtype_not0_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_not0_test.dart
rename to tests/language_strong/function_subtype_not0_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_not1_test.dart b/tests/language_strong/function_subtype_not1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_not1_test.dart
rename to tests/language_strong/function_subtype_not1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_not2_test.dart b/tests/language_strong/function_subtype_not2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_not2_test.dart
rename to tests/language_strong/function_subtype_not2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_not3_test.dart b/tests/language_strong/function_subtype_not3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_not3_test.dart
rename to tests/language_strong/function_subtype_not3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_null.dart b/tests/language_strong/function_subtype_null.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_null.dart
rename to tests/language_strong/function_subtype_null.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_optional1_test.dart b/tests/language_strong/function_subtype_optional1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_optional1_test.dart
rename to tests/language_strong/function_subtype_optional1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_optional2_test.dart b/tests/language_strong/function_subtype_optional2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_optional2_test.dart
rename to tests/language_strong/function_subtype_optional2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_regression_ddc_588_test.dart b/tests/language_strong/function_subtype_regression_ddc_588_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_regression_ddc_588_test.dart
rename to tests/language_strong/function_subtype_regression_ddc_588_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_setter0_test.dart b/tests/language_strong/function_subtype_setter0_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_setter0_test.dart
rename to tests/language_strong/function_subtype_setter0_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_simple0_test.dart b/tests/language_strong/function_subtype_simple0_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_simple0_test.dart
rename to tests/language_strong/function_subtype_simple0_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_simple1_test.dart b/tests/language_strong/function_subtype_simple1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_simple1_test.dart
rename to tests/language_strong/function_subtype_simple1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_simple2_test.dart b/tests/language_strong/function_subtype_simple2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_simple2_test.dart
rename to tests/language_strong/function_subtype_simple2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_top_level0_test.dart b/tests/language_strong/function_subtype_top_level0_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_top_level0_test.dart
rename to tests/language_strong/function_subtype_top_level0_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_top_level1_test.dart b/tests/language_strong/function_subtype_top_level1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_top_level1_test.dart
rename to tests/language_strong/function_subtype_top_level1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_typearg0_test.dart b/tests/language_strong/function_subtype_typearg0_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_typearg0_test.dart
rename to tests/language_strong/function_subtype_typearg0_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_typearg1_test.dart b/tests/language_strong/function_subtype_typearg1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_typearg1_test.dart
rename to tests/language_strong/function_subtype_typearg1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_typearg2_test.dart b/tests/language_strong/function_subtype_typearg2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_typearg2_test.dart
rename to tests/language_strong/function_subtype_typearg2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_typearg3_test.dart b/tests/language_strong/function_subtype_typearg3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_typearg3_test.dart
rename to tests/language_strong/function_subtype_typearg3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_subtype_typearg4_test.dart b/tests/language_strong/function_subtype_typearg4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_subtype_typearg4_test.dart
rename to tests/language_strong/function_subtype_typearg4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_syntax_test.dart b/tests/language_strong/function_syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_syntax_test.dart
rename to tests/language_strong/function_syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_test.dart b/tests/language_strong/function_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_test.dart
rename to tests/language_strong/function_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type2_test.dart b/tests/language_strong/function_type2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type2_test.dart
rename to tests/language_strong/function_type2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type3_test.dart b/tests/language_strong/function_type3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type3_test.dart
rename to tests/language_strong/function_type3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type_alias2_test.dart b/tests/language_strong/function_type_alias2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type_alias2_test.dart
rename to tests/language_strong/function_type_alias2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type_alias3_test.dart b/tests/language_strong/function_type_alias3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type_alias3_test.dart
rename to tests/language_strong/function_type_alias3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type_alias4_test.dart b/tests/language_strong/function_type_alias4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type_alias4_test.dart
rename to tests/language_strong/function_type_alias4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type_alias5_test.dart b/tests/language_strong/function_type_alias5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type_alias5_test.dart
rename to tests/language_strong/function_type_alias5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type_alias6_test.dart b/tests/language_strong/function_type_alias6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type_alias6_test.dart
rename to tests/language_strong/function_type_alias6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type_alias7_test.dart b/tests/language_strong/function_type_alias7_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type_alias7_test.dart
rename to tests/language_strong/function_type_alias7_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type_alias8_test.dart b/tests/language_strong/function_type_alias8_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type_alias8_test.dart
rename to tests/language_strong/function_type_alias8_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type_alias9_test.dart b/tests/language_strong/function_type_alias9_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type_alias9_test.dart
rename to tests/language_strong/function_type_alias9_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type_alias_test.dart b/tests/language_strong/function_type_alias_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type_alias_test.dart
rename to tests/language_strong/function_type_alias_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type_call_getter2_test.dart b/tests/language_strong/function_type_call_getter2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type_call_getter2_test.dart
rename to tests/language_strong/function_type_call_getter2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type_call_getter_test.dart b/tests/language_strong/function_type_call_getter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type_call_getter_test.dart
rename to tests/language_strong/function_type_call_getter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type_parameter2_negative_test.dart b/tests/language_strong/function_type_parameter2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type_parameter2_negative_test.dart
rename to tests/language_strong/function_type_parameter2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type_parameter2_test.dart b/tests/language_strong/function_type_parameter2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type_parameter2_test.dart
rename to tests/language_strong/function_type_parameter2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type_parameter_negative_test.dart b/tests/language_strong/function_type_parameter_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type_parameter_negative_test.dart
rename to tests/language_strong/function_type_parameter_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type_parameter_test.dart b/tests/language_strong/function_type_parameter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type_parameter_test.dart
rename to tests/language_strong/function_type_parameter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type_test.dart b/tests/language_strong/function_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type_test.dart
rename to tests/language_strong/function_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/function_type_this_parameter_test.dart b/tests/language_strong/function_type_this_parameter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/function_type_this_parameter_test.dart
rename to tests/language_strong/function_type_this_parameter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/gc_test.dart b/tests/language_strong/gc_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/gc_test.dart
rename to tests/language_strong/gc_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic2_test.dart b/tests/language_strong/generic2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic2_test.dart
rename to tests/language_strong/generic2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_async_star_test.dart b/tests/language_strong/generic_async_star_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_async_star_test.dart
rename to tests/language_strong/generic_async_star_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_async_test.dart b/tests/language_strong/generic_async_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_async_test.dart
rename to tests/language_strong/generic_async_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_closure_test.dart b/tests/language_strong/generic_closure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_closure_test.dart
rename to tests/language_strong/generic_closure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_constructor_mixin2_test.dart b/tests/language_strong/generic_constructor_mixin2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_constructor_mixin2_test.dart
rename to tests/language_strong/generic_constructor_mixin2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_constructor_mixin3_test.dart b/tests/language_strong/generic_constructor_mixin3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_constructor_mixin3_test.dart
rename to tests/language_strong/generic_constructor_mixin3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_constructor_mixin_test.dart b/tests/language_strong/generic_constructor_mixin_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_constructor_mixin_test.dart
rename to tests/language_strong/generic_constructor_mixin_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_creation_test.dart b/tests/language_strong/generic_creation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_creation_test.dart
rename to tests/language_strong/generic_creation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_deep_test.dart b/tests/language_strong/generic_deep_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_deep_test.dart
rename to tests/language_strong/generic_deep_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_field_mixin2_test.dart b/tests/language_strong/generic_field_mixin2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_field_mixin2_test.dart
rename to tests/language_strong/generic_field_mixin2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_field_mixin3_test.dart b/tests/language_strong/generic_field_mixin3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_field_mixin3_test.dart
rename to tests/language_strong/generic_field_mixin3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_field_mixin4_test.dart b/tests/language_strong/generic_field_mixin4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_field_mixin4_test.dart
rename to tests/language_strong/generic_field_mixin4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_field_mixin5_test.dart b/tests/language_strong/generic_field_mixin5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_field_mixin5_test.dart
rename to tests/language_strong/generic_field_mixin5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_field_mixin6_test.dart b/tests/language_strong/generic_field_mixin6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_field_mixin6_test.dart
rename to tests/language_strong/generic_field_mixin6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_field_mixin_test.dart b/tests/language_strong/generic_field_mixin_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_field_mixin_test.dart
rename to tests/language_strong/generic_field_mixin_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_inheritance_test.dart b/tests/language_strong/generic_inheritance_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_inheritance_test.dart
rename to tests/language_strong/generic_inheritance_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_instanceof.dart b/tests/language_strong/generic_instanceof.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_instanceof.dart
rename to tests/language_strong/generic_instanceof.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_instanceof2_test.dart b/tests/language_strong/generic_instanceof2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_instanceof2_test.dart
rename to tests/language_strong/generic_instanceof2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_instanceof3_test.dart b/tests/language_strong/generic_instanceof3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_instanceof3_test.dart
rename to tests/language_strong/generic_instanceof3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_instanceof4_test.dart b/tests/language_strong/generic_instanceof4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_instanceof4_test.dart
rename to tests/language_strong/generic_instanceof4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_instanceof5_test.dart b/tests/language_strong/generic_instanceof5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_instanceof5_test.dart
rename to tests/language_strong/generic_instanceof5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_instanceof_test.dart b/tests/language_strong/generic_instanceof_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_instanceof_test.dart
rename to tests/language_strong/generic_instanceof_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_is_check_test.dart b/tests/language_strong/generic_is_check_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_is_check_test.dart
rename to tests/language_strong/generic_is_check_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_list_checked_test.dart b/tests/language_strong/generic_list_checked_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_list_checked_test.dart
rename to tests/language_strong/generic_list_checked_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_native_test.dart b/tests/language_strong/generic_native_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_native_test.dart
rename to tests/language_strong/generic_native_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_object_type_test.dart b/tests/language_strong/generic_object_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_object_type_test.dart
rename to tests/language_strong/generic_object_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_parameterized_extends_test.dart b/tests/language_strong/generic_parameterized_extends_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_parameterized_extends_test.dart
rename to tests/language_strong/generic_parameterized_extends_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_self_reference_test.dart b/tests/language_strong/generic_self_reference_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_self_reference_test.dart
rename to tests/language_strong/generic_self_reference_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_sync_star_test.dart b/tests/language_strong/generic_sync_star_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_sync_star_test.dart
rename to tests/language_strong/generic_sync_star_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_syntax_test.dart b/tests/language_strong/generic_syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_syntax_test.dart
rename to tests/language_strong/generic_syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_tearoff_test.dart b/tests/language_strong/generic_tearoff_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_tearoff_test.dart
rename to tests/language_strong/generic_tearoff_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generic_test.dart b/tests/language_strong/generic_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generic_test.dart
rename to tests/language_strong/generic_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generics2_test.dart b/tests/language_strong/generics2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generics2_test.dart
rename to tests/language_strong/generics2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generics3_test.dart b/tests/language_strong/generics3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generics3_test.dart
rename to tests/language_strong/generics3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/generics_test.dart b/tests/language_strong/generics_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/generics_test.dart
rename to tests/language_strong/generics_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/get_set_syntax_test.dart b/tests/language_strong/get_set_syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/get_set_syntax_test.dart
rename to tests/language_strong/get_set_syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getter_closure_execution_order_test.dart b/tests/language_strong/getter_closure_execution_order_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getter_closure_execution_order_test.dart
rename to tests/language_strong/getter_closure_execution_order_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getter_declaration_negative_test.dart b/tests/language_strong/getter_declaration_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getter_declaration_negative_test.dart
rename to tests/language_strong/getter_declaration_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getter_no_setter2_test.dart b/tests/language_strong/getter_no_setter2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getter_no_setter2_test.dart
rename to tests/language_strong/getter_no_setter2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getter_no_setter_test.dart b/tests/language_strong/getter_no_setter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getter_no_setter_test.dart
rename to tests/language_strong/getter_no_setter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getter_override2_test.dart b/tests/language_strong/getter_override2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getter_override2_test.dart
rename to tests/language_strong/getter_override2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getter_override3_test.dart b/tests/language_strong/getter_override3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getter_override3_test.dart
rename to tests/language_strong/getter_override3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getter_override_test.dart b/tests/language_strong/getter_override_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getter_override_test.dart
rename to tests/language_strong/getter_override_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getter_parameters_test.dart b/tests/language_strong/getter_parameters_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getter_parameters_test.dart
rename to tests/language_strong/getter_parameters_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getter_setter_in_lib.dart b/tests/language_strong/getter_setter_in_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getter_setter_in_lib.dart
rename to tests/language_strong/getter_setter_in_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getter_setter_in_lib2.dart b/tests/language_strong/getter_setter_in_lib2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getter_setter_in_lib2.dart
rename to tests/language_strong/getter_setter_in_lib2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getter_setter_in_lib3.dart b/tests/language_strong/getter_setter_in_lib3.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getter_setter_in_lib3.dart
rename to tests/language_strong/getter_setter_in_lib3.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getter_setter_in_lib_test.dart b/tests/language_strong/getter_setter_in_lib_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getter_setter_in_lib_test.dart
rename to tests/language_strong/getter_setter_in_lib_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getter_setter_interceptor_test.dart b/tests/language_strong/getter_setter_interceptor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getter_setter_interceptor_test.dart
rename to tests/language_strong/getter_setter_interceptor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getter_setter_order_test.dart b/tests/language_strong/getter_setter_order_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getter_setter_order_test.dart
rename to tests/language_strong/getter_setter_order_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getters_setters2_test.dart b/tests/language_strong/getters_setters2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getters_setters2_test.dart
rename to tests/language_strong/getters_setters2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getters_setters_test.dart b/tests/language_strong/getters_setters_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getters_setters_test.dart
rename to tests/language_strong/getters_setters_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getters_setters_type2_test.dart b/tests/language_strong/getters_setters_type2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getters_setters_type2_test.dart
rename to tests/language_strong/getters_setters_type2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getters_setters_type3_test.dart b/tests/language_strong/getters_setters_type3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getters_setters_type3_test.dart
rename to tests/language_strong/getters_setters_type3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/getters_setters_type_test.dart b/tests/language_strong/getters_setters_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/getters_setters_type_test.dart
rename to tests/language_strong/getters_setters_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/guess_cid_test.dart b/tests/language_strong/guess_cid_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/guess_cid_test.dart
rename to tests/language_strong/guess_cid_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/gvn_field_access_test.dart b/tests/language_strong/gvn_field_access_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/gvn_field_access_test.dart
rename to tests/language_strong/gvn_field_access_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/gvn_interceptor_test.dart b/tests/language_strong/gvn_interceptor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/gvn_interceptor_test.dart
rename to tests/language_strong/gvn_interceptor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/gvn_test.dart b/tests/language_strong/gvn_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/gvn_test.dart
rename to tests/language_strong/gvn_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/hash_code_mangling_test.dart b/tests/language_strong/hash_code_mangling_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/hash_code_mangling_test.dart
rename to tests/language_strong/hash_code_mangling_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/hash_map_null_key_foreach_test.dart b/tests/language_strong/hash_map_null_key_foreach_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/hash_map_null_key_foreach_test.dart
rename to tests/language_strong/hash_map_null_key_foreach_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/hashcode_dynamic_test.dart b/tests/language_strong/hashcode_dynamic_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/hashcode_dynamic_test.dart
rename to tests/language_strong/hashcode_dynamic_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/hello_dart_test.dart b/tests/language_strong/hello_dart_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/hello_dart_test.dart
rename to tests/language_strong/hello_dart_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/hello_script_lib.dart b/tests/language_strong/hello_script_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/hello_script_lib.dart
rename to tests/language_strong/hello_script_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/hello_script_lib_source.dart b/tests/language_strong/hello_script_lib_source.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/hello_script_lib_source.dart
rename to tests/language_strong/hello_script_lib_source.dart
diff --git a/pkg/dev_compiler/test/codegen/language/hello_script_test.dart b/tests/language_strong/hello_script_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/hello_script_test.dart
rename to tests/language_strong/hello_script_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/hidden_import_lib.dart b/tests/language_strong/hidden_import_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/hidden_import_lib.dart
rename to tests/language_strong/hidden_import_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/hidden_import_test.dart b/tests/language_strong/hidden_import_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/hidden_import_test.dart
rename to tests/language_strong/hidden_import_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/identical_closure2_test.dart b/tests/language_strong/identical_closure2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/identical_closure2_test.dart
rename to tests/language_strong/identical_closure2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/identical_closure_test.dart b/tests/language_strong/identical_closure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/identical_closure_test.dart
rename to tests/language_strong/identical_closure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/identical_const_test.dart b/tests/language_strong/identical_const_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/identical_const_test.dart
rename to tests/language_strong/identical_const_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/identical_test.dart b/tests/language_strong/identical_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/identical_test.dart
rename to tests/language_strong/identical_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/if_and_test.dart b/tests/language_strong/if_and_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/if_and_test.dart
rename to tests/language_strong/if_and_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/if_null_assignment_behavior_test.dart b/tests/language_strong/if_null_assignment_behavior_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/if_null_assignment_behavior_test.dart
rename to tests/language_strong/if_null_assignment_behavior_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/if_null_assignment_helper.dart b/tests/language_strong/if_null_assignment_helper.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/if_null_assignment_helper.dart
rename to tests/language_strong/if_null_assignment_helper.dart
diff --git a/pkg/dev_compiler/test/codegen/language/if_null_assignment_static_test.dart b/tests/language_strong/if_null_assignment_static_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/if_null_assignment_static_test.dart
rename to tests/language_strong/if_null_assignment_static_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/if_null_behavior_test.dart b/tests/language_strong/if_null_behavior_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/if_null_behavior_test.dart
rename to tests/language_strong/if_null_behavior_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/if_null_evaluation_order_test.dart b/tests/language_strong/if_null_evaluation_order_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/if_null_evaluation_order_test.dart
rename to tests/language_strong/if_null_evaluation_order_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/if_null_precedence_test.dart b/tests/language_strong/if_null_precedence_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/if_null_precedence_test.dart
rename to tests/language_strong/if_null_precedence_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/if_test.dart b/tests/language_strong/if_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/if_test.dart
rename to tests/language_strong/if_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/illegal_declaration_test.dart b/tests/language_strong/illegal_declaration_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/illegal_declaration_test.dart
rename to tests/language_strong/illegal_declaration_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/illegal_initializer_test.dart b/tests/language_strong/illegal_initializer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/illegal_initializer_test.dart
rename to tests/language_strong/illegal_initializer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/illegal_invocation_lib.dart b/tests/language_strong/illegal_invocation_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/illegal_invocation_lib.dart
rename to tests/language_strong/illegal_invocation_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/illegal_invocation_test.dart b/tests/language_strong/illegal_invocation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/illegal_invocation_test.dart
rename to tests/language_strong/illegal_invocation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/implicit_closure1_test.dart b/tests/language_strong/implicit_closure1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/implicit_closure1_test.dart
rename to tests/language_strong/implicit_closure1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/implicit_closure2_test.dart b/tests/language_strong/implicit_closure2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/implicit_closure2_test.dart
rename to tests/language_strong/implicit_closure2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/implicit_closure_test.dart b/tests/language_strong/implicit_closure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/implicit_closure_test.dart
rename to tests/language_strong/implicit_closure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/implicit_scope_test.dart b/tests/language_strong/implicit_scope_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/implicit_scope_test.dart
rename to tests/language_strong/implicit_scope_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/implicit_super_constructor_call_test.dart b/tests/language_strong/implicit_super_constructor_call_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/implicit_super_constructor_call_test.dart
rename to tests/language_strong/implicit_super_constructor_call_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/implicit_super_constructor_test.dart b/tests/language_strong/implicit_super_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/implicit_super_constructor_test.dart
rename to tests/language_strong/implicit_super_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/implicit_this_test.dart b/tests/language_strong/implicit_this_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/implicit_this_test.dart
rename to tests/language_strong/implicit_this_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/implied_interface_test.dart b/tests/language_strong/implied_interface_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/implied_interface_test.dart
rename to tests/language_strong/implied_interface_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/import1_lib.dart b/tests/language_strong/import1_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/import1_lib.dart
rename to tests/language_strong/import1_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/import_collection_no_prefix_test.dart b/tests/language_strong/import_collection_no_prefix_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/import_collection_no_prefix_test.dart
rename to tests/language_strong/import_collection_no_prefix_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/import_combinators_negative_test.dart b/tests/language_strong/import_combinators_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/import_combinators_negative_test.dart
rename to tests/language_strong/import_combinators_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/import_combinators_part.dart b/tests/language_strong/import_combinators_part.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/import_combinators_part.dart
rename to tests/language_strong/import_combinators_part.dart
diff --git a/pkg/dev_compiler/test/codegen/language/import_combinators_test.dart b/tests/language_strong/import_combinators_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/import_combinators_test.dart
rename to tests/language_strong/import_combinators_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/import_core_no_prefix_test.dart b/tests/language_strong/import_core_no_prefix_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/import_core_no_prefix_test.dart
rename to tests/language_strong/import_core_no_prefix_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/import_core_prefix_test.dart b/tests/language_strong/import_core_prefix_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/import_core_prefix_test.dart
rename to tests/language_strong/import_core_prefix_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/import_core_test.dart b/tests/language_strong/import_core_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/import_core_test.dart
rename to tests/language_strong/import_core_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/import_private_test.dart b/tests/language_strong/import_private_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/import_private_test.dart
rename to tests/language_strong/import_private_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/import_self_test.dart b/tests/language_strong/import_self_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/import_self_test.dart
rename to tests/language_strong/import_self_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/import_show_lib.dart b/tests/language_strong/import_show_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/import_show_lib.dart
rename to tests/language_strong/import_show_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/import_show_test.dart b/tests/language_strong/import_show_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/import_show_test.dart
rename to tests/language_strong/import_show_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/incr_op_test.dart b/tests/language_strong/incr_op_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/incr_op_test.dart
rename to tests/language_strong/incr_op_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/index_test.dart b/tests/language_strong/index_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/index_test.dart
rename to tests/language_strong/index_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/indirect_const_null_test.dart b/tests/language_strong/indirect_const_null_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/indirect_const_null_test.dart
rename to tests/language_strong/indirect_const_null_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inference_captured_variable2_test.dart b/tests/language_strong/inference_captured_variable2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inference_captured_variable2_test.dart
rename to tests/language_strong/inference_captured_variable2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inference_captured_variable_test.dart b/tests/language_strong/inference_captured_variable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inference_captured_variable_test.dart
rename to tests/language_strong/inference_captured_variable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inference_list_or_null_test.dart b/tests/language_strong/inference_list_or_null_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inference_list_or_null_test.dart
rename to tests/language_strong/inference_list_or_null_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inference_mixin_field_test.dart b/tests/language_strong/inference_mixin_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inference_mixin_field_test.dart
rename to tests/language_strong/inference_mixin_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inference_super_constructor_call_test.dart b/tests/language_strong/inference_super_constructor_call_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inference_super_constructor_call_test.dart
rename to tests/language_strong/inference_super_constructor_call_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inferrer_closure_test.dart b/tests/language_strong/inferrer_closure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inferrer_closure_test.dart
rename to tests/language_strong/inferrer_closure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inferrer_constructor2_test.dart b/tests/language_strong/inferrer_constructor2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inferrer_constructor2_test.dart
rename to tests/language_strong/inferrer_constructor2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inferrer_constructor3_test.dart b/tests/language_strong/inferrer_constructor3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inferrer_constructor3_test.dart
rename to tests/language_strong/inferrer_constructor3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inferrer_constructor4_test.dart b/tests/language_strong/inferrer_constructor4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inferrer_constructor4_test.dart
rename to tests/language_strong/inferrer_constructor4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inferrer_constructor5_test.dart b/tests/language_strong/inferrer_constructor5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inferrer_constructor5_test.dart
rename to tests/language_strong/inferrer_constructor5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inferrer_constructor_test.dart b/tests/language_strong/inferrer_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inferrer_constructor_test.dart
rename to tests/language_strong/inferrer_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inferrer_named_parameter_test.dart b/tests/language_strong/inferrer_named_parameter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inferrer_named_parameter_test.dart
rename to tests/language_strong/inferrer_named_parameter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inferrer_synthesized_constructor_test.dart b/tests/language_strong/inferrer_synthesized_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inferrer_synthesized_constructor_test.dart
rename to tests/language_strong/inferrer_synthesized_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inferrer_synthesized_super_constructor2_test.dart b/tests/language_strong/inferrer_synthesized_super_constructor2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inferrer_synthesized_super_constructor2_test.dart
rename to tests/language_strong/inferrer_synthesized_super_constructor2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inferrer_synthesized_super_constructor_test.dart b/tests/language_strong/inferrer_synthesized_super_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inferrer_synthesized_super_constructor_test.dart
rename to tests/language_strong/inferrer_synthesized_super_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inferrer_this_access_test.dart b/tests/language_strong/inferrer_this_access_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inferrer_this_access_test.dart
rename to tests/language_strong/inferrer_this_access_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/infinite_switch_label_test.dart b/tests/language_strong/infinite_switch_label_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/infinite_switch_label_test.dart
rename to tests/language_strong/infinite_switch_label_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/infinity_test.dart b/tests/language_strong/infinity_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/infinity_test.dart
rename to tests/language_strong/infinity_test.dart
diff --git a/tests/language_strong/initializing_formal_access_test.dart b/tests/language_strong/initializing_formal_access_test.dart
new file mode 100644
index 0000000..71f445e
--- /dev/null
+++ b/tests/language_strong/initializing_formal_access_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// DartOptions=--initializing-formal-access
+// VMOptions=--initializing-formal-access
+
+import "package:expect/expect.dart";
+
+class C {
+  final int x;
+  final int y;
+
+  const C.constant(this.x) : y = x + 1;
+
+  C(this.x) : y = x + 1 {
+    int z = x + 2;
+    assert(z == y + 1);
+  }
+}
+
+main() {
+  C c = new C(2);
+  Expect.equals(c.x, 2);
+  Expect.equals(c.y, 3);
+  const C cc = const C.constant(4);
+  Expect.equals(cc.x, 4);
+  Expect.equals(cc.y, 5);
+}
diff --git a/tests/language_strong/initializing_formal_capture_test.dart b/tests/language_strong/initializing_formal_capture_test.dart
new file mode 100644
index 0000000..8257d4f
--- /dev/null
+++ b/tests/language_strong/initializing_formal_capture_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// DartOptions=--initializing-formal-access
+// VMOptions=--initializing-formal-access
+
+import "package:expect/expect.dart";
+
+class A {
+  var x, y;
+  A(this.x) : y = (() => x);
+}
+
+main() {
+  A a = new A(2);
+  a.x = 3;
+  Expect.equals(a.x, 3);
+  Expect.equals(a.y(), 2);
+}
diff --git a/tests/language_strong/initializing_formal_final_test.dart b/tests/language_strong/initializing_formal_final_test.dart
new file mode 100644
index 0000000..3df4ba5
--- /dev/null
+++ b/tests/language_strong/initializing_formal_final_test.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// DartOptions=--initializing-formal-access
+// VMOptions=--initializing-formal-access
+
+import "package:expect/expect.dart";
+
+class A {
+  var x, y;
+  // This should cause a warning because `x` is final when
+  // accessed as an initializing formal.
+  A(this.x) : y = (() { x = 3; });
+}
+
+main() {
+  A a = new A(2);
+  Expect.equals(a.x, 2);
+  Expect.throws(() => a.y(), (e) => e is NoSuchMethodError);
+}
diff --git a/tests/language_strong/initializing_formal_promotion_test.dart b/tests/language_strong/initializing_formal_promotion_test.dart
new file mode 100644
index 0000000..89ec79e
--- /dev/null
+++ b/tests/language_strong/initializing_formal_promotion_test.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// DartOptions=--initializing-formal-access
+// VMOptions=--initializing-formal-access
+
+import "package:expect/expect.dart";
+
+class B {}
+
+class A {
+  B x, y;
+  // Promotion occurs for the initializing formal because C <: B.
+  A(this.x) : y = (x is C) ? x.x : x;
+}
+
+class C extends A implements B {
+  C(B x) : super(x);
+}
+
+main() {
+  C c = new C(null);
+  C cc = new C(c);
+  Expect.equals(c.y, null);
+  Expect.equals(cc.y, null);
+}
diff --git a/tests/language_strong/initializing_formal_scope_test.dart b/tests/language_strong/initializing_formal_scope_test.dart
new file mode 100644
index 0000000..5544a8e
--- /dev/null
+++ b/tests/language_strong/initializing_formal_scope_test.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// DartOptions=--initializing-formal-access
+// VMOptions=--initializing-formal-access
+
+import "package:expect/expect.dart";
+
+// Duplicate definition checks for `this.x` will check the scopes associated
+// with the constructor, not all enclosing scopes; so this is not a conflict.
+var x;
+
+class A {
+  var x;
+  A(this.x) {
+    // In the body the field is in scope, not the initializing formal;
+    // so we can use the setter.
+    x += 1;
+  }
+}
+
+main() {
+  A a = new A(2);
+  Expect.equals(a.x, 3);
+}
diff --git a/tests/language_strong/initializing_formal_type_test.dart b/tests/language_strong/initializing_formal_type_test.dart
new file mode 100644
index 0000000..af44444
--- /dev/null
+++ b/tests/language_strong/initializing_formal_type_test.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// DartOptions=--initializing-formal-access
+// VMOptions=--initializing-formal-access
+
+import "package:expect/expect.dart";
+
+class A {
+  num x;
+  double y;
+  // Finding the type of an initializing formal: should cause a warning
+  // in the initializer but not the body, because the former has type
+  // `int` and the latter has type `num`.
+  A(int this.x) : y = x {
+    y = x;
+  }
+}
+
+main() {
+  A a = new A(null);
+  Expect.equals(a.x, null);
+  Expect.equals(a.y, null);
+}
diff --git a/pkg/dev_compiler/test/codegen/language/inline_add_constants_to_initial_env_test.dart b/tests/language_strong/inline_add_constants_to_initial_env_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inline_add_constants_to_initial_env_test.dart
rename to tests/language_strong/inline_add_constants_to_initial_env_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inline_argument_test.dart b/tests/language_strong/inline_argument_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inline_argument_test.dart
rename to tests/language_strong/inline_argument_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inline_closure_with_constant_arguments_test.dart b/tests/language_strong/inline_closure_with_constant_arguments_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inline_closure_with_constant_arguments_test.dart
rename to tests/language_strong/inline_closure_with_constant_arguments_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inline_effect_context_test.dart b/tests/language_strong/inline_effect_context_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inline_effect_context_test.dart
rename to tests/language_strong/inline_effect_context_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inline_getter_test.dart b/tests/language_strong/inline_getter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inline_getter_test.dart
rename to tests/language_strong/inline_getter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inline_in_for_initializer_and_bailout_test.dart b/tests/language_strong/inline_in_for_initializer_and_bailout_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inline_in_for_initializer_and_bailout_test.dart
rename to tests/language_strong/inline_in_for_initializer_and_bailout_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inline_super_field_lib.dart b/tests/language_strong/inline_super_field_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inline_super_field_lib.dart
rename to tests/language_strong/inline_super_field_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inline_super_field_test.dart b/tests/language_strong/inline_super_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inline_super_field_test.dart
rename to tests/language_strong/inline_super_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inline_super_part.dart b/tests/language_strong/inline_super_part.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inline_super_part.dart
rename to tests/language_strong/inline_super_part.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inline_super_test.dart b/tests/language_strong/inline_super_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inline_super_test.dart
rename to tests/language_strong/inline_super_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inline_test.dart b/tests/language_strong/inline_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inline_test.dart
rename to tests/language_strong/inline_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inline_test_context_test.dart b/tests/language_strong/inline_test_context_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inline_test_context_test.dart
rename to tests/language_strong/inline_test_context_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inline_value_context_test.dart b/tests/language_strong/inline_value_context_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inline_value_context_test.dart
rename to tests/language_strong/inline_value_context_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inlined_conditional_test.dart b/tests/language_strong/inlined_conditional_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inlined_conditional_test.dart
rename to tests/language_strong/inlined_conditional_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inlined_throw_test.dart b/tests/language_strong/inlined_throw_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inlined_throw_test.dart
rename to tests/language_strong/inlined_throw_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inst_field_initializer1_negative_test.dart b/tests/language_strong/inst_field_initializer1_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inst_field_initializer1_negative_test.dart
rename to tests/language_strong/inst_field_initializer1_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/inst_field_initializer_test.dart b/tests/language_strong/inst_field_initializer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/inst_field_initializer_test.dart
rename to tests/language_strong/inst_field_initializer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/instance_call_wrong_argument_count_negative_test.dart b/tests/language_strong/instance_call_wrong_argument_count_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/instance_call_wrong_argument_count_negative_test.dart
rename to tests/language_strong/instance_call_wrong_argument_count_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/instance_compound_assignment_operator_test.dart b/tests/language_strong/instance_compound_assignment_operator_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/instance_compound_assignment_operator_test.dart
rename to tests/language_strong/instance_compound_assignment_operator_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/instance_creation_in_function_annotation_test.dart b/tests/language_strong/instance_creation_in_function_annotation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/instance_creation_in_function_annotation_test.dart
rename to tests/language_strong/instance_creation_in_function_annotation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/instance_field_initializer_test.dart b/tests/language_strong/instance_field_initializer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/instance_field_initializer_test.dart
rename to tests/language_strong/instance_field_initializer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/instance_incr_deopt_test.dart b/tests/language_strong/instance_incr_deopt_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/instance_incr_deopt_test.dart
rename to tests/language_strong/instance_incr_deopt_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/instance_inline_test.dart b/tests/language_strong/instance_inline_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/instance_inline_test.dart
rename to tests/language_strong/instance_inline_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/instance_method2_negative_test.dart b/tests/language_strong/instance_method2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/instance_method2_negative_test.dart
rename to tests/language_strong/instance_method2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/instance_method_negative_test.dart b/tests/language_strong/instance_method_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/instance_method_negative_test.dart
rename to tests/language_strong/instance_method_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/instanceof2_test.dart b/tests/language_strong/instanceof2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/instanceof2_test.dart
rename to tests/language_strong/instanceof2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/instanceof3_test.dart b/tests/language_strong/instanceof3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/instanceof3_test.dart
rename to tests/language_strong/instanceof3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/instanceof4_test.dart b/tests/language_strong/instanceof4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/instanceof4_test.dart
rename to tests/language_strong/instanceof4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/instanceof_optimized_test.dart b/tests/language_strong/instanceof_optimized_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/instanceof_optimized_test.dart
rename to tests/language_strong/instanceof_optimized_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/instanceof_test.dart b/tests/language_strong/instanceof_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/instanceof_test.dart
rename to tests/language_strong/instanceof_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/instantiate_type_variable_test.dart b/tests/language_strong/instantiate_type_variable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/instantiate_type_variable_test.dart
rename to tests/language_strong/instantiate_type_variable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/int2_test.dart b/tests/language_strong/int2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/int2_test.dart
rename to tests/language_strong/int2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/int_test.dart b/tests/language_strong/int_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/int_test.dart
rename to tests/language_strong/int_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/integer_division_by_zero_test.dart b/tests/language_strong/integer_division_by_zero_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/integer_division_by_zero_test.dart
rename to tests/language_strong/integer_division_by_zero_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interceptor2_test.dart b/tests/language_strong/interceptor2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interceptor2_test.dart
rename to tests/language_strong/interceptor2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interceptor3_test.dart b/tests/language_strong/interceptor3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interceptor3_test.dart
rename to tests/language_strong/interceptor3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interceptor4_test.dart b/tests/language_strong/interceptor4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interceptor4_test.dart
rename to tests/language_strong/interceptor4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interceptor5_test.dart b/tests/language_strong/interceptor5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interceptor5_test.dart
rename to tests/language_strong/interceptor5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interceptor6_test.dart b/tests/language_strong/interceptor6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interceptor6_test.dart
rename to tests/language_strong/interceptor6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interceptor7_test.dart b/tests/language_strong/interceptor7_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interceptor7_test.dart
rename to tests/language_strong/interceptor7_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interceptor8_test.dart b/tests/language_strong/interceptor8_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interceptor8_test.dart
rename to tests/language_strong/interceptor8_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interceptor9_test.dart b/tests/language_strong/interceptor9_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interceptor9_test.dart
rename to tests/language_strong/interceptor9_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interceptor_test.dart b/tests/language_strong/interceptor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interceptor_test.dart
rename to tests/language_strong/interceptor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interface2_negative_test.dart b/tests/language_strong/interface2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interface2_negative_test.dart
rename to tests/language_strong/interface2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interface_constants_test.dart b/tests/language_strong/interface_constants_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interface_constants_test.dart
rename to tests/language_strong/interface_constants_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interface_cycle_test.dart b/tests/language_strong/interface_cycle_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interface_cycle_test.dart
rename to tests/language_strong/interface_cycle_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interface_inherit_field_test.dart b/tests/language_strong/interface_inherit_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interface_inherit_field_test.dart
rename to tests/language_strong/interface_inherit_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interface_injection1_negative_test.dart b/tests/language_strong/interface_injection1_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interface_injection1_negative_test.dart
rename to tests/language_strong/interface_injection1_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interface_injection2_negative_test.dart b/tests/language_strong/interface_injection2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interface_injection2_negative_test.dart
rename to tests/language_strong/interface_injection2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interface_static_method_negative_test.dart b/tests/language_strong/interface_static_method_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interface_static_method_negative_test.dart
rename to tests/language_strong/interface_static_method_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interface_static_non_final_fields_negative_test.dart b/tests/language_strong/interface_static_non_final_fields_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interface_static_non_final_fields_negative_test.dart
rename to tests/language_strong/interface_static_non_final_fields_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/interface_test.dart b/tests/language_strong/interface_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/interface_test.dart
rename to tests/language_strong/interface_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/internal_library_test.dart b/tests/language_strong/internal_library_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/internal_library_test.dart
rename to tests/language_strong/internal_library_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/intrinsified_methods_test.dart b/tests/language_strong/intrinsified_methods_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/intrinsified_methods_test.dart
rename to tests/language_strong/intrinsified_methods_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/invocation_mirror2_test.dart b/tests/language_strong/invocation_mirror2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/invocation_mirror2_test.dart
rename to tests/language_strong/invocation_mirror2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/invocation_mirror_invoke_on2_test.dart b/tests/language_strong/invocation_mirror_invoke_on2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/invocation_mirror_invoke_on2_test.dart
rename to tests/language_strong/invocation_mirror_invoke_on2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/invocation_mirror_invoke_on_test.dart b/tests/language_strong/invocation_mirror_invoke_on_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/invocation_mirror_invoke_on_test.dart
rename to tests/language_strong/invocation_mirror_invoke_on_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/invocation_mirror_test.dart b/tests/language_strong/invocation_mirror_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/invocation_mirror_test.dart
rename to tests/language_strong/invocation_mirror_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/is_function_test.dart b/tests/language_strong/is_function_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/is_function_test.dart
rename to tests/language_strong/is_function_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/is_interfaces2_test.dart b/tests/language_strong/is_interfaces2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/is_interfaces2_test.dart
rename to tests/language_strong/is_interfaces2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/is_interfaces_test.dart b/tests/language_strong/is_interfaces_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/is_interfaces_test.dart
rename to tests/language_strong/is_interfaces_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/is_malformed_type_test.dart b/tests/language_strong/is_malformed_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/is_malformed_type_test.dart
rename to tests/language_strong/is_malformed_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/is_nan_test.dart b/tests/language_strong/is_nan_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/is_nan_test.dart
rename to tests/language_strong/is_nan_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/is_not_class1_negative_test.dart b/tests/language_strong/is_not_class1_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/is_not_class1_negative_test.dart
rename to tests/language_strong/is_not_class1_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/is_not_class2_test.dart b/tests/language_strong/is_not_class2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/is_not_class2_test.dart
rename to tests/language_strong/is_not_class2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/is_not_class4_negative_test.dart b/tests/language_strong/is_not_class4_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/is_not_class4_negative_test.dart
rename to tests/language_strong/is_not_class4_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/is_object_test.dart b/tests/language_strong/is_object_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/is_object_test.dart
rename to tests/language_strong/is_object_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/is_operator_clash_test.dart b/tests/language_strong/is_operator_clash_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/is_operator_clash_test.dart
rename to tests/language_strong/is_operator_clash_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/is_operator_test.dart b/tests/language_strong/is_operator_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/is_operator_test.dart
rename to tests/language_strong/is_operator_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/isnot_malformed_type_test.dart b/tests/language_strong/isnot_malformed_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/isnot_malformed_type_test.dart
rename to tests/language_strong/isnot_malformed_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue10204_test.dart b/tests/language_strong/issue10204_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue10204_test.dart
rename to tests/language_strong/issue10204_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue10321_test.dart b/tests/language_strong/issue10321_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue10321_test.dart
rename to tests/language_strong/issue10321_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue10561_test.dart b/tests/language_strong/issue10561_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue10561_test.dart
rename to tests/language_strong/issue10561_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue10581_test.dart b/tests/language_strong/issue10581_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue10581_test.dart
rename to tests/language_strong/issue10581_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue10721_test.dart b/tests/language_strong/issue10721_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue10721_test.dart
rename to tests/language_strong/issue10721_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue10747_test.dart b/tests/language_strong/issue10747_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue10747_test.dart
rename to tests/language_strong/issue10747_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue10783_test.dart b/tests/language_strong/issue10783_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue10783_test.dart
rename to tests/language_strong/issue10783_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue11724_test.dart b/tests/language_strong/issue11724_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue11724_test.dart
rename to tests/language_strong/issue11724_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue11793_test.dart b/tests/language_strong/issue11793_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue11793_test.dart
rename to tests/language_strong/issue11793_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue12023_test.dart b/tests/language_strong/issue12023_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue12023_test.dart
rename to tests/language_strong/issue12023_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue12284_test.dart b/tests/language_strong/issue12284_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue12284_test.dart
rename to tests/language_strong/issue12284_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue12288_test.dart b/tests/language_strong/issue12288_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue12288_test.dart
rename to tests/language_strong/issue12288_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue12336_test.dart b/tests/language_strong/issue12336_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue12336_test.dart
rename to tests/language_strong/issue12336_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue13179_test.dart b/tests/language_strong/issue13179_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue13179_test.dart
rename to tests/language_strong/issue13179_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue13474_test.dart b/tests/language_strong/issue13474_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue13474_test.dart
rename to tests/language_strong/issue13474_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue13556_test.dart b/tests/language_strong/issue13556_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue13556_test.dart
rename to tests/language_strong/issue13556_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue1363_lib.dart b/tests/language_strong/issue1363_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue1363_lib.dart
rename to tests/language_strong/issue1363_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue1363_test.dart b/tests/language_strong/issue1363_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue1363_test.dart
rename to tests/language_strong/issue1363_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue13673_test.dart b/tests/language_strong/issue13673_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue13673_test.dart
rename to tests/language_strong/issue13673_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue14014_2_test.dart b/tests/language_strong/issue14014_2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue14014_2_test.dart
rename to tests/language_strong/issue14014_2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue14014_3_test.dart b/tests/language_strong/issue14014_3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue14014_3_test.dart
rename to tests/language_strong/issue14014_3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue14014_test.dart b/tests/language_strong/issue14014_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue14014_test.dart
rename to tests/language_strong/issue14014_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue14242_test.dart b/tests/language_strong/issue14242_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue14242_test.dart
rename to tests/language_strong/issue14242_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue15606_test.dart b/tests/language_strong/issue15606_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue15606_test.dart
rename to tests/language_strong/issue15606_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue15702_test.dart b/tests/language_strong/issue15702_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue15702_test.dart
rename to tests/language_strong/issue15702_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue15720_test.dart b/tests/language_strong/issue15720_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue15720_test.dart
rename to tests/language_strong/issue15720_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue1578_negative_test.dart b/tests/language_strong/issue1578_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue1578_negative_test.dart
rename to tests/language_strong/issue1578_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue18628_1_test.dart b/tests/language_strong/issue18628_1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue18628_1_test.dart
rename to tests/language_strong/issue18628_1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue18628_2_test.dart b/tests/language_strong/issue18628_2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue18628_2_test.dart
rename to tests/language_strong/issue18628_2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue20476_test.dart b/tests/language_strong/issue20476_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue20476_test.dart
rename to tests/language_strong/issue20476_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue21079_test.dart b/tests/language_strong/issue21079_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue21079_test.dart
rename to tests/language_strong/issue21079_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue21159_test.dart b/tests/language_strong/issue21159_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue21159_test.dart
rename to tests/language_strong/issue21159_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue21957_test.dart b/tests/language_strong/issue21957_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue21957_test.dart
rename to tests/language_strong/issue21957_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue22800_test.dart b/tests/language_strong/issue22800_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue22800_test.dart
rename to tests/language_strong/issue22800_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue23244_test.dart b/tests/language_strong/issue23244_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue23244_test.dart
rename to tests/language_strong/issue23244_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue3806_test.dart b/tests/language_strong/issue3806_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue3806_test.dart
rename to tests/language_strong/issue3806_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue4157508_test.dart b/tests/language_strong/issue4157508_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue4157508_test.dart
rename to tests/language_strong/issue4157508_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue4295001_test.dart b/tests/language_strong/issue4295001_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue4295001_test.dart
rename to tests/language_strong/issue4295001_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue4515170_test.dart b/tests/language_strong/issue4515170_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue4515170_test.dart
rename to tests/language_strong/issue4515170_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue7513_test.dart b/tests/language_strong/issue7513_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue7513_test.dart
rename to tests/language_strong/issue7513_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue7525_test.dart b/tests/language_strong/issue7525_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue7525_test.dart
rename to tests/language_strong/issue7525_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue9602_other.dart b/tests/language_strong/issue9602_other.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue9602_other.dart
rename to tests/language_strong/issue9602_other.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue9602_test.dart b/tests/language_strong/issue9602_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue9602_test.dart
rename to tests/language_strong/issue9602_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue9664_test.dart b/tests/language_strong/issue9664_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue9664_test.dart
rename to tests/language_strong/issue9664_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue9687_test.dart b/tests/language_strong/issue9687_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue9687_test.dart
rename to tests/language_strong/issue9687_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue9939_test.dart b/tests/language_strong/issue9939_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue9939_test.dart
rename to tests/language_strong/issue9939_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue9949_test.dart b/tests/language_strong/issue9949_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue9949_test.dart
rename to tests/language_strong/issue9949_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib1.dart b/tests/language_strong/issue_1751477_lib1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib1.dart
rename to tests/language_strong/issue_1751477_lib1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib11.dart b/tests/language_strong/issue_1751477_lib11.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib11.dart
rename to tests/language_strong/issue_1751477_lib11.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib2.dart b/tests/language_strong/issue_1751477_lib2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib2.dart
rename to tests/language_strong/issue_1751477_lib2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib21.dart b/tests/language_strong/issue_1751477_lib21.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib21.dart
rename to tests/language_strong/issue_1751477_lib21.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib3.dart b/tests/language_strong/issue_1751477_lib3.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib3.dart
rename to tests/language_strong/issue_1751477_lib3.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib31.dart b/tests/language_strong/issue_1751477_lib31.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib31.dart
rename to tests/language_strong/issue_1751477_lib31.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib4.dart b/tests/language_strong/issue_1751477_lib4.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib4.dart
rename to tests/language_strong/issue_1751477_lib4.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib41.dart b/tests/language_strong/issue_1751477_lib41.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib41.dart
rename to tests/language_strong/issue_1751477_lib41.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib5.dart b/tests/language_strong/issue_1751477_lib5.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib5.dart
rename to tests/language_strong/issue_1751477_lib5.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib51.dart b/tests/language_strong/issue_1751477_lib51.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib51.dart
rename to tests/language_strong/issue_1751477_lib51.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib6.dart b/tests/language_strong/issue_1751477_lib6.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib6.dart
rename to tests/language_strong/issue_1751477_lib6.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib61.dart b/tests/language_strong/issue_1751477_lib61.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib61.dart
rename to tests/language_strong/issue_1751477_lib61.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib7.dart b/tests/language_strong/issue_1751477_lib7.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib7.dart
rename to tests/language_strong/issue_1751477_lib7.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib71.dart b/tests/language_strong/issue_1751477_lib71.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib71.dart
rename to tests/language_strong/issue_1751477_lib71.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib8.dart b/tests/language_strong/issue_1751477_lib8.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib8.dart
rename to tests/language_strong/issue_1751477_lib8.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib81.dart b/tests/language_strong/issue_1751477_lib81.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib81.dart
rename to tests/language_strong/issue_1751477_lib81.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib9.dart b/tests/language_strong/issue_1751477_lib9.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib9.dart
rename to tests/language_strong/issue_1751477_lib9.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_lib91.dart b/tests/language_strong/issue_1751477_lib91.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_lib91.dart
rename to tests/language_strong/issue_1751477_lib91.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_1751477_test.dart b/tests/language_strong/issue_1751477_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_1751477_test.dart
rename to tests/language_strong/issue_1751477_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_22780_test.dart b/tests/language_strong/issue_22780_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_22780_test.dart
rename to tests/language_strong/issue_22780_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/issue_23914_test.dart b/tests/language_strong/issue_23914_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/issue_23914_test.dart
rename to tests/language_strong/issue_23914_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/js_properties_test.dart b/tests/language_strong/js_properties_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/js_properties_test.dart
rename to tests/language_strong/js_properties_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/keyword_type_expression_test.dart b/tests/language_strong/keyword_type_expression_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/keyword_type_expression_test.dart
rename to tests/language_strong/keyword_type_expression_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/label2_negative_test.dart b/tests/language_strong/label2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/label2_negative_test.dart
rename to tests/language_strong/label2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/label3_negative_test.dart b/tests/language_strong/label3_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/label3_negative_test.dart
rename to tests/language_strong/label3_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/label5_negative_test.dart b/tests/language_strong/label5_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/label5_negative_test.dart
rename to tests/language_strong/label5_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/label6_negative_test.dart b/tests/language_strong/label6_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/label6_negative_test.dart
rename to tests/language_strong/label6_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/label8_negative_test.dart b/tests/language_strong/label8_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/label8_negative_test.dart
rename to tests/language_strong/label8_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/label_test.dart b/tests/language_strong/label_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/label_test.dart
rename to tests/language_strong/label_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/large_class_declaration_test.dart b/tests/language_strong/large_class_declaration_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/large_class_declaration_test.dart
rename to tests/language_strong/large_class_declaration_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/large_implicit_getter_test.dart b/tests/language_strong/large_implicit_getter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/large_implicit_getter_test.dart
rename to tests/language_strong/large_implicit_getter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/larger_implicit_getter_test.dart b/tests/language_strong/larger_implicit_getter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/larger_implicit_getter_test.dart
rename to tests/language_strong/larger_implicit_getter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/lazy_map_test.dart b/tests/language_strong/lazy_map_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/lazy_map_test.dart
rename to tests/language_strong/lazy_map_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/lazy_static2_test.dart b/tests/language_strong/lazy_static2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/lazy_static2_test.dart
rename to tests/language_strong/lazy_static2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/lazy_static3_test.dart b/tests/language_strong/lazy_static3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/lazy_static3_test.dart
rename to tests/language_strong/lazy_static3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/lazy_static4_test.dart b/tests/language_strong/lazy_static4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/lazy_static4_test.dart
rename to tests/language_strong/lazy_static4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/lazy_static5_test.dart b/tests/language_strong/lazy_static5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/lazy_static5_test.dart
rename to tests/language_strong/lazy_static5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/lazy_static6_src.dart b/tests/language_strong/lazy_static6_src.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/lazy_static6_src.dart
rename to tests/language_strong/lazy_static6_src.dart
diff --git a/pkg/dev_compiler/test/codegen/language/lazy_static6_test.dart b/tests/language_strong/lazy_static6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/lazy_static6_test.dart
rename to tests/language_strong/lazy_static6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/lazy_static7_test.dart b/tests/language_strong/lazy_static7_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/lazy_static7_test.dart
rename to tests/language_strong/lazy_static7_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/lazy_static_test.dart b/tests/language_strong/lazy_static_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/lazy_static_test.dart
rename to tests/language_strong/lazy_static_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/least_upper_bound_expansive_test.dart b/tests/language_strong/least_upper_bound_expansive_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/least_upper_bound_expansive_test.dart
rename to tests/language_strong/least_upper_bound_expansive_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/least_upper_bound_test.dart b/tests/language_strong/least_upper_bound_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/least_upper_bound_test.dart
rename to tests/language_strong/least_upper_bound_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/left_shift_test.dart b/tests/language_strong/left_shift_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/left_shift_test.dart
rename to tests/language_strong/left_shift_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library1.dart b/tests/language_strong/library1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library1.dart
rename to tests/language_strong/library1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library10.dart b/tests/language_strong/library10.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library10.dart
rename to tests/language_strong/library10.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library11.dart b/tests/language_strong/library11.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library11.dart
rename to tests/language_strong/library11.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library12.dart b/tests/language_strong/library12.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library12.dart
rename to tests/language_strong/library12.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library1_lib.dart b/tests/language_strong/library1_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library1_lib.dart
rename to tests/language_strong/library1_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library1_lib.lib b/tests/language_strong/library1_lib.lib
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library1_lib.lib
rename to tests/language_strong/library1_lib.lib
diff --git a/pkg/dev_compiler/test/codegen/language/library1_test.dart b/tests/language_strong/library1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library1_test.dart
rename to tests/language_strong/library1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library2.dart b/tests/language_strong/library2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library2.dart
rename to tests/language_strong/library2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library3.dart b/tests/language_strong/library3.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library3.dart
rename to tests/language_strong/library3.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library4.dart b/tests/language_strong/library4.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library4.dart
rename to tests/language_strong/library4.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library5_test.dart b/tests/language_strong/library5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library5_test.dart
rename to tests/language_strong/library5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library5a.dart b/tests/language_strong/library5a.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library5a.dart
rename to tests/language_strong/library5a.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library5b.dart b/tests/language_strong/library5b.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library5b.dart
rename to tests/language_strong/library5b.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library6.dart b/tests/language_strong/library6.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library6.dart
rename to tests/language_strong/library6.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_a.dart b/tests/language_strong/library_a.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_a.dart
rename to tests/language_strong/library_a.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_ambiguous_test.dart b/tests/language_strong/library_ambiguous_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_ambiguous_test.dart
rename to tests/language_strong/library_ambiguous_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_b.dart b/tests/language_strong/library_b.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_b.dart
rename to tests/language_strong/library_b.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_c.dart b/tests/language_strong/library_c.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_c.dart
rename to tests/language_strong/library_c.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_d.dart b/tests/language_strong/library_d.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_d.dart
rename to tests/language_strong/library_d.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_e.dart b/tests/language_strong/library_e.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_e.dart
rename to tests/language_strong/library_e.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_f.dart b/tests/language_strong/library_f.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_f.dart
rename to tests/language_strong/library_f.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_juxtaposition_lib.dart b/tests/language_strong/library_juxtaposition_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_juxtaposition_lib.dart
rename to tests/language_strong/library_juxtaposition_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_juxtaposition_part.dart b/tests/language_strong/library_juxtaposition_part.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_juxtaposition_part.dart
rename to tests/language_strong/library_juxtaposition_part.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_juxtaposition_test.dart b/tests/language_strong/library_juxtaposition_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_juxtaposition_test.dart
rename to tests/language_strong/library_juxtaposition_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_negative_test.dart b/tests/language_strong/library_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_negative_test.dart
rename to tests/language_strong/library_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_prefixes.dart b/tests/language_strong/library_prefixes.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_prefixes.dart
rename to tests/language_strong/library_prefixes.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_prefixes.lib b/tests/language_strong/library_prefixes.lib
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_prefixes.lib
rename to tests/language_strong/library_prefixes.lib
diff --git a/pkg/dev_compiler/test/codegen/language/library_prefixes_test.dart b/tests/language_strong/library_prefixes_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_prefixes_test.dart
rename to tests/language_strong/library_prefixes_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_prefixes_test1.dart b/tests/language_strong/library_prefixes_test1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_prefixes_test1.dart
rename to tests/language_strong/library_prefixes_test1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_prefixes_test1.lib b/tests/language_strong/library_prefixes_test1.lib
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_prefixes_test1.lib
rename to tests/language_strong/library_prefixes_test1.lib
diff --git a/pkg/dev_compiler/test/codegen/language/library_prefixes_test2.dart b/tests/language_strong/library_prefixes_test2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_prefixes_test2.dart
rename to tests/language_strong/library_prefixes_test2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_prefixes_test2.lib b/tests/language_strong/library_prefixes_test2.lib
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_prefixes_test2.lib
rename to tests/language_strong/library_prefixes_test2.lib
diff --git a/pkg/dev_compiler/test/codegen/language/library_private_in_constructor_a.dart b/tests/language_strong/library_private_in_constructor_a.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_private_in_constructor_a.dart
rename to tests/language_strong/library_private_in_constructor_a.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_private_in_constructor_b.dart b/tests/language_strong/library_private_in_constructor_b.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_private_in_constructor_b.dart
rename to tests/language_strong/library_private_in_constructor_b.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_private_in_constructor_test.dart b/tests/language_strong/library_private_in_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_private_in_constructor_test.dart
rename to tests/language_strong/library_private_in_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_same_name_used_lib1.dart b/tests/language_strong/library_same_name_used_lib1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_same_name_used_lib1.dart
rename to tests/language_strong/library_same_name_used_lib1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_same_name_used_lib2.dart b/tests/language_strong/library_same_name_used_lib2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_same_name_used_lib2.dart
rename to tests/language_strong/library_same_name_used_lib2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/library_same_name_used_test.dart b/tests/language_strong/library_same_name_used_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/library_same_name_used_test.dart
rename to tests/language_strong/library_same_name_used_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/licm2_test.dart b/tests/language_strong/licm2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/licm2_test.dart
rename to tests/language_strong/licm2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/licm3_test.dart b/tests/language_strong/licm3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/licm3_test.dart
rename to tests/language_strong/licm3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/licm_test.dart b/tests/language_strong/licm_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/licm_test.dart
rename to tests/language_strong/licm_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_double_index_in_loop2_test.dart b/tests/language_strong/list_double_index_in_loop2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_double_index_in_loop2_test.dart
rename to tests/language_strong/list_double_index_in_loop2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_double_index_in_loop_test.dart b/tests/language_strong/list_double_index_in_loop_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_double_index_in_loop_test.dart
rename to tests/language_strong/list_double_index_in_loop_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_in_closure_test.dart b/tests/language_strong/list_in_closure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_in_closure_test.dart
rename to tests/language_strong/list_in_closure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_is_test.dart b/tests/language_strong/list_is_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_is_test.dart
rename to tests/language_strong/list_is_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_length_tracer_test.dart b/tests/language_strong/list_length_tracer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_length_tracer_test.dart
rename to tests/language_strong/list_length_tracer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_literal1_test.dart b/tests/language_strong/list_literal1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_literal1_test.dart
rename to tests/language_strong/list_literal1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_literal2_negative_test.dart b/tests/language_strong/list_literal2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_literal2_negative_test.dart
rename to tests/language_strong/list_literal2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_literal2_test.dart b/tests/language_strong/list_literal2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_literal2_test.dart
rename to tests/language_strong/list_literal2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_literal3_test.dart b/tests/language_strong/list_literal3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_literal3_test.dart
rename to tests/language_strong/list_literal3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_literal4_test.dart b/tests/language_strong/list_literal4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_literal4_test.dart
rename to tests/language_strong/list_literal4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_literal_negative_test.dart b/tests/language_strong/list_literal_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_literal_negative_test.dart
rename to tests/language_strong/list_literal_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_literal_syntax_test.dart b/tests/language_strong/list_literal_syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_literal_syntax_test.dart
rename to tests/language_strong/list_literal_syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_literal_test.dart b/tests/language_strong/list_literal_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_literal_test.dart
rename to tests/language_strong/list_literal_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_mixin_test.dart b/tests/language_strong/list_mixin_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_mixin_test.dart
rename to tests/language_strong/list_mixin_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_test.dart b/tests/language_strong/list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_test.dart
rename to tests/language_strong/list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_tracer_call_last_test.dart b/tests/language_strong/list_tracer_call_last_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_tracer_call_last_test.dart
rename to tests/language_strong/list_tracer_call_last_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_tracer_closure_test.dart b/tests/language_strong/list_tracer_closure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_tracer_closure_test.dart
rename to tests/language_strong/list_tracer_closure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_tracer_in_list_test.dart b/tests/language_strong/list_tracer_in_list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_tracer_in_list_test.dart
rename to tests/language_strong/list_tracer_in_list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_tracer_in_map_test.dart b/tests/language_strong/list_tracer_in_map_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_tracer_in_map_test.dart
rename to tests/language_strong/list_tracer_in_map_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/list_tracer_return_from_tearoff_closure_test.dart b/tests/language_strong/list_tracer_return_from_tearoff_closure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/list_tracer_return_from_tearoff_closure_test.dart
rename to tests/language_strong/list_tracer_return_from_tearoff_closure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/literal_unary_plus_test.dart b/tests/language_strong/literal_unary_plus_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/literal_unary_plus_test.dart
rename to tests/language_strong/literal_unary_plus_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/liveness_test.dart b/tests/language_strong/liveness_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/liveness_test.dart
rename to tests/language_strong/liveness_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/load_indexed_constant_test.dart b/tests/language_strong/load_indexed_constant_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/load_indexed_constant_test.dart
rename to tests/language_strong/load_indexed_constant_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/local_export_a.dart b/tests/language_strong/local_export_a.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/local_export_a.dart
rename to tests/language_strong/local_export_a.dart
diff --git a/pkg/dev_compiler/test/codegen/language/local_export_a_export.dart b/tests/language_strong/local_export_a_export.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/local_export_a_export.dart
rename to tests/language_strong/local_export_a_export.dart
diff --git a/pkg/dev_compiler/test/codegen/language/local_export_test.dart b/tests/language_strong/local_export_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/local_export_test.dart
rename to tests/language_strong/local_export_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/local_function2_test.dart b/tests/language_strong/local_function2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/local_function2_test.dart
rename to tests/language_strong/local_function2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/local_function3_test.dart b/tests/language_strong/local_function3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/local_function3_test.dart
rename to tests/language_strong/local_function3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/local_function_non_equal_test.dart b/tests/language_strong/local_function_non_equal_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/local_function_non_equal_test.dart
rename to tests/language_strong/local_function_non_equal_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/local_function_test.dart b/tests/language_strong/local_function_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/local_function_test.dart
rename to tests/language_strong/local_function_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/logical_expression2_test.dart b/tests/language_strong/logical_expression2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/logical_expression2_test.dart
rename to tests/language_strong/logical_expression2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/logical_expression3_test.dart b/tests/language_strong/logical_expression3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/logical_expression3_test.dart
rename to tests/language_strong/logical_expression3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/logical_expression4_test.dart b/tests/language_strong/logical_expression4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/logical_expression4_test.dart
rename to tests/language_strong/logical_expression4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/logical_expression5_test.dart b/tests/language_strong/logical_expression5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/logical_expression5_test.dart
rename to tests/language_strong/logical_expression5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/logical_expression_test.dart b/tests/language_strong/logical_expression_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/logical_expression_test.dart
rename to tests/language_strong/logical_expression_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/loop_exchange2_test.dart b/tests/language_strong/loop_exchange2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/loop_exchange2_test.dart
rename to tests/language_strong/loop_exchange2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/loop_exchange3_test.dart b/tests/language_strong/loop_exchange3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/loop_exchange3_test.dart
rename to tests/language_strong/loop_exchange3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/loop_exchange4_test.dart b/tests/language_strong/loop_exchange4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/loop_exchange4_test.dart
rename to tests/language_strong/loop_exchange4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/loop_exchange_test.dart b/tests/language_strong/loop_exchange_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/loop_exchange_test.dart
rename to tests/language_strong/loop_exchange_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/loop_hoist_test.dart b/tests/language_strong/loop_hoist_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/loop_hoist_test.dart
rename to tests/language_strong/loop_hoist_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/main_not_a_function_test.dart b/tests/language_strong/main_not_a_function_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/main_not_a_function_test.dart
rename to tests/language_strong/main_not_a_function_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/main_test.dart b/tests/language_strong/main_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/main_test.dart
rename to tests/language_strong/main_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/malbounded_instantiation_test.dart b/tests/language_strong/malbounded_instantiation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/malbounded_instantiation_test.dart
rename to tests/language_strong/malbounded_instantiation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/malbounded_redirecting_factory2_test.dart b/tests/language_strong/malbounded_redirecting_factory2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/malbounded_redirecting_factory2_test.dart
rename to tests/language_strong/malbounded_redirecting_factory2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/malbounded_redirecting_factory_test.dart b/tests/language_strong/malbounded_redirecting_factory_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/malbounded_redirecting_factory_test.dart
rename to tests/language_strong/malbounded_redirecting_factory_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/malbounded_type_cast2_test.dart b/tests/language_strong/malbounded_type_cast2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/malbounded_type_cast2_test.dart
rename to tests/language_strong/malbounded_type_cast2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/malbounded_type_cast_test.dart b/tests/language_strong/malbounded_type_cast_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/malbounded_type_cast_test.dart
rename to tests/language_strong/malbounded_type_cast_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/malbounded_type_literal_test.dart b/tests/language_strong/malbounded_type_literal_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/malbounded_type_literal_test.dart
rename to tests/language_strong/malbounded_type_literal_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/malbounded_type_test2_test.dart b/tests/language_strong/malbounded_type_test2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/malbounded_type_test2_test.dart
rename to tests/language_strong/malbounded_type_test2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/malbounded_type_test_test.dart b/tests/language_strong/malbounded_type_test_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/malbounded_type_test_test.dart
rename to tests/language_strong/malbounded_type_test_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/malformed2_lib.dart b/tests/language_strong/malformed2_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/malformed2_lib.dart
rename to tests/language_strong/malformed2_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/malformed2_test.dart b/tests/language_strong/malformed2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/malformed2_test.dart
rename to tests/language_strong/malformed2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/malformed_bound_test.dart b/tests/language_strong/malformed_bound_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/malformed_bound_test.dart
rename to tests/language_strong/malformed_bound_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/malformed_inheritance_test.dart b/tests/language_strong/malformed_inheritance_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/malformed_inheritance_test.dart
rename to tests/language_strong/malformed_inheritance_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/malformed_test.dart b/tests/language_strong/malformed_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/malformed_test.dart
rename to tests/language_strong/malformed_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/malformed_type_test.dart b/tests/language_strong/malformed_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/malformed_type_test.dart
rename to tests/language_strong/malformed_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/many_calls_test.dart b/tests/language_strong/many_calls_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/many_calls_test.dart
rename to tests/language_strong/many_calls_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/many_generic_instanceof_test.dart b/tests/language_strong/many_generic_instanceof_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/many_generic_instanceof_test.dart
rename to tests/language_strong/many_generic_instanceof_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/many_method_calls_test.dart b/tests/language_strong/many_method_calls_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/many_method_calls_test.dart
rename to tests/language_strong/many_method_calls_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/many_named_arguments_test.dart b/tests/language_strong/many_named_arguments_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/many_named_arguments_test.dart
rename to tests/language_strong/many_named_arguments_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/many_overridden_no_such_method_test.dart b/tests/language_strong/many_overridden_no_such_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/many_overridden_no_such_method_test.dart
rename to tests/language_strong/many_overridden_no_such_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/map_literal10_test.dart b/tests/language_strong/map_literal10_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/map_literal10_test.dart
rename to tests/language_strong/map_literal10_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/map_literal11_test.dart b/tests/language_strong/map_literal11_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/map_literal11_test.dart
rename to tests/language_strong/map_literal11_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/map_literal1_test.dart b/tests/language_strong/map_literal1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/map_literal1_test.dart
rename to tests/language_strong/map_literal1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/map_literal2_negative_test.dart b/tests/language_strong/map_literal2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/map_literal2_negative_test.dart
rename to tests/language_strong/map_literal2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/map_literal2_test.dart b/tests/language_strong/map_literal2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/map_literal2_test.dart
rename to tests/language_strong/map_literal2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/map_literal3_test.dart b/tests/language_strong/map_literal3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/map_literal3_test.dart
rename to tests/language_strong/map_literal3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/map_literal4_test.dart b/tests/language_strong/map_literal4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/map_literal4_test.dart
rename to tests/language_strong/map_literal4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/map_literal5_test.dart b/tests/language_strong/map_literal5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/map_literal5_test.dart
rename to tests/language_strong/map_literal5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/map_literal6_test.dart b/tests/language_strong/map_literal6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/map_literal6_test.dart
rename to tests/language_strong/map_literal6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/map_literal7_test.dart b/tests/language_strong/map_literal7_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/map_literal7_test.dart
rename to tests/language_strong/map_literal7_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/map_literal8_test.dart b/tests/language_strong/map_literal8_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/map_literal8_test.dart
rename to tests/language_strong/map_literal8_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/map_literal9_test.dart b/tests/language_strong/map_literal9_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/map_literal9_test.dart
rename to tests/language_strong/map_literal9_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/map_literal_negative_test.dart b/tests/language_strong/map_literal_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/map_literal_negative_test.dart
rename to tests/language_strong/map_literal_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/map_literal_syntax_test.dart b/tests/language_strong/map_literal_syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/map_literal_syntax_test.dart
rename to tests/language_strong/map_literal_syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/map_literal_test.dart b/tests/language_strong/map_literal_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/map_literal_test.dart
rename to tests/language_strong/map_literal_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/map_test.dart b/tests/language_strong/map_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/map_test.dart
rename to tests/language_strong/map_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mega_load_test.dart b/tests/language_strong/mega_load_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mega_load_test.dart
rename to tests/language_strong/mega_load_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/megamorphic_no_such_method_test.dart b/tests/language_strong/megamorphic_no_such_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/megamorphic_no_such_method_test.dart
rename to tests/language_strong/megamorphic_no_such_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/memory_swap_test.dart b/tests/language_strong/memory_swap_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/memory_swap_test.dart
rename to tests/language_strong/memory_swap_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/metadata_lib.dart b/tests/language_strong/metadata_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/metadata_lib.dart
rename to tests/language_strong/metadata_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/metadata_scope1_test.dart b/tests/language_strong/metadata_scope1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/metadata_scope1_test.dart
rename to tests/language_strong/metadata_scope1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/metadata_scope2_test.dart b/tests/language_strong/metadata_scope2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/metadata_scope2_test.dart
rename to tests/language_strong/metadata_scope2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/metadata_self_test.dart b/tests/language_strong/metadata_self_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/metadata_self_test.dart
rename to tests/language_strong/metadata_self_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/metadata_test.dart b/tests/language_strong/metadata_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/metadata_test.dart
rename to tests/language_strong/metadata_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/method_binding_test.dart b/tests/language_strong/method_binding_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/method_binding_test.dart
rename to tests/language_strong/method_binding_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/method_invocation_test.dart b/tests/language_strong/method_invocation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/method_invocation_test.dart
rename to tests/language_strong/method_invocation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/method_name_test.dart b/tests/language_strong/method_name_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/method_name_test.dart
rename to tests/language_strong/method_name_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/method_override2_test.dart b/tests/language_strong/method_override2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/method_override2_test.dart
rename to tests/language_strong/method_override2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/method_override3_test.dart b/tests/language_strong/method_override3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/method_override3_test.dart
rename to tests/language_strong/method_override3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/method_override4_test.dart b/tests/language_strong/method_override4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/method_override4_test.dart
rename to tests/language_strong/method_override4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/method_override5_test.dart b/tests/language_strong/method_override5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/method_override5_test.dart
rename to tests/language_strong/method_override5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/method_override6_test.dart b/tests/language_strong/method_override6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/method_override6_test.dart
rename to tests/language_strong/method_override6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/method_override7_test.dart b/tests/language_strong/method_override7_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/method_override7_test.dart
rename to tests/language_strong/method_override7_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/method_override8_test.dart b/tests/language_strong/method_override8_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/method_override8_test.dart
rename to tests/language_strong/method_override8_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/method_override_test.dart b/tests/language_strong/method_override_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/method_override_test.dart
rename to tests/language_strong/method_override_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/methods_as_constants2_test.dart b/tests/language_strong/methods_as_constants2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/methods_as_constants2_test.dart
rename to tests/language_strong/methods_as_constants2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/methods_as_constants_test.dart b/tests/language_strong/methods_as_constants_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/methods_as_constants_test.dart
rename to tests/language_strong/methods_as_constants_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/minify_closure_variable_collision_test.dart b/tests/language_strong/minify_closure_variable_collision_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/minify_closure_variable_collision_test.dart
rename to tests/language_strong/minify_closure_variable_collision_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mint_arithmetic_test.dart b/tests/language_strong/mint_arithmetic_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mint_arithmetic_test.dart
rename to tests/language_strong/mint_arithmetic_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mint_compares_test.dart b/tests/language_strong/mint_compares_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mint_compares_test.dart
rename to tests/language_strong/mint_compares_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/missing_const_constructor_test.dart b/tests/language_strong/missing_const_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/missing_const_constructor_test.dart
rename to tests/language_strong/missing_const_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/missing_part_of_tag_part.dart b/tests/language_strong/missing_part_of_tag_part.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/missing_part_of_tag_part.dart
rename to tests/language_strong/missing_part_of_tag_part.dart
diff --git a/pkg/dev_compiler/test/codegen/language/missing_part_of_tag_test.dart b/tests/language_strong/missing_part_of_tag_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/missing_part_of_tag_test.dart
rename to tests/language_strong/missing_part_of_tag_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_abstract_getter_test.dart b/tests/language_strong/mixin_abstract_getter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_abstract_getter_test.dart
rename to tests/language_strong/mixin_abstract_getter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_black_listed_test.dart b/tests/language_strong/mixin_black_listed_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_black_listed_test.dart
rename to tests/language_strong/mixin_black_listed_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_bound_test.dart b/tests/language_strong/mixin_bound_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_bound_test.dart
rename to tests/language_strong/mixin_bound_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_cyclic_test.dart b/tests/language_strong/mixin_cyclic_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_cyclic_test.dart
rename to tests/language_strong/mixin_cyclic_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_extends_field_test.dart b/tests/language_strong/mixin_extends_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_extends_field_test.dart
rename to tests/language_strong/mixin_extends_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_extends_is_test.dart b/tests/language_strong/mixin_extends_is_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_extends_is_test.dart
rename to tests/language_strong/mixin_extends_is_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_extends_method_test.dart b/tests/language_strong/mixin_extends_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_extends_method_test.dart
rename to tests/language_strong/mixin_extends_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_field_initializer_test.dart b/tests/language_strong/mixin_field_initializer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_field_initializer_test.dart
rename to tests/language_strong/mixin_field_initializer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_field_test.dart b/tests/language_strong/mixin_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_field_test.dart
rename to tests/language_strong/mixin_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_forwarding_constructor1_test.dart b/tests/language_strong/mixin_forwarding_constructor1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_forwarding_constructor1_test.dart
rename to tests/language_strong/mixin_forwarding_constructor1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_forwarding_constructor2_test.dart b/tests/language_strong/mixin_forwarding_constructor2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_forwarding_constructor2_test.dart
rename to tests/language_strong/mixin_forwarding_constructor2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_forwarding_constructor3_test.dart b/tests/language_strong/mixin_forwarding_constructor3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_forwarding_constructor3_test.dart
rename to tests/language_strong/mixin_forwarding_constructor3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_forwarding_constructor4_test.dart b/tests/language_strong/mixin_forwarding_constructor4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_forwarding_constructor4_test.dart
rename to tests/language_strong/mixin_forwarding_constructor4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_generic_test.dart b/tests/language_strong/mixin_generic_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_generic_test.dart
rename to tests/language_strong/mixin_generic_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_getter_regression_test.dart b/tests/language_strong/mixin_getter_regression_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_getter_regression_test.dart
rename to tests/language_strong/mixin_getter_regression_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_illegal_constructor_test.dart b/tests/language_strong/mixin_illegal_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_illegal_constructor_test.dart
rename to tests/language_strong/mixin_illegal_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_illegal_cycles_test.dart b/tests/language_strong/mixin_illegal_cycles_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_illegal_cycles_test.dart
rename to tests/language_strong/mixin_illegal_cycles_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_illegal_object_test.dart b/tests/language_strong/mixin_illegal_object_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_illegal_object_test.dart
rename to tests/language_strong/mixin_illegal_object_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_illegal_static_access_test.dart b/tests/language_strong/mixin_illegal_static_access_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_illegal_static_access_test.dart
rename to tests/language_strong/mixin_illegal_static_access_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_illegal_super_use_test.dart b/tests/language_strong/mixin_illegal_super_use_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_illegal_super_use_test.dart
rename to tests/language_strong/mixin_illegal_super_use_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_illegal_superclass_test.dart b/tests/language_strong/mixin_illegal_superclass_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_illegal_superclass_test.dart
rename to tests/language_strong/mixin_illegal_superclass_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_illegal_syntax_test.dart b/tests/language_strong/mixin_illegal_syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_illegal_syntax_test.dart
rename to tests/language_strong/mixin_illegal_syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_implements2_test.dart b/tests/language_strong/mixin_implements2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_implements2_test.dart
rename to tests/language_strong/mixin_implements2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_implements_test.dart b/tests/language_strong/mixin_implements_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_implements_test.dart
rename to tests/language_strong/mixin_implements_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_invalid_bound2_test.dart b/tests/language_strong/mixin_invalid_bound2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_invalid_bound2_test.dart
rename to tests/language_strong/mixin_invalid_bound2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_invalid_bound_test.dart b/tests/language_strong/mixin_invalid_bound_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_invalid_bound_test.dart
rename to tests/language_strong/mixin_invalid_bound_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_invalid_inheritance1_test.dart b/tests/language_strong/mixin_invalid_inheritance1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_invalid_inheritance1_test.dart
rename to tests/language_strong/mixin_invalid_inheritance1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_invalid_inheritance2_test.dart b/tests/language_strong/mixin_invalid_inheritance2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_invalid_inheritance2_test.dart
rename to tests/language_strong/mixin_invalid_inheritance2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_is_test.dart b/tests/language_strong/mixin_is_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_is_test.dart
rename to tests/language_strong/mixin_is_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_issue10216_2_test.dart b/tests/language_strong/mixin_issue10216_2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_issue10216_2_test.dart
rename to tests/language_strong/mixin_issue10216_2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_issue10216_test.dart b/tests/language_strong/mixin_issue10216_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_issue10216_test.dart
rename to tests/language_strong/mixin_issue10216_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_lib_extends_field_lib.dart b/tests/language_strong/mixin_lib_extends_field_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_lib_extends_field_lib.dart
rename to tests/language_strong/mixin_lib_extends_field_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_lib_extends_field_test.dart b/tests/language_strong/mixin_lib_extends_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_lib_extends_field_test.dart
rename to tests/language_strong/mixin_lib_extends_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_lib_extends_method_lib.dart b/tests/language_strong/mixin_lib_extends_method_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_lib_extends_method_lib.dart
rename to tests/language_strong/mixin_lib_extends_method_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_lib_extends_method_test.dart b/tests/language_strong/mixin_lib_extends_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_lib_extends_method_test.dart
rename to tests/language_strong/mixin_lib_extends_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_method_test.dart b/tests/language_strong/mixin_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_method_test.dart
rename to tests/language_strong/mixin_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_mixin2_test.dart b/tests/language_strong/mixin_mixin2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_mixin2_test.dart
rename to tests/language_strong/mixin_mixin2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_mixin3_test.dart b/tests/language_strong/mixin_mixin3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_mixin3_test.dart
rename to tests/language_strong/mixin_mixin3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_mixin4_test.dart b/tests/language_strong/mixin_mixin4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_mixin4_test.dart
rename to tests/language_strong/mixin_mixin4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_mixin5_test.dart b/tests/language_strong/mixin_mixin5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_mixin5_test.dart
rename to tests/language_strong/mixin_mixin5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_mixin6_test.dart b/tests/language_strong/mixin_mixin6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_mixin6_test.dart
rename to tests/language_strong/mixin_mixin6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_mixin7_test.dart b/tests/language_strong/mixin_mixin7_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_mixin7_test.dart
rename to tests/language_strong/mixin_mixin7_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_mixin_bound2_test.dart b/tests/language_strong/mixin_mixin_bound2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_mixin_bound2_test.dart
rename to tests/language_strong/mixin_mixin_bound2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_mixin_bound_test.dart b/tests/language_strong/mixin_mixin_bound_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_mixin_bound_test.dart
rename to tests/language_strong/mixin_mixin_bound_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_mixin_test.dart b/tests/language_strong/mixin_mixin_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_mixin_test.dart
rename to tests/language_strong/mixin_mixin_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_naming_test.dart b/tests/language_strong/mixin_naming_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_naming_test.dart
rename to tests/language_strong/mixin_naming_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_only_for_rti_test.dart b/tests/language_strong/mixin_only_for_rti_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_only_for_rti_test.dart
rename to tests/language_strong/mixin_only_for_rti_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_override_regression_test.dart b/tests/language_strong/mixin_override_regression_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_override_regression_test.dart
rename to tests/language_strong/mixin_override_regression_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_prefix_lib.dart b/tests/language_strong/mixin_prefix_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_prefix_lib.dart
rename to tests/language_strong/mixin_prefix_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_prefix_test.dart b/tests/language_strong/mixin_prefix_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_prefix_test.dart
rename to tests/language_strong/mixin_prefix_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_regress_11398_test.dart b/tests/language_strong/mixin_regress_11398_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_regress_11398_test.dart
rename to tests/language_strong/mixin_regress_11398_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_regress_13688_test.dart b/tests/language_strong/mixin_regress_13688_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_regress_13688_test.dart
rename to tests/language_strong/mixin_regress_13688_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_super_bound2_test.dart b/tests/language_strong/mixin_super_bound2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_super_bound2_test.dart
rename to tests/language_strong/mixin_super_bound2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_super_bound_test.dart b/tests/language_strong/mixin_super_bound_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_super_bound_test.dart
rename to tests/language_strong/mixin_super_bound_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_super_constructor2_test.dart b/tests/language_strong/mixin_super_constructor2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_super_constructor2_test.dart
rename to tests/language_strong/mixin_super_constructor2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_super_constructor_default_test.dart b/tests/language_strong/mixin_super_constructor_default_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_super_constructor_default_test.dart
rename to tests/language_strong/mixin_super_constructor_default_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_super_constructor_multiple_test.dart b/tests/language_strong/mixin_super_constructor_multiple_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_super_constructor_multiple_test.dart
rename to tests/language_strong/mixin_super_constructor_multiple_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_super_constructor_named_test.dart b/tests/language_strong/mixin_super_constructor_named_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_super_constructor_named_test.dart
rename to tests/language_strong/mixin_super_constructor_named_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_super_constructor_positionals_test.dart b/tests/language_strong/mixin_super_constructor_positionals_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_super_constructor_positionals_test.dart
rename to tests/language_strong/mixin_super_constructor_positionals_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_super_constructor_test.dart b/tests/language_strong/mixin_super_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_super_constructor_test.dart
rename to tests/language_strong/mixin_super_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_super_test.dart b/tests/language_strong/mixin_super_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_super_test.dart
rename to tests/language_strong/mixin_super_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_this_use_test.dart b/tests/language_strong/mixin_this_use_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_this_use_test.dart
rename to tests/language_strong/mixin_this_use_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_type_parameter1_test.dart b/tests/language_strong/mixin_type_parameter1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_type_parameter1_test.dart
rename to tests/language_strong/mixin_type_parameter1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_type_parameter2_test.dart b/tests/language_strong/mixin_type_parameter2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_type_parameter2_test.dart
rename to tests/language_strong/mixin_type_parameter2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_type_parameter3_test.dart b/tests/language_strong/mixin_type_parameter3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_type_parameter3_test.dart
rename to tests/language_strong/mixin_type_parameter3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_type_parameter4_test.dart b/tests/language_strong/mixin_type_parameter4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_type_parameter4_test.dart
rename to tests/language_strong/mixin_type_parameter4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_type_parameter5_test.dart b/tests/language_strong/mixin_type_parameter5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_type_parameter5_test.dart
rename to tests/language_strong/mixin_type_parameter5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_type_parameter6_test.dart b/tests/language_strong/mixin_type_parameter6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_type_parameter6_test.dart
rename to tests/language_strong/mixin_type_parameter6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_type_parameters_errors_test.dart b/tests/language_strong/mixin_type_parameters_errors_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_type_parameters_errors_test.dart
rename to tests/language_strong/mixin_type_parameters_errors_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_type_parameters_mixin_extends_test.dart b/tests/language_strong/mixin_type_parameters_mixin_extends_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_type_parameters_mixin_extends_test.dart
rename to tests/language_strong/mixin_type_parameters_mixin_extends_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_type_parameters_mixin_test.dart b/tests/language_strong/mixin_type_parameters_mixin_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_type_parameters_mixin_test.dart
rename to tests/language_strong/mixin_type_parameters_mixin_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_type_parameters_simple_test.dart b/tests/language_strong/mixin_type_parameters_simple_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_type_parameters_simple_test.dart
rename to tests/language_strong/mixin_type_parameters_simple_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_type_parameters_super_extends_test.dart b/tests/language_strong/mixin_type_parameters_super_extends_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_type_parameters_super_extends_test.dart
rename to tests/language_strong/mixin_type_parameters_super_extends_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_type_parameters_super_test.dart b/tests/language_strong/mixin_type_parameters_super_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_type_parameters_super_test.dart
rename to tests/language_strong/mixin_type_parameters_super_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_type_variable_test.dart b/tests/language_strong/mixin_type_variable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_type_variable_test.dart
rename to tests/language_strong/mixin_type_variable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_typedef_constructor_test.dart b/tests/language_strong/mixin_typedef_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_typedef_constructor_test.dart
rename to tests/language_strong/mixin_typedef_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mixin_with_two_implicit_constructors_test.dart b/tests/language_strong/mixin_with_two_implicit_constructors_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mixin_with_two_implicit_constructors_test.dart
rename to tests/language_strong/mixin_with_two_implicit_constructors_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/modulo_test.dart b/tests/language_strong/modulo_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/modulo_test.dart
rename to tests/language_strong/modulo_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/mul_recipr_test.dart b/tests/language_strong/mul_recipr_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/mul_recipr_test.dart
rename to tests/language_strong/mul_recipr_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/multi_assign_test.dart b/tests/language_strong/multi_assign_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/multi_assign_test.dart
rename to tests/language_strong/multi_assign_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/multi_pass2_test.dart b/tests/language_strong/multi_pass2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/multi_pass2_test.dart
rename to tests/language_strong/multi_pass2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/multi_pass_a.dart b/tests/language_strong/multi_pass_a.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/multi_pass_a.dart
rename to tests/language_strong/multi_pass_a.dart
diff --git a/pkg/dev_compiler/test/codegen/language/multi_pass_b.dart b/tests/language_strong/multi_pass_b.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/multi_pass_b.dart
rename to tests/language_strong/multi_pass_b.dart
diff --git a/pkg/dev_compiler/test/codegen/language/multi_pass_test.dart b/tests/language_strong/multi_pass_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/multi_pass_test.dart
rename to tests/language_strong/multi_pass_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/multiline_newline_cr.dart b/tests/language_strong/multiline_newline_cr.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/multiline_newline_cr.dart
rename to tests/language_strong/multiline_newline_cr.dart
Binary files differ
diff --git a/pkg/dev_compiler/test/codegen/language/multiline_newline_crlf.dart b/tests/language_strong/multiline_newline_crlf.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/multiline_newline_crlf.dart
rename to tests/language_strong/multiline_newline_crlf.dart
diff --git a/pkg/dev_compiler/test/codegen/language/multiline_newline_lf.dart b/tests/language_strong/multiline_newline_lf.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/multiline_newline_lf.dart
rename to tests/language_strong/multiline_newline_lf.dart
diff --git a/pkg/dev_compiler/test/codegen/language/multiline_newline_test.dart b/tests/language_strong/multiline_newline_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/multiline_newline_test.dart
rename to tests/language_strong/multiline_newline_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/multiline_strings_test.dart b/tests/language_strong/multiline_strings_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/multiline_strings_test.dart
rename to tests/language_strong/multiline_strings_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/multiple_field_assignment_constructor_test.dart b/tests/language_strong/multiple_field_assignment_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/multiple_field_assignment_constructor_test.dart
rename to tests/language_strong/multiple_field_assignment_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_argument_in_const_creation_test.dart b/tests/language_strong/named_argument_in_const_creation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_argument_in_const_creation_test.dart
rename to tests/language_strong/named_argument_in_const_creation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_argument_test.dart b/tests/language_strong/named_argument_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_argument_test.dart
rename to tests/language_strong/named_argument_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_constructor_lib.dart b/tests/language_strong/named_constructor_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_constructor_lib.dart
rename to tests/language_strong/named_constructor_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_constructor_test.dart b/tests/language_strong/named_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_constructor_test.dart
rename to tests/language_strong/named_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_parameter_clash_test.dart b/tests/language_strong/named_parameter_clash_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_parameter_clash_test.dart
rename to tests/language_strong/named_parameter_clash_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_parameter_regression_test.dart b/tests/language_strong/named_parameter_regression_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_parameter_regression_test.dart
rename to tests/language_strong/named_parameter_regression_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_parameters2_test.dart b/tests/language_strong/named_parameters2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_parameters2_test.dart
rename to tests/language_strong/named_parameters2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_parameters3_test.dart b/tests/language_strong/named_parameters3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_parameters3_test.dart
rename to tests/language_strong/named_parameters3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_parameters4_test.dart b/tests/language_strong/named_parameters4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_parameters4_test.dart
rename to tests/language_strong/named_parameters4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_parameters_aggregated_test.dart b/tests/language_strong/named_parameters_aggregated_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_parameters_aggregated_test.dart
rename to tests/language_strong/named_parameters_aggregated_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_parameters_named_count_test.dart b/tests/language_strong/named_parameters_named_count_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_parameters_named_count_test.dart
rename to tests/language_strong/named_parameters_named_count_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_parameters_passing_false_test.dart b/tests/language_strong/named_parameters_passing_false_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_parameters_passing_false_test.dart
rename to tests/language_strong/named_parameters_passing_false_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_parameters_passing_falsy_test.dart b/tests/language_strong/named_parameters_passing_falsy_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_parameters_passing_falsy_test.dart
rename to tests/language_strong/named_parameters_passing_falsy_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_parameters_passing_null_test.dart b/tests/language_strong/named_parameters_passing_null_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_parameters_passing_null_test.dart
rename to tests/language_strong/named_parameters_passing_null_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_parameters_passing_zero_test.dart b/tests/language_strong/named_parameters_passing_zero_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_parameters_passing_zero_test.dart
rename to tests/language_strong/named_parameters_passing_zero_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_parameters_test.dart b/tests/language_strong/named_parameters_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_parameters_test.dart
rename to tests/language_strong/named_parameters_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_parameters_type_test.dart b/tests/language_strong/named_parameters_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_parameters_type_test.dart
rename to tests/language_strong/named_parameters_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_parameters_with_conversions_test.dart b/tests/language_strong/named_parameters_with_conversions_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_parameters_with_conversions_test.dart
rename to tests/language_strong/named_parameters_with_conversions_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_parameters_with_dollars_test.dart b/tests/language_strong/named_parameters_with_dollars_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_parameters_with_dollars_test.dart
rename to tests/language_strong/named_parameters_with_dollars_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/named_parameters_with_object_property_names_test.dart b/tests/language_strong/named_parameters_with_object_property_names_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/named_parameters_with_object_property_names_test.dart
rename to tests/language_strong/named_parameters_with_object_property_names_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/namer2_test.dart b/tests/language_strong/namer2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/namer2_test.dart
rename to tests/language_strong/namer2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/namer_test.dart b/tests/language_strong/namer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/namer_test.dart
rename to tests/language_strong/namer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/naming2_test.dart b/tests/language_strong/naming2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/naming2_test.dart
rename to tests/language_strong/naming2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/naming3_test.dart b/tests/language_strong/naming3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/naming3_test.dart
rename to tests/language_strong/naming3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/naming_test.dart b/tests/language_strong/naming_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/naming_test.dart
rename to tests/language_strong/naming_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/nan_identical_test.dart b/tests/language_strong/nan_identical_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/nan_identical_test.dart
rename to tests/language_strong/nan_identical_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/native_test.dart b/tests/language_strong/native_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/native_test.dart
rename to tests/language_strong/native_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/nested_comments_test.dart b/tests/language_strong/nested_comments_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/nested_comments_test.dart
rename to tests/language_strong/nested_comments_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/nested_if_test.dart b/tests/language_strong/nested_if_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/nested_if_test.dart
rename to tests/language_strong/nested_if_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/nested_switch_label_test.dart b/tests/language_strong/nested_switch_label_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/nested_switch_label_test.dart
rename to tests/language_strong/nested_switch_label_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/new_expression1_negative_test.dart b/tests/language_strong/new_expression1_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/new_expression1_negative_test.dart
rename to tests/language_strong/new_expression1_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/new_expression2_negative_test.dart b/tests/language_strong/new_expression2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/new_expression2_negative_test.dart
rename to tests/language_strong/new_expression2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/new_expression3_negative_test.dart b/tests/language_strong/new_expression3_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/new_expression3_negative_test.dart
rename to tests/language_strong/new_expression3_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/new_expression_type_args_test.dart b/tests/language_strong/new_expression_type_args_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/new_expression_type_args_test.dart
rename to tests/language_strong/new_expression_type_args_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/new_prefix_test.dart b/tests/language_strong/new_prefix_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/new_prefix_test.dart
rename to tests/language_strong/new_prefix_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/new_statement_test.dart b/tests/language_strong/new_statement_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/new_statement_test.dart
rename to tests/language_strong/new_statement_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/no_main_test.dart b/tests/language_strong/no_main_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/no_main_test.dart
rename to tests/language_strong/no_main_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/no_such_constructor2_test.dart b/tests/language_strong/no_such_constructor2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/no_such_constructor2_test.dart
rename to tests/language_strong/no_such_constructor2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/no_such_constructor_test.dart b/tests/language_strong/no_such_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/no_such_constructor_test.dart
rename to tests/language_strong/no_such_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/no_such_method2_test.dart b/tests/language_strong/no_such_method2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/no_such_method2_test.dart
rename to tests/language_strong/no_such_method2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/no_such_method3_test.dart b/tests/language_strong/no_such_method3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/no_such_method3_test.dart
rename to tests/language_strong/no_such_method3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/no_such_method_dispatcher_test.dart b/tests/language_strong/no_such_method_dispatcher_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/no_such_method_dispatcher_test.dart
rename to tests/language_strong/no_such_method_dispatcher_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/no_such_method_empty_selector_test.dart b/tests/language_strong/no_such_method_empty_selector_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/no_such_method_empty_selector_test.dart
rename to tests/language_strong/no_such_method_empty_selector_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/no_such_method_mock_test.dart b/tests/language_strong/no_such_method_mock_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/no_such_method_mock_test.dart
rename to tests/language_strong/no_such_method_mock_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/no_such_method_native_test.dart b/tests/language_strong/no_such_method_native_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/no_such_method_native_test.dart
rename to tests/language_strong/no_such_method_native_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/no_such_method_negative_test.dart b/tests/language_strong/no_such_method_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/no_such_method_negative_test.dart
rename to tests/language_strong/no_such_method_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/no_such_method_subtype_test.dart b/tests/language_strong/no_such_method_subtype_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/no_such_method_subtype_test.dart
rename to tests/language_strong/no_such_method_subtype_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/no_such_method_test.dart b/tests/language_strong/no_such_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/no_such_method_test.dart
rename to tests/language_strong/no_such_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/non_const_constructor_without_body_test.dart b/tests/language_strong/non_const_constructor_without_body_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/non_const_constructor_without_body_test.dart
rename to tests/language_strong/non_const_constructor_without_body_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/non_const_super_negative_test.dart b/tests/language_strong/non_const_super_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/non_const_super_negative_test.dart
rename to tests/language_strong/non_const_super_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/non_dominating_loop_test.dart b/tests/language_strong/non_dominating_loop_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/non_dominating_loop_test.dart
rename to tests/language_strong/non_dominating_loop_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/non_parameterized_factory2_test.dart b/tests/language_strong/non_parameterized_factory2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/non_parameterized_factory2_test.dart
rename to tests/language_strong/non_parameterized_factory2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/non_parameterized_factory_test.dart b/tests/language_strong/non_parameterized_factory_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/non_parameterized_factory_test.dart
rename to tests/language_strong/non_parameterized_factory_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/not_enough_positional_arguments_test.dart b/tests/language_strong/not_enough_positional_arguments_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/not_enough_positional_arguments_test.dart
rename to tests/language_strong/not_enough_positional_arguments_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/null2_test.dart b/tests/language_strong/null2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/null2_test.dart
rename to tests/language_strong/null2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/null_access_error_test.dart b/tests/language_strong/null_access_error_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/null_access_error_test.dart
rename to tests/language_strong/null_access_error_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/null_inline_test.dart b/tests/language_strong/null_inline_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/null_inline_test.dart
rename to tests/language_strong/null_inline_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/null_is2_test.dart b/tests/language_strong/null_is2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/null_is2_test.dart
rename to tests/language_strong/null_is2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/null_is_test.dart b/tests/language_strong/null_is_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/null_is_test.dart
rename to tests/language_strong/null_is_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/null_method_test.dart b/tests/language_strong/null_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/null_method_test.dart
rename to tests/language_strong/null_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/null_no_such_method_test.dart b/tests/language_strong/null_no_such_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/null_no_such_method_test.dart
rename to tests/language_strong/null_no_such_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/null_test.dart b/tests/language_strong/null_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/null_test.dart
rename to tests/language_strong/null_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/null_to_string2_test.dart b/tests/language_strong/null_to_string2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/null_to_string2_test.dart
rename to tests/language_strong/null_to_string2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/null_to_string_test.dart b/tests/language_strong/null_to_string_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/null_to_string_test.dart
rename to tests/language_strong/null_to_string_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/nullaware_opt_test.dart b/tests/language_strong/nullaware_opt_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/nullaware_opt_test.dart
rename to tests/language_strong/nullaware_opt_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/number_constant_folding1_test.dart b/tests/language_strong/number_constant_folding1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/number_constant_folding1_test.dart
rename to tests/language_strong/number_constant_folding1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/number_identifier_test.dart b/tests/language_strong/number_identifier_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/number_identifier_test.dart
rename to tests/language_strong/number_identifier_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/number_identity2_test.dart b/tests/language_strong/number_identity2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/number_identity2_test.dart
rename to tests/language_strong/number_identity2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/number_identity_test.dart b/tests/language_strong/number_identity_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/number_identity_test.dart
rename to tests/language_strong/number_identity_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/number_syntax_test.dart b/tests/language_strong/number_syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/number_syntax_test.dart
rename to tests/language_strong/number_syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/numbers_test.dart b/tests/language_strong/numbers_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/numbers_test.dart
rename to tests/language_strong/numbers_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/on_catch_malformed_type_test.dart b/tests/language_strong/on_catch_malformed_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/on_catch_malformed_type_test.dart
rename to tests/language_strong/on_catch_malformed_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/operator1_negative_test.dart b/tests/language_strong/operator1_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/operator1_negative_test.dart
rename to tests/language_strong/operator1_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/operator2_negative_test.dart b/tests/language_strong/operator2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/operator2_negative_test.dart
rename to tests/language_strong/operator2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/operator2_test.dart b/tests/language_strong/operator2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/operator2_test.dart
rename to tests/language_strong/operator2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/operator3_test.dart b/tests/language_strong/operator3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/operator3_test.dart
rename to tests/language_strong/operator3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/operator4_test.dart b/tests/language_strong/operator4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/operator4_test.dart
rename to tests/language_strong/operator4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/operator5_test.dart b/tests/language_strong/operator5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/operator5_test.dart
rename to tests/language_strong/operator5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/operator6_test.dart b/tests/language_strong/operator6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/operator6_test.dart
rename to tests/language_strong/operator6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/operator_equals_test.dart b/tests/language_strong/operator_equals_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/operator_equals_test.dart
rename to tests/language_strong/operator_equals_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/operator_index_evaluation_order_test.dart b/tests/language_strong/operator_index_evaluation_order_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/operator_index_evaluation_order_test.dart
rename to tests/language_strong/operator_index_evaluation_order_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/operator_negate_and_method_negate_test.dart b/tests/language_strong/operator_negate_and_method_negate_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/operator_negate_and_method_negate_test.dart
rename to tests/language_strong/operator_negate_and_method_negate_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/operator_test.dart b/tests/language_strong/operator_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/operator_test.dart
rename to tests/language_strong/operator_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/optimize_redundant_array_load_test.dart b/tests/language_strong/optimize_redundant_array_load_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/optimize_redundant_array_load_test.dart
rename to tests/language_strong/optimize_redundant_array_load_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/optimized_constant_array_string_access_test.dart b/tests/language_strong/optimized_constant_array_string_access_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/optimized_constant_array_string_access_test.dart
rename to tests/language_strong/optimized_constant_array_string_access_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/optimized_hoisting_checked_mode_assert_test.dart b/tests/language_strong/optimized_hoisting_checked_mode_assert_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/optimized_hoisting_checked_mode_assert_test.dart
rename to tests/language_strong/optimized_hoisting_checked_mode_assert_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/optimized_isempty_test.dart b/tests/language_strong/optimized_isempty_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/optimized_isempty_test.dart
rename to tests/language_strong/optimized_isempty_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/optimized_lists_test.dart b/tests/language_strong/optimized_lists_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/optimized_lists_test.dart
rename to tests/language_strong/optimized_lists_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/optimized_setter_test.dart b/tests/language_strong/optimized_setter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/optimized_setter_test.dart
rename to tests/language_strong/optimized_setter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/optimized_string_charat_test.dart b/tests/language_strong/optimized_string_charat_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/optimized_string_charat_test.dart
rename to tests/language_strong/optimized_string_charat_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/optimized_string_charcodeat_test.dart b/tests/language_strong/optimized_string_charcodeat_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/optimized_string_charcodeat_test.dart
rename to tests/language_strong/optimized_string_charcodeat_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/optional_named_parameters_test.dart b/tests/language_strong/optional_named_parameters_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/optional_named_parameters_test.dart
rename to tests/language_strong/optional_named_parameters_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/ordered_maps_test.dart b/tests/language_strong/ordered_maps_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/ordered_maps_test.dart
rename to tests/language_strong/ordered_maps_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/osr_test.dart b/tests/language_strong/osr_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/osr_test.dart
rename to tests/language_strong/osr_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/other_library.dart b/tests/language_strong/other_library.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/other_library.dart
rename to tests/language_strong/other_library.dart
diff --git a/pkg/dev_compiler/test/codegen/language/overridden_no_such_method.dart b/tests/language_strong/overridden_no_such_method.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/overridden_no_such_method.dart
rename to tests/language_strong/overridden_no_such_method.dart
diff --git a/pkg/dev_compiler/test/codegen/language/overridden_no_such_method_test.dart b/tests/language_strong/overridden_no_such_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/overridden_no_such_method_test.dart
rename to tests/language_strong/overridden_no_such_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/override_field_method1_negative_test.dart b/tests/language_strong/override_field_method1_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/override_field_method1_negative_test.dart
rename to tests/language_strong/override_field_method1_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/override_field_method2_negative_test.dart b/tests/language_strong/override_field_method2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/override_field_method2_negative_test.dart
rename to tests/language_strong/override_field_method2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/override_field_method4_negative_test.dart b/tests/language_strong/override_field_method4_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/override_field_method4_negative_test.dart
rename to tests/language_strong/override_field_method4_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/override_field_method5_negative_test.dart b/tests/language_strong/override_field_method5_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/override_field_method5_negative_test.dart
rename to tests/language_strong/override_field_method5_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/override_field_test.dart b/tests/language_strong/override_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/override_field_test.dart
rename to tests/language_strong/override_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/override_inheritance_abstract_test.dart b/tests/language_strong/override_inheritance_abstract_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/override_inheritance_abstract_test.dart
rename to tests/language_strong/override_inheritance_abstract_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/override_inheritance_field_test.dart b/tests/language_strong/override_inheritance_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/override_inheritance_field_test.dart
rename to tests/language_strong/override_inheritance_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/override_inheritance_generic_test.dart b/tests/language_strong/override_inheritance_generic_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/override_inheritance_generic_test.dart
rename to tests/language_strong/override_inheritance_generic_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/override_inheritance_method_test.dart b/tests/language_strong/override_inheritance_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/override_inheritance_method_test.dart
rename to tests/language_strong/override_inheritance_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/override_inheritance_mixed_test.dart b/tests/language_strong/override_inheritance_mixed_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/override_inheritance_mixed_test.dart
rename to tests/language_strong/override_inheritance_mixed_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/override_inheritance_no_such_method_test.dart b/tests/language_strong/override_inheritance_no_such_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/override_inheritance_no_such_method_test.dart
rename to tests/language_strong/override_inheritance_no_such_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/override_method_with_field_test.dart b/tests/language_strong/override_method_with_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/override_method_with_field_test.dart
rename to tests/language_strong/override_method_with_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/param1_test.dart b/tests/language_strong/param1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/param1_test.dart
rename to tests/language_strong/param1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/param2_test.dart b/tests/language_strong/param2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/param2_test.dart
rename to tests/language_strong/param2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/param_test.dart b/tests/language_strong/param_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/param_test.dart
rename to tests/language_strong/param_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/parameter_default_test.dart b/tests/language_strong/parameter_default_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/parameter_default_test.dart
rename to tests/language_strong/parameter_default_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/parameter_initializer1_negative_test.dart b/tests/language_strong/parameter_initializer1_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/parameter_initializer1_negative_test.dart
rename to tests/language_strong/parameter_initializer1_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/parameter_initializer2_negative_test.dart b/tests/language_strong/parameter_initializer2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/parameter_initializer2_negative_test.dart
rename to tests/language_strong/parameter_initializer2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/parameter_initializer2_test.dart b/tests/language_strong/parameter_initializer2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/parameter_initializer2_test.dart
rename to tests/language_strong/parameter_initializer2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/parameter_initializer3_negative_test.dart b/tests/language_strong/parameter_initializer3_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/parameter_initializer3_negative_test.dart
rename to tests/language_strong/parameter_initializer3_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/parameter_initializer4_negative_test.dart b/tests/language_strong/parameter_initializer4_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/parameter_initializer4_negative_test.dart
rename to tests/language_strong/parameter_initializer4_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/parameter_initializer5_test.dart b/tests/language_strong/parameter_initializer5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/parameter_initializer5_test.dart
rename to tests/language_strong/parameter_initializer5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/parameter_initializer6_negative_test.dart b/tests/language_strong/parameter_initializer6_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/parameter_initializer6_negative_test.dart
rename to tests/language_strong/parameter_initializer6_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/parameter_initializer_test.dart b/tests/language_strong/parameter_initializer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/parameter_initializer_test.dart
rename to tests/language_strong/parameter_initializer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/parameter_metadata_test.dart b/tests/language_strong/parameter_metadata_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/parameter_metadata_test.dart
rename to tests/language_strong/parameter_metadata_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/parameter_name_conflict_test.dart b/tests/language_strong/parameter_name_conflict_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/parameter_name_conflict_test.dart
rename to tests/language_strong/parameter_name_conflict_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/parameter_types_specialization_test.dart b/tests/language_strong/parameter_types_specialization_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/parameter_types_specialization_test.dart
rename to tests/language_strong/parameter_types_specialization_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/parse_closures_in_initializers_test.dart b/tests/language_strong/parse_closures_in_initializers_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/parse_closures_in_initializers_test.dart
rename to tests/language_strong/parse_closures_in_initializers_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/parse_types_test.dart b/tests/language_strong/parse_types_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/parse_types_test.dart
rename to tests/language_strong/parse_types_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/parser_quirks_test.dart b/tests/language_strong/parser_quirks_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/parser_quirks_test.dart
rename to tests/language_strong/parser_quirks_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/part2_test.dart b/tests/language_strong/part2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/part2_test.dart
rename to tests/language_strong/part2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/part_part.dart b/tests/language_strong/part_part.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/part_part.dart
rename to tests/language_strong/part_part.dart
diff --git a/pkg/dev_compiler/test/codegen/language/part_test.dart b/tests/language_strong/part_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/part_test.dart
rename to tests/language_strong/part_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/partial_min_test.dart b/tests/language_strong/partial_min_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/partial_min_test.dart
rename to tests/language_strong/partial_min_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/patch_test.dart b/tests/language_strong/patch_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/patch_test.dart
rename to tests/language_strong/patch_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/phi_merge_test.dart b/tests/language_strong/phi_merge_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/phi_merge_test.dart
rename to tests/language_strong/phi_merge_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/positional_parameters_type_test.dart b/tests/language_strong/positional_parameters_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/positional_parameters_type_test.dart
rename to tests/language_strong/positional_parameters_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/positive_bit_operations_test.dart b/tests/language_strong/positive_bit_operations_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/positive_bit_operations_test.dart
rename to tests/language_strong/positive_bit_operations_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix101_test.dart b/tests/language_strong/prefix101_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix101_test.dart
rename to tests/language_strong/prefix101_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix10_negative_test.dart b/tests/language_strong/prefix10_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix10_negative_test.dart
rename to tests/language_strong/prefix10_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix10_test.dart b/tests/language_strong/prefix10_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix10_test.dart
rename to tests/language_strong/prefix10_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix11_negative_test.dart b/tests/language_strong/prefix11_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix11_negative_test.dart
rename to tests/language_strong/prefix11_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix11_test.dart b/tests/language_strong/prefix11_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix11_test.dart
rename to tests/language_strong/prefix11_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix12_negative_test.dart b/tests/language_strong/prefix12_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix12_negative_test.dart
rename to tests/language_strong/prefix12_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix12_test.dart b/tests/language_strong/prefix12_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix12_test.dart
rename to tests/language_strong/prefix12_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix13_negative_test.dart b/tests/language_strong/prefix13_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix13_negative_test.dart
rename to tests/language_strong/prefix13_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix14_test.dart b/tests/language_strong/prefix14_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix14_test.dart
rename to tests/language_strong/prefix14_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix15_negative_test.dart b/tests/language_strong/prefix15_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix15_negative_test.dart
rename to tests/language_strong/prefix15_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix15_test.dart b/tests/language_strong/prefix15_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix15_test.dart
rename to tests/language_strong/prefix15_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix16_test.dart b/tests/language_strong/prefix16_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix16_test.dart
rename to tests/language_strong/prefix16_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix17_test.dart b/tests/language_strong/prefix17_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix17_test.dart
rename to tests/language_strong/prefix17_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix18_negative_test.dart b/tests/language_strong/prefix18_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix18_negative_test.dart
rename to tests/language_strong/prefix18_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix1_negative_test.dart b/tests/language_strong/prefix1_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix1_negative_test.dart
rename to tests/language_strong/prefix1_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix21_bad_lib.dart b/tests/language_strong/prefix21_bad_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix21_bad_lib.dart
rename to tests/language_strong/prefix21_bad_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix21_good_lib.dart b/tests/language_strong/prefix21_good_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix21_good_lib.dart
rename to tests/language_strong/prefix21_good_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix21_test.dart b/tests/language_strong/prefix21_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix21_test.dart
rename to tests/language_strong/prefix21_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix22_test.dart b/tests/language_strong/prefix22_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix22_test.dart
rename to tests/language_strong/prefix22_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix23_test.dart b/tests/language_strong/prefix23_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix23_test.dart
rename to tests/language_strong/prefix23_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix24_lib1.dart b/tests/language_strong/prefix24_lib1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix24_lib1.dart
rename to tests/language_strong/prefix24_lib1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix24_lib2.dart b/tests/language_strong/prefix24_lib2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix24_lib2.dart
rename to tests/language_strong/prefix24_lib2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix24_lib3.dart b/tests/language_strong/prefix24_lib3.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix24_lib3.dart
rename to tests/language_strong/prefix24_lib3.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix24_test.dart b/tests/language_strong/prefix24_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix24_test.dart
rename to tests/language_strong/prefix24_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix2_negative_test.dart b/tests/language_strong/prefix2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix2_negative_test.dart
rename to tests/language_strong/prefix2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix3_negative_test.dart b/tests/language_strong/prefix3_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix3_negative_test.dart
rename to tests/language_strong/prefix3_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix4_negative_test.dart b/tests/language_strong/prefix4_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix4_negative_test.dart
rename to tests/language_strong/prefix4_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix5_negative_test.dart b/tests/language_strong/prefix5_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix5_negative_test.dart
rename to tests/language_strong/prefix5_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix6_negative_test.dart b/tests/language_strong/prefix6_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix6_negative_test.dart
rename to tests/language_strong/prefix6_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix7_negative_test.dart b/tests/language_strong/prefix7_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix7_negative_test.dart
rename to tests/language_strong/prefix7_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix8_negative_test.dart b/tests/language_strong/prefix8_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix8_negative_test.dart
rename to tests/language_strong/prefix8_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix_assignment_test.dart b/tests/language_strong/prefix_assignment_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix_assignment_test.dart
rename to tests/language_strong/prefix_assignment_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix_identifier_reference_test.dart b/tests/language_strong/prefix_identifier_reference_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix_identifier_reference_test.dart
rename to tests/language_strong/prefix_identifier_reference_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix_new_test.dart b/tests/language_strong/prefix_new_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix_new_test.dart
rename to tests/language_strong/prefix_new_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix_new_test1.dart b/tests/language_strong/prefix_new_test1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix_new_test1.dart
rename to tests/language_strong/prefix_new_test1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix_new_test2.dart b/tests/language_strong/prefix_new_test2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix_new_test2.dart
rename to tests/language_strong/prefix_new_test2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix_test.dart b/tests/language_strong/prefix_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix_test.dart
rename to tests/language_strong/prefix_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix_test1.dart b/tests/language_strong/prefix_test1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix_test1.dart
rename to tests/language_strong/prefix_test1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix_test2.dart b/tests/language_strong/prefix_test2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix_test2.dart
rename to tests/language_strong/prefix_test2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/prefix_unqualified_invocation_test.dart b/tests/language_strong/prefix_unqualified_invocation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/prefix_unqualified_invocation_test.dart
rename to tests/language_strong/prefix_unqualified_invocation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private1.dart b/tests/language_strong/private1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private1.dart
rename to tests/language_strong/private1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private2.dart b/tests/language_strong/private2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private2.dart
rename to tests/language_strong/private2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private2_lib.dart b/tests/language_strong/private2_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private2_lib.dart
rename to tests/language_strong/private2_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private2_lib.lib b/tests/language_strong/private2_lib.lib
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private2_lib.lib
rename to tests/language_strong/private2_lib.lib
diff --git a/pkg/dev_compiler/test/codegen/language/private2_main.dart b/tests/language_strong/private2_main.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private2_main.dart
rename to tests/language_strong/private2_main.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private2_test.dart b/tests/language_strong/private2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private2_test.dart
rename to tests/language_strong/private2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private3.dart b/tests/language_strong/private3.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private3.dart
rename to tests/language_strong/private3.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private3_test.dart b/tests/language_strong/private3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private3_test.dart
rename to tests/language_strong/private3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private4_test.dart b/tests/language_strong/private4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private4_test.dart
rename to tests/language_strong/private4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_access_lib.dart b/tests/language_strong/private_access_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_access_lib.dart
rename to tests/language_strong/private_access_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_access_test.dart b/tests/language_strong/private_access_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_access_test.dart
rename to tests/language_strong/private_access_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_clash_lib.dart b/tests/language_strong/private_clash_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_clash_lib.dart
rename to tests/language_strong/private_clash_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_clash_test.dart b/tests/language_strong/private_clash_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_clash_test.dart
rename to tests/language_strong/private_clash_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_lib b/tests/language_strong/private_lib
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_lib
rename to tests/language_strong/private_lib
diff --git a/pkg/dev_compiler/test/codegen/language/private_lib.dart b/tests/language_strong/private_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_lib.dart
rename to tests/language_strong/private_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_main.dart b/tests/language_strong/private_main.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_main.dart
rename to tests/language_strong/private_main.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_member1_lib_b.dart b/tests/language_strong/private_member1_lib_b.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_member1_lib_b.dart
rename to tests/language_strong/private_member1_lib_b.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_member1_negative_test.dart b/tests/language_strong/private_member1_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_member1_negative_test.dart
rename to tests/language_strong/private_member1_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_member2_lib_b.dart b/tests/language_strong/private_member2_lib_b.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_member2_lib_b.dart
rename to tests/language_strong/private_member2_lib_b.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_member2_negative_test.dart b/tests/language_strong/private_member2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_member2_negative_test.dart
rename to tests/language_strong/private_member2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_member3_lib_b.dart b/tests/language_strong/private_member3_lib_b.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_member3_lib_b.dart
rename to tests/language_strong/private_member3_lib_b.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_member3_negative_test.dart b/tests/language_strong/private_member3_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_member3_negative_test.dart
rename to tests/language_strong/private_member3_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_member_lib_b.dart b/tests/language_strong/private_member_lib_b.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_member_lib_b.dart
rename to tests/language_strong/private_member_lib_b.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_member_test.dart b/tests/language_strong/private_member_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_member_test.dart
rename to tests/language_strong/private_member_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_mixin2_test.dart b/tests/language_strong/private_mixin2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_mixin2_test.dart
rename to tests/language_strong/private_mixin2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_mixin_exception_throw_test.dart b/tests/language_strong/private_mixin_exception_throw_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_mixin_exception_throw_test.dart
rename to tests/language_strong/private_mixin_exception_throw_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_other.dart b/tests/language_strong/private_other.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_other.dart
rename to tests/language_strong/private_other.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_other.lib b/tests/language_strong/private_other.lib
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_other.lib
rename to tests/language_strong/private_other.lib
diff --git a/pkg/dev_compiler/test/codegen/language/private_other_mixin2.lib b/tests/language_strong/private_other_mixin2.lib
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_other_mixin2.lib
rename to tests/language_strong/private_other_mixin2.lib
diff --git a/pkg/dev_compiler/test/codegen/language/private_selector_lib.dart b/tests/language_strong/private_selector_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_selector_lib.dart
rename to tests/language_strong/private_selector_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_selector_test.dart b/tests/language_strong/private_selector_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_selector_test.dart
rename to tests/language_strong/private_selector_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/private_test.dart b/tests/language_strong/private_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/private_test.dart
rename to tests/language_strong/private_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/propagate_past_constant_test.dart b/tests/language_strong/propagate_past_constant_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/propagate_past_constant_test.dart
rename to tests/language_strong/propagate_past_constant_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/propagated_argument_type_check_test.dart b/tests/language_strong/propagated_argument_type_check_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/propagated_argument_type_check_test.dart
rename to tests/language_strong/propagated_argument_type_check_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/property_field_override_test.dart b/tests/language_strong/property_field_override_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/property_field_override_test.dart
rename to tests/language_strong/property_field_override_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/proxy2_test.dart b/tests/language_strong/proxy2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/proxy2_test.dart
rename to tests/language_strong/proxy2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/proxy3_test.dart b/tests/language_strong/proxy3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/proxy3_test.dart
rename to tests/language_strong/proxy3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/proxy_test.dart b/tests/language_strong/proxy_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/proxy_test.dart
rename to tests/language_strong/proxy_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/pure_function2_test.dart b/tests/language_strong/pure_function2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/pure_function2_test.dart
rename to tests/language_strong/pure_function2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/pure_function_test.dart b/tests/language_strong/pure_function_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/pure_function_test.dart
rename to tests/language_strong/pure_function_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/range_analysis2_test.dart b/tests/language_strong/range_analysis2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/range_analysis2_test.dart
rename to tests/language_strong/range_analysis2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/range_analysis3_test.dart b/tests/language_strong/range_analysis3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/range_analysis3_test.dart
rename to tests/language_strong/range_analysis3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/range_analysis_test.dart b/tests/language_strong/range_analysis_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/range_analysis_test.dart
rename to tests/language_strong/range_analysis_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/raw_string_test.dart b/tests/language_strong/raw_string_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/raw_string_test.dart
rename to tests/language_strong/raw_string_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/readuntil_test.dat b/tests/language_strong/readuntil_test.dat
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/readuntil_test.dat
rename to tests/language_strong/readuntil_test.dat
diff --git a/pkg/dev_compiler/test/codegen/language/recursive_calls_test.dart b/tests/language_strong/recursive_calls_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/recursive_calls_test.dart
rename to tests/language_strong/recursive_calls_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/recursive_generic_test.dart b/tests/language_strong/recursive_generic_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/recursive_generic_test.dart
rename to tests/language_strong/recursive_generic_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/recursive_inheritance_test.dart b/tests/language_strong/recursive_inheritance_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/recursive_inheritance_test.dart
rename to tests/language_strong/recursive_inheritance_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/recursive_loop_phis_test.dart b/tests/language_strong/recursive_loop_phis_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/recursive_loop_phis_test.dart
rename to tests/language_strong/recursive_loop_phis_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/redirecting_constructor_initializer_test.dart b/tests/language_strong/redirecting_constructor_initializer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/redirecting_constructor_initializer_test.dart
rename to tests/language_strong/redirecting_constructor_initializer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/redirecting_factory_default_values_test.dart b/tests/language_strong/redirecting_factory_default_values_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/redirecting_factory_default_values_test.dart
rename to tests/language_strong/redirecting_factory_default_values_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/redirecting_factory_incompatible_signature_test.dart b/tests/language_strong/redirecting_factory_incompatible_signature_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/redirecting_factory_incompatible_signature_test.dart
rename to tests/language_strong/redirecting_factory_incompatible_signature_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/redirecting_factory_infinite_steps_test.dart b/tests/language_strong/redirecting_factory_infinite_steps_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/redirecting_factory_infinite_steps_test.dart
rename to tests/language_strong/redirecting_factory_infinite_steps_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/redirecting_factory_long_test.dart b/tests/language_strong/redirecting_factory_long_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/redirecting_factory_long_test.dart
rename to tests/language_strong/redirecting_factory_long_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/redirecting_factory_malbounded_test.dart b/tests/language_strong/redirecting_factory_malbounded_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/redirecting_factory_malbounded_test.dart
rename to tests/language_strong/redirecting_factory_malbounded_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/redirecting_factory_reflection_test.dart b/tests/language_strong/redirecting_factory_reflection_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/redirecting_factory_reflection_test.dart
rename to tests/language_strong/redirecting_factory_reflection_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/reexport_core_helper.dart b/tests/language_strong/reexport_core_helper.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/reexport_core_helper.dart
rename to tests/language_strong/reexport_core_helper.dart
diff --git a/pkg/dev_compiler/test/codegen/language/reexport_core_test.dart b/tests/language_strong/reexport_core_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/reexport_core_test.dart
rename to tests/language_strong/reexport_core_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/ref_before_declaration_test.dart b/tests/language_strong/ref_before_declaration_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/ref_before_declaration_test.dart
rename to tests/language_strong/ref_before_declaration_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/refine_receiver_null_test.dart b/tests/language_strong/refine_receiver_null_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/refine_receiver_null_test.dart
rename to tests/language_strong/refine_receiver_null_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/reg_ex2_test.dart b/tests/language_strong/reg_ex2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/reg_ex2_test.dart
rename to tests/language_strong/reg_ex2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/reg_exp2_test.dart b/tests/language_strong/reg_exp2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/reg_exp2_test.dart
rename to tests/language_strong/reg_exp2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/reg_exp3_test.dart b/tests/language_strong/reg_exp3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/reg_exp3_test.dart
rename to tests/language_strong/reg_exp3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/reg_exp_test.dart b/tests/language_strong/reg_exp_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/reg_exp_test.dart
rename to tests/language_strong/reg_exp_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_10996_lib.dart b/tests/language_strong/regress_10996_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_10996_lib.dart
rename to tests/language_strong/regress_10996_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_10996_test.dart b/tests/language_strong/regress_10996_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_10996_test.dart
rename to tests/language_strong/regress_10996_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_11010_test.dart b/tests/language_strong/regress_11010_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_11010_test.dart
rename to tests/language_strong/regress_11010_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_11800_test.dart b/tests/language_strong/regress_11800_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_11800_test.dart
rename to tests/language_strong/regress_11800_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_12561_test.dart b/tests/language_strong/regress_12561_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_12561_test.dart
rename to tests/language_strong/regress_12561_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_12615_test.dart b/tests/language_strong/regress_12615_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_12615_test.dart
rename to tests/language_strong/regress_12615_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_13462_0_test.dart b/tests/language_strong/regress_13462_0_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_13462_0_test.dart
rename to tests/language_strong/regress_13462_0_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_13462_1_test.dart b/tests/language_strong/regress_13462_1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_13462_1_test.dart
rename to tests/language_strong/regress_13462_1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_13494_test.dart b/tests/language_strong/regress_13494_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_13494_test.dart
rename to tests/language_strong/regress_13494_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_14105_test.dart b/tests/language_strong/regress_14105_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_14105_test.dart
rename to tests/language_strong/regress_14105_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_14348_test.dart b/tests/language_strong/regress_14348_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_14348_test.dart
rename to tests/language_strong/regress_14348_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_16640_test.dart b/tests/language_strong/regress_16640_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_16640_test.dart
rename to tests/language_strong/regress_16640_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_17382_test.dart b/tests/language_strong/regress_17382_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_17382_test.dart
rename to tests/language_strong/regress_17382_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_18435_test.dart b/tests/language_strong/regress_18435_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_18435_test.dart
rename to tests/language_strong/regress_18435_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_18535_test.dart b/tests/language_strong/regress_18535_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_18535_test.dart
rename to tests/language_strong/regress_18535_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_18865_test.dart b/tests/language_strong/regress_18865_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_18865_test.dart
rename to tests/language_strong/regress_18865_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_19413_bar.dart b/tests/language_strong/regress_19413_bar.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_19413_bar.dart
rename to tests/language_strong/regress_19413_bar.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_19413_foo.dart b/tests/language_strong/regress_19413_foo.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_19413_foo.dart
rename to tests/language_strong/regress_19413_foo.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_19413_test.dart b/tests/language_strong/regress_19413_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_19413_test.dart
rename to tests/language_strong/regress_19413_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_19728_test.dart b/tests/language_strong/regress_19728_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_19728_test.dart
rename to tests/language_strong/regress_19728_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_20074_test.dart b/tests/language_strong/regress_20074_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_20074_test.dart
rename to tests/language_strong/regress_20074_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_20394_lib.dart b/tests/language_strong/regress_20394_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_20394_lib.dart
rename to tests/language_strong/regress_20394_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_20394_test.dart b/tests/language_strong/regress_20394_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_20394_test.dart
rename to tests/language_strong/regress_20394_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_20840_test.dart b/tests/language_strong/regress_20840_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_20840_test.dart
rename to tests/language_strong/regress_20840_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_21016_test.dart b/tests/language_strong/regress_21016_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_21016_test.dart
rename to tests/language_strong/regress_21016_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_21793_test.dart b/tests/language_strong/regress_21793_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_21793_test.dart
rename to tests/language_strong/regress_21793_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_21795_test.dart b/tests/language_strong/regress_21795_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_21795_test.dart
rename to tests/language_strong/regress_21795_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_21912_test.dart b/tests/language_strong/regress_21912_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_21912_test.dart
rename to tests/language_strong/regress_21912_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_21998_1_test.dart b/tests/language_strong/regress_21998_1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_21998_1_test.dart
rename to tests/language_strong/regress_21998_1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_21998_2_test.dart b/tests/language_strong/regress_21998_2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_21998_2_test.dart
rename to tests/language_strong/regress_21998_2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_21998_3_test.dart b/tests/language_strong/regress_21998_3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_21998_3_test.dart
rename to tests/language_strong/regress_21998_3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_21998_4_test.dart b/tests/language_strong/regress_21998_4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_21998_4_test.dart
rename to tests/language_strong/regress_21998_4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_21998_lib1.dart b/tests/language_strong/regress_21998_lib1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_21998_lib1.dart
rename to tests/language_strong/regress_21998_lib1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_21998_lib2.dart b/tests/language_strong/regress_21998_lib2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_21998_lib2.dart
rename to tests/language_strong/regress_21998_lib2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_21998_lib3.dart b/tests/language_strong/regress_21998_lib3.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_21998_lib3.dart
rename to tests/language_strong/regress_21998_lib3.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_22438_test.dart b/tests/language_strong/regress_22438_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_22438_test.dart
rename to tests/language_strong/regress_22438_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_22443_lib.dart b/tests/language_strong/regress_22443_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_22443_lib.dart
rename to tests/language_strong/regress_22443_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_22443_test.dart b/tests/language_strong/regress_22443_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_22443_test.dart
rename to tests/language_strong/regress_22443_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_22445_test.dart b/tests/language_strong/regress_22445_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_22445_test.dart
rename to tests/language_strong/regress_22445_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_22579_test.dart b/tests/language_strong/regress_22579_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_22579_test.dart
rename to tests/language_strong/regress_22579_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_22666_test.dart b/tests/language_strong/regress_22666_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_22666_test.dart
rename to tests/language_strong/regress_22666_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_22700_test.dart b/tests/language_strong/regress_22700_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_22700_test.dart
rename to tests/language_strong/regress_22700_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_22719_test.dart b/tests/language_strong/regress_22719_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_22719_test.dart
rename to tests/language_strong/regress_22719_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_22728_test.dart b/tests/language_strong/regress_22728_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_22728_test.dart
rename to tests/language_strong/regress_22728_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_22777_test.dart b/tests/language_strong/regress_22777_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_22777_test.dart
rename to tests/language_strong/regress_22777_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_22822_test.dart b/tests/language_strong/regress_22822_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_22822_test.dart
rename to tests/language_strong/regress_22822_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_22858_test.dart b/tests/language_strong/regress_22858_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_22858_test.dart
rename to tests/language_strong/regress_22858_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_22936_test.dart b/tests/language_strong/regress_22936_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_22936_test.dart
rename to tests/language_strong/regress_22936_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_22976_test.dart b/tests/language_strong/regress_22976_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_22976_test.dart
rename to tests/language_strong/regress_22976_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_23038_test.dart b/tests/language_strong/regress_23038_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_23038_test.dart
rename to tests/language_strong/regress_23038_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_23046_test.dart b/tests/language_strong/regress_23046_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_23046_test.dart
rename to tests/language_strong/regress_23046_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_23051_test.dart b/tests/language_strong/regress_23051_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_23051_test.dart
rename to tests/language_strong/regress_23051_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_23089_test.dart b/tests/language_strong/regress_23089_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_23089_test.dart
rename to tests/language_strong/regress_23089_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_23408_lib.dart b/tests/language_strong/regress_23408_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_23408_lib.dart
rename to tests/language_strong/regress_23408_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_23408_test.dart b/tests/language_strong/regress_23408_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_23408_test.dart
rename to tests/language_strong/regress_23408_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_23498_test.dart b/tests/language_strong/regress_23498_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_23498_test.dart
rename to tests/language_strong/regress_23498_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_23500_test.dart b/tests/language_strong/regress_23500_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_23500_test.dart
rename to tests/language_strong/regress_23500_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_23537_test.dart b/tests/language_strong/regress_23537_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_23537_test.dart
rename to tests/language_strong/regress_23537_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_23650_test.dart b/tests/language_strong/regress_23650_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_23650_test.dart
rename to tests/language_strong/regress_23650_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/regress_r24720_test.dart b/tests/language_strong/regress_r24720_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/regress_r24720_test.dart
rename to tests/language_strong/regress_r24720_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/reify_typevar_static_test.dart b/tests/language_strong/reify_typevar_static_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/reify_typevar_static_test.dart
rename to tests/language_strong/reify_typevar_static_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/reify_typevar_test.dart b/tests/language_strong/reify_typevar_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/reify_typevar_test.dart
rename to tests/language_strong/reify_typevar_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/resolution_test.dart b/tests/language_strong/resolution_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/resolution_test.dart
rename to tests/language_strong/resolution_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/resolve_test.dart b/tests/language_strong/resolve_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/resolve_test.dart
rename to tests/language_strong/resolve_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/rethrow_test.dart b/tests/language_strong/rethrow_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/rethrow_test.dart
rename to tests/language_strong/rethrow_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/return_in_loop_test.dart b/tests/language_strong/return_in_loop_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/return_in_loop_test.dart
rename to tests/language_strong/return_in_loop_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/return_this_type_test.dart b/tests/language_strong/return_this_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/return_this_type_test.dart
rename to tests/language_strong/return_this_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/return_type_test.dart b/tests/language_strong/return_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/return_type_test.dart
rename to tests/language_strong/return_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/rewrite_assign_test.dart b/tests/language_strong/rewrite_assign_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/rewrite_assign_test.dart
rename to tests/language_strong/rewrite_assign_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/rewrite_compound_assign_test.dart b/tests/language_strong/rewrite_compound_assign_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/rewrite_compound_assign_test.dart
rename to tests/language_strong/rewrite_compound_assign_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/rewrite_conditional_test.dart b/tests/language_strong/rewrite_conditional_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/rewrite_conditional_test.dart
rename to tests/language_strong/rewrite_conditional_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/rewrite_for_update_order_test.dart b/tests/language_strong/rewrite_for_update_order_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/rewrite_for_update_order_test.dart
rename to tests/language_strong/rewrite_for_update_order_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/rewrite_if_empty_then_test.dart b/tests/language_strong/rewrite_if_empty_then_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/rewrite_if_empty_then_test.dart
rename to tests/language_strong/rewrite_if_empty_then_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/rewrite_if_return_test.dart b/tests/language_strong/rewrite_if_return_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/rewrite_if_return_test.dart
rename to tests/language_strong/rewrite_if_return_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/rewrite_if_swap_test.dart b/tests/language_strong/rewrite_if_swap_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/rewrite_if_swap_test.dart
rename to tests/language_strong/rewrite_if_swap_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/rewrite_implicit_this_test.dart b/tests/language_strong/rewrite_implicit_this_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/rewrite_implicit_this_test.dart
rename to tests/language_strong/rewrite_implicit_this_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/rewrite_logical_test.dart b/tests/language_strong/rewrite_logical_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/rewrite_logical_test.dart
rename to tests/language_strong/rewrite_logical_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/rewrite_nested_if1_test.dart b/tests/language_strong/rewrite_nested_if1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/rewrite_nested_if1_test.dart
rename to tests/language_strong/rewrite_nested_if1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/rewrite_nested_if2_test.dart b/tests/language_strong/rewrite_nested_if2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/rewrite_nested_if2_test.dart
rename to tests/language_strong/rewrite_nested_if2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/rewrite_nested_if3_test.dart b/tests/language_strong/rewrite_nested_if3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/rewrite_nested_if3_test.dart
rename to tests/language_strong/rewrite_nested_if3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/rewrite_swap_test.dart b/tests/language_strong/rewrite_swap_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/rewrite_swap_test.dart
rename to tests/language_strong/rewrite_swap_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/rewrite_variable_initializer_test.dart b/tests/language_strong/rewrite_variable_initializer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/rewrite_variable_initializer_test.dart
rename to tests/language_strong/rewrite_variable_initializer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/rewrite_while_many_exits_test.dart b/tests/language_strong/rewrite_while_many_exits_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/rewrite_while_many_exits_test.dart
rename to tests/language_strong/rewrite_while_many_exits_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/rewrite_while_test.dart b/tests/language_strong/rewrite_while_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/rewrite_while_test.dart
rename to tests/language_strong/rewrite_while_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/round_test.dart b/tests/language_strong/round_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/round_test.dart
rename to tests/language_strong/round_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/runtime_type_test.dart b/tests/language_strong/runtime_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/runtime_type_test.dart
rename to tests/language_strong/runtime_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/savannah_test.dart b/tests/language_strong/savannah_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/savannah_test.dart
rename to tests/language_strong/savannah_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/scanner_test.dart b/tests/language_strong/scanner_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/scanner_test.dart
rename to tests/language_strong/scanner_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/scope_variable_test.dart b/tests/language_strong/scope_variable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/scope_variable_test.dart
rename to tests/language_strong/scope_variable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/scoped_variables_try_catch_test.dart b/tests/language_strong/scoped_variables_try_catch_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/scoped_variables_try_catch_test.dart
rename to tests/language_strong/scoped_variables_try_catch_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/script1_negative_lib.dart b/tests/language_strong/script1_negative_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/script1_negative_lib.dart
rename to tests/language_strong/script1_negative_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/script1_negative_test.dart b/tests/language_strong/script1_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/script1_negative_test.dart
rename to tests/language_strong/script1_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/script2_negative_lib.dart b/tests/language_strong/script2_negative_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/script2_negative_lib.dart
rename to tests/language_strong/script2_negative_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/script2_negative_source.dart b/tests/language_strong/script2_negative_source.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/script2_negative_source.dart
rename to tests/language_strong/script2_negative_source.dart
diff --git a/pkg/dev_compiler/test/codegen/language/script2_negative_test.dart b/tests/language_strong/script2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/script2_negative_test.dart
rename to tests/language_strong/script2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/script_lib.dart b/tests/language_strong/script_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/script_lib.dart
rename to tests/language_strong/script_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/script_source.dart b/tests/language_strong/script_source.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/script_source.dart
rename to tests/language_strong/script_source.dart
diff --git a/pkg/dev_compiler/test/codegen/language/second_test.dart b/tests/language_strong/second_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/second_test.dart
rename to tests/language_strong/second_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/setter0_test.dart b/tests/language_strong/setter0_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/setter0_test.dart
rename to tests/language_strong/setter0_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/setter1_test.dart b/tests/language_strong/setter1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/setter1_test.dart
rename to tests/language_strong/setter1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/setter2_test.dart b/tests/language_strong/setter2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/setter2_test.dart
rename to tests/language_strong/setter2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/setter3_test.dart b/tests/language_strong/setter3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/setter3_test.dart
rename to tests/language_strong/setter3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/setter4_test.dart b/tests/language_strong/setter4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/setter4_test.dart
rename to tests/language_strong/setter4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/setter_declaration2_negative_test.dart b/tests/language_strong/setter_declaration2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/setter_declaration2_negative_test.dart
rename to tests/language_strong/setter_declaration2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/setter_declaration_negative_test.dart b/tests/language_strong/setter_declaration_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/setter_declaration_negative_test.dart
rename to tests/language_strong/setter_declaration_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/setter_no_getter_call_test.dart b/tests/language_strong/setter_no_getter_call_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/setter_no_getter_call_test.dart
rename to tests/language_strong/setter_no_getter_call_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/setter_no_getter_test.dart b/tests/language_strong/setter_no_getter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/setter_no_getter_test.dart
rename to tests/language_strong/setter_no_getter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/setter_override2_test.dart b/tests/language_strong/setter_override2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/setter_override2_test.dart
rename to tests/language_strong/setter_override2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/setter_override3_test.dart b/tests/language_strong/setter_override3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/setter_override3_test.dart
rename to tests/language_strong/setter_override3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/setter_override_test.dart b/tests/language_strong/setter_override_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/setter_override_test.dart
rename to tests/language_strong/setter_override_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/side_effect_throw_test.dart b/tests/language_strong/side_effect_throw_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/side_effect_throw_test.dart
rename to tests/language_strong/side_effect_throw_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/skip_expression_test.dart b/tests/language_strong/skip_expression_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/skip_expression_test.dart
rename to tests/language_strong/skip_expression_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/smaller_4_Interface_Types_A11_t01_test.dart b/tests/language_strong/smaller_4_Interface_Types_A11_t01_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/smaller_4_Interface_Types_A11_t01_test.dart
rename to tests/language_strong/smaller_4_Interface_Types_A11_t01_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/smaller_4_Interface_Types_A11_t02_test.dart b/tests/language_strong/smaller_4_Interface_Types_A11_t02_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/smaller_4_Interface_Types_A11_t02_test.dart
rename to tests/language_strong/smaller_4_Interface_Types_A11_t02_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/smi_type_test.dart b/tests/language_strong/smi_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/smi_type_test.dart
rename to tests/language_strong/smi_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/source_self_negative_test.dart b/tests/language_strong/source_self_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/source_self_negative_test.dart
rename to tests/language_strong/source_self_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/stack_overflow_stacktrace_test.dart b/tests/language_strong/stack_overflow_stacktrace_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/stack_overflow_stacktrace_test.dart
rename to tests/language_strong/stack_overflow_stacktrace_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/stack_overflow_test.dart b/tests/language_strong/stack_overflow_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/stack_overflow_test.dart
rename to tests/language_strong/stack_overflow_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/stack_trace_test.dart b/tests/language_strong/stack_trace_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/stack_trace_test.dart
rename to tests/language_strong/stack_trace_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/stacktrace_rethrow_error_test.dart b/tests/language_strong/stacktrace_rethrow_error_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/stacktrace_rethrow_error_test.dart
rename to tests/language_strong/stacktrace_rethrow_error_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/stacktrace_rethrow_nonerror_test.dart b/tests/language_strong/stacktrace_rethrow_nonerror_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/stacktrace_rethrow_nonerror_test.dart
rename to tests/language_strong/stacktrace_rethrow_nonerror_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/stacktrace_test.dart b/tests/language_strong/stacktrace_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/stacktrace_test.dart
rename to tests/language_strong/stacktrace_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/state_mangling2_test.dart b/tests/language_strong/state_mangling2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/state_mangling2_test.dart
rename to tests/language_strong/state_mangling2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/state_mangling3_test.dart b/tests/language_strong/state_mangling3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/state_mangling3_test.dart
rename to tests/language_strong/state_mangling3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/state_mangling4_test.dart b/tests/language_strong/state_mangling4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/state_mangling4_test.dart
rename to tests/language_strong/state_mangling4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/state_mangling_test.dart b/tests/language_strong/state_mangling_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/state_mangling_test.dart
rename to tests/language_strong/state_mangling_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/statement_test.dart b/tests/language_strong/statement_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/statement_test.dart
rename to tests/language_strong/statement_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_call_wrong_argument_count_negative_test.dart b/tests/language_strong/static_call_wrong_argument_count_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_call_wrong_argument_count_negative_test.dart
rename to tests/language_strong/static_call_wrong_argument_count_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_closure_identical_test.dart b/tests/language_strong/static_closure_identical_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_closure_identical_test.dart
rename to tests/language_strong/static_closure_identical_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_const_field_reserved_name_test.dart b/tests/language_strong/static_const_field_reserved_name_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_const_field_reserved_name_test.dart
rename to tests/language_strong/static_const_field_reserved_name_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_const_field_test.dart b/tests/language_strong/static_const_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_const_field_test.dart
rename to tests/language_strong/static_const_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_field1_test.dart b/tests/language_strong/static_field1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_field1_test.dart
rename to tests/language_strong/static_field1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_field1a_test.dart b/tests/language_strong/static_field1a_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_field1a_test.dart
rename to tests/language_strong/static_field1a_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_field2_test.dart b/tests/language_strong/static_field2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_field2_test.dart
rename to tests/language_strong/static_field2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_field2a_test.dart b/tests/language_strong/static_field2a_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_field2a_test.dart
rename to tests/language_strong/static_field2a_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_field3_test.dart b/tests/language_strong/static_field3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_field3_test.dart
rename to tests/language_strong/static_field3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_field_override1_test.dart b/tests/language_strong/static_field_override1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_field_override1_test.dart
rename to tests/language_strong/static_field_override1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_field_override2_test.dart b/tests/language_strong/static_field_override2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_field_override2_test.dart
rename to tests/language_strong/static_field_override2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_field_override3_test.dart b/tests/language_strong/static_field_override3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_field_override3_test.dart
rename to tests/language_strong/static_field_override3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_field_test.dart b/tests/language_strong/static_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_field_test.dart
rename to tests/language_strong/static_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_final_field2_test.dart b/tests/language_strong/static_final_field2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_final_field2_test.dart
rename to tests/language_strong/static_final_field2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_getter_no_setter1_test.dart b/tests/language_strong/static_getter_no_setter1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_getter_no_setter1_test.dart
rename to tests/language_strong/static_getter_no_setter1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_getter_no_setter2_test.dart b/tests/language_strong/static_getter_no_setter2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_getter_no_setter2_test.dart
rename to tests/language_strong/static_getter_no_setter2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_getter_no_setter3_test.dart b/tests/language_strong/static_getter_no_setter3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_getter_no_setter3_test.dart
rename to tests/language_strong/static_getter_no_setter3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_implicit_closure_test.dart b/tests/language_strong/static_implicit_closure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_implicit_closure_test.dart
rename to tests/language_strong/static_implicit_closure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_initializer_type_error_test.dart b/tests/language_strong/static_initializer_type_error_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_initializer_type_error_test.dart
rename to tests/language_strong/static_initializer_type_error_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_inline_test.dart b/tests/language_strong/static_inline_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_inline_test.dart
rename to tests/language_strong/static_inline_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_parameter_test.dart b/tests/language_strong/static_parameter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_parameter_test.dart
rename to tests/language_strong/static_parameter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_postfix_operator_test.dart b/tests/language_strong/static_postfix_operator_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_postfix_operator_test.dart
rename to tests/language_strong/static_postfix_operator_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_setter_get_test.dart b/tests/language_strong/static_setter_get_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_setter_get_test.dart
rename to tests/language_strong/static_setter_get_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/static_top_level_test.dart b/tests/language_strong/static_top_level_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/static_top_level_test.dart
rename to tests/language_strong/static_top_level_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/strict_equal_test.dart b/tests/language_strong/strict_equal_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/strict_equal_test.dart
rename to tests/language_strong/strict_equal_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_charcode_test.dart b/tests/language_strong/string_charcode_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_charcode_test.dart
rename to tests/language_strong/string_charcode_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_escape2_negative_test_helper.dart b/tests/language_strong/string_escape2_negative_test_helper.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_escape2_negative_test_helper.dart
rename to tests/language_strong/string_escape2_negative_test_helper.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_escape3_negative_test_helper.dart b/tests/language_strong/string_escape3_negative_test_helper.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_escape3_negative_test_helper.dart
rename to tests/language_strong/string_escape3_negative_test_helper.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_escape4_negative_test.dart b/tests/language_strong/string_escape4_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_escape4_negative_test.dart
rename to tests/language_strong/string_escape4_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_escapes_test.dart b/tests/language_strong/string_escapes_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_escapes_test.dart
rename to tests/language_strong/string_escapes_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_interpolate1_negative_test.dart b/tests/language_strong/string_interpolate1_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_interpolate1_negative_test.dart
rename to tests/language_strong/string_interpolate1_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_interpolate2_negative_test.dart b/tests/language_strong/string_interpolate2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_interpolate2_negative_test.dart
rename to tests/language_strong/string_interpolate2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_interpolate2_test.dart b/tests/language_strong/string_interpolate2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_interpolate2_test.dart
rename to tests/language_strong/string_interpolate2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_interpolate_null_test.dart b/tests/language_strong/string_interpolate_null_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_interpolate_null_test.dart
rename to tests/language_strong/string_interpolate_null_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_interpolate_test.dart b/tests/language_strong/string_interpolate_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_interpolate_test.dart
rename to tests/language_strong/string_interpolate_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_interpolation1_negative_test.dart b/tests/language_strong/string_interpolation1_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_interpolation1_negative_test.dart
rename to tests/language_strong/string_interpolation1_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_interpolation2_negative_test.dart b/tests/language_strong/string_interpolation2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_interpolation2_negative_test.dart
rename to tests/language_strong/string_interpolation2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_interpolation3_negative_test.dart b/tests/language_strong/string_interpolation3_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_interpolation3_negative_test.dart
rename to tests/language_strong/string_interpolation3_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_interpolation4_negative_test.dart b/tests/language_strong/string_interpolation4_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_interpolation4_negative_test.dart
rename to tests/language_strong/string_interpolation4_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_interpolation5_negative_test.dart b/tests/language_strong/string_interpolation5_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_interpolation5_negative_test.dart
rename to tests/language_strong/string_interpolation5_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_interpolation6_negative_test.dart b/tests/language_strong/string_interpolation6_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_interpolation6_negative_test.dart
rename to tests/language_strong/string_interpolation6_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_interpolation7_test.dart b/tests/language_strong/string_interpolation7_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_interpolation7_test.dart
rename to tests/language_strong/string_interpolation7_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_interpolation8_test.dart b/tests/language_strong/string_interpolation8_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_interpolation8_test.dart
rename to tests/language_strong/string_interpolation8_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_interpolation9_test.dart b/tests/language_strong/string_interpolation9_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_interpolation9_test.dart
rename to tests/language_strong/string_interpolation9_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_interpolation_and_buffer_test.dart b/tests/language_strong/string_interpolation_and_buffer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_interpolation_and_buffer_test.dart
rename to tests/language_strong/string_interpolation_and_buffer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_interpolation_newline_test.dart b/tests/language_strong/string_interpolation_newline_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_interpolation_newline_test.dart
rename to tests/language_strong/string_interpolation_newline_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_interpolation_test.dart b/tests/language_strong/string_interpolation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_interpolation_test.dart
rename to tests/language_strong/string_interpolation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_intrinsics_test.dart b/tests/language_strong/string_intrinsics_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_intrinsics_test.dart
rename to tests/language_strong/string_intrinsics_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_join_test.dart b/tests/language_strong/string_join_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_join_test.dart
rename to tests/language_strong/string_join_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_no_operator_test.dart b/tests/language_strong/string_no_operator_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_no_operator_test.dart
rename to tests/language_strong/string_no_operator_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_optimizations_test.dart b/tests/language_strong/string_optimizations_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_optimizations_test.dart
rename to tests/language_strong/string_optimizations_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_overflow.dart b/tests/language_strong/string_overflow.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_overflow.dart
rename to tests/language_strong/string_overflow.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_split_test.dart b/tests/language_strong/string_split_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_split_test.dart
rename to tests/language_strong/string_split_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_supertype_checked_test.dart b/tests/language_strong/string_supertype_checked_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_supertype_checked_test.dart
rename to tests/language_strong/string_supertype_checked_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_test.dart b/tests/language_strong/string_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_test.dart
rename to tests/language_strong/string_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_unicode1_negative_test.dart b/tests/language_strong/string_unicode1_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_unicode1_negative_test.dart
rename to tests/language_strong/string_unicode1_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_unicode2_negative_test.dart b/tests/language_strong/string_unicode2_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_unicode2_negative_test.dart
rename to tests/language_strong/string_unicode2_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_unicode3_negative_test.dart b/tests/language_strong/string_unicode3_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_unicode3_negative_test.dart
rename to tests/language_strong/string_unicode3_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/string_unicode4_negative_test.dart b/tests/language_strong/string_unicode4_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/string_unicode4_negative_test.dart
rename to tests/language_strong/string_unicode4_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/sub/sub.dart b/tests/language_strong/sub/sub.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/sub/sub.dart
rename to tests/language_strong/sub/sub.dart
diff --git a/pkg/dev_compiler/test/codegen/language/substring_test.dart b/tests/language_strong/substring_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/substring_test.dart
rename to tests/language_strong/substring_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_abstract_method_test.dart b/tests/language_strong/super_abstract_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_abstract_method_test.dart
rename to tests/language_strong/super_abstract_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_all_named_constructor_test.dart b/tests/language_strong/super_all_named_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_all_named_constructor_test.dart
rename to tests/language_strong/super_all_named_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_assign_test.dart b/tests/language_strong/super_assign_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_assign_test.dart
rename to tests/language_strong/super_assign_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_bound_closure_test.dart b/tests/language_strong/super_bound_closure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_bound_closure_test.dart
rename to tests/language_strong/super_bound_closure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_call2_test.dart b/tests/language_strong/super_call2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_call2_test.dart
rename to tests/language_strong/super_call2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_call3_test.dart b/tests/language_strong/super_call3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_call3_test.dart
rename to tests/language_strong/super_call3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_call4_test.dart b/tests/language_strong/super_call4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_call4_test.dart
rename to tests/language_strong/super_call4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_call_test.dart b/tests/language_strong/super_call_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_call_test.dart
rename to tests/language_strong/super_call_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_closure_test.dart b/tests/language_strong/super_closure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_closure_test.dart
rename to tests/language_strong/super_closure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_conditional_operator_test.dart b/tests/language_strong/super_conditional_operator_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_conditional_operator_test.dart
rename to tests/language_strong/super_conditional_operator_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_field_2_test.dart b/tests/language_strong/super_field_2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_field_2_test.dart
rename to tests/language_strong/super_field_2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_field_access_test.dart b/tests/language_strong/super_field_access_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_field_access_test.dart
rename to tests/language_strong/super_field_access_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_field_test.dart b/tests/language_strong/super_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_field_test.dart
rename to tests/language_strong/super_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_first_constructor_test.dart b/tests/language_strong/super_first_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_first_constructor_test.dart
rename to tests/language_strong/super_first_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_getter_setter_test.dart b/tests/language_strong/super_getter_setter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_getter_setter_test.dart
rename to tests/language_strong/super_getter_setter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_implicit_closure_test.dart b/tests/language_strong/super_implicit_closure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_implicit_closure_test.dart
rename to tests/language_strong/super_implicit_closure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_in_async1_test.dart b/tests/language_strong/super_in_async1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_in_async1_test.dart
rename to tests/language_strong/super_in_async1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_in_async2_test.dart b/tests/language_strong/super_in_async2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_in_async2_test.dart
rename to tests/language_strong/super_in_async2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_in_async3_test.dart b/tests/language_strong/super_in_async3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_in_async3_test.dart
rename to tests/language_strong/super_in_async3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_in_async4_test.dart b/tests/language_strong/super_in_async4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_in_async4_test.dart
rename to tests/language_strong/super_in_async4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_in_async5_test.dart b/tests/language_strong/super_in_async5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_in_async5_test.dart
rename to tests/language_strong/super_in_async5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_in_async6_test.dart b/tests/language_strong/super_in_async6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_in_async6_test.dart
rename to tests/language_strong/super_in_async6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_in_finally_test.dart b/tests/language_strong/super_in_finally_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_in_finally_test.dart
rename to tests/language_strong/super_in_finally_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_inferrer_test.dart b/tests/language_strong/super_inferrer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_inferrer_test.dart
rename to tests/language_strong/super_inferrer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_operator_index2_test.dart b/tests/language_strong/super_operator_index2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_operator_index2_test.dart
rename to tests/language_strong/super_operator_index2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_operator_index3_test.dart b/tests/language_strong/super_operator_index3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_operator_index3_test.dart
rename to tests/language_strong/super_operator_index3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_operator_index4_test.dart b/tests/language_strong/super_operator_index4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_operator_index4_test.dart
rename to tests/language_strong/super_operator_index4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_operator_index5_test.dart b/tests/language_strong/super_operator_index5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_operator_index5_test.dart
rename to tests/language_strong/super_operator_index5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_operator_index6_test.dart b/tests/language_strong/super_operator_index6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_operator_index6_test.dart
rename to tests/language_strong/super_operator_index6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_operator_index7_test.dart b/tests/language_strong/super_operator_index7_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_operator_index7_test.dart
rename to tests/language_strong/super_operator_index7_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_operator_index8_test.dart b/tests/language_strong/super_operator_index8_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_operator_index8_test.dart
rename to tests/language_strong/super_operator_index8_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_operator_index_test.dart b/tests/language_strong/super_operator_index_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_operator_index_test.dart
rename to tests/language_strong/super_operator_index_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_operator_test.dart b/tests/language_strong/super_operator_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_operator_test.dart
rename to tests/language_strong/super_operator_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_setter_interceptor_test.dart b/tests/language_strong/super_setter_interceptor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_setter_interceptor_test.dart
rename to tests/language_strong/super_setter_interceptor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_setter_test.dart b/tests/language_strong/super_setter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_setter_test.dart
rename to tests/language_strong/super_setter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/super_test.dart b/tests/language_strong/super_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/super_test.dart
rename to tests/language_strong/super_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/switch1_negative_test.dart b/tests/language_strong/switch1_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/switch1_negative_test.dart
rename to tests/language_strong/switch1_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/switch3_negative_test.dart b/tests/language_strong/switch3_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/switch3_negative_test.dart
rename to tests/language_strong/switch3_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/switch4_negative_test.dart b/tests/language_strong/switch4_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/switch4_negative_test.dart
rename to tests/language_strong/switch4_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/switch5_negative_test.dart b/tests/language_strong/switch5_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/switch5_negative_test.dart
rename to tests/language_strong/switch5_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/switch6_test.dart b/tests/language_strong/switch6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/switch6_test.dart
rename to tests/language_strong/switch6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/switch7_negative_test.dart b/tests/language_strong/switch7_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/switch7_negative_test.dart
rename to tests/language_strong/switch7_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/switch8_test.dart b/tests/language_strong/switch8_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/switch8_test.dart
rename to tests/language_strong/switch8_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/switch_bad_case_test.dart b/tests/language_strong/switch_bad_case_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/switch_bad_case_test.dart
rename to tests/language_strong/switch_bad_case_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/switch_case_static_const_test.dart b/tests/language_strong/switch_case_static_const_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/switch_case_static_const_test.dart
rename to tests/language_strong/switch_case_static_const_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/switch_case_test.dart b/tests/language_strong/switch_case_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/switch_case_test.dart
rename to tests/language_strong/switch_case_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/switch_fallthru_test.dart b/tests/language_strong/switch_fallthru_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/switch_fallthru_test.dart
rename to tests/language_strong/switch_fallthru_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/switch_label2_test.dart b/tests/language_strong/switch_label2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/switch_label2_test.dart
rename to tests/language_strong/switch_label2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/switch_label_test.dart b/tests/language_strong/switch_label_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/switch_label_test.dart
rename to tests/language_strong/switch_label_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/switch_scope_test.dart b/tests/language_strong/switch_scope_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/switch_scope_test.dart
rename to tests/language_strong/switch_scope_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/switch_test.dart b/tests/language_strong/switch_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/switch_test.dart
rename to tests/language_strong/switch_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/switch_try_catch_test.dart b/tests/language_strong/switch_try_catch_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/switch_try_catch_test.dart
rename to tests/language_strong/switch_try_catch_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/symbol_conflict_test.dart b/tests/language_strong/symbol_conflict_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/symbol_conflict_test.dart
rename to tests/language_strong/symbol_conflict_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/symbol_literal_test.dart b/tests/language_strong/symbol_literal_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/symbol_literal_test.dart
rename to tests/language_strong/symbol_literal_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/sync_generator1_test.dart b/tests/language_strong/sync_generator1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/sync_generator1_test.dart
rename to tests/language_strong/sync_generator1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/sync_generator2_test.dart b/tests/language_strong/sync_generator2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/sync_generator2_test.dart
rename to tests/language_strong/sync_generator2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/sync_generator3_test.dart b/tests/language_strong/sync_generator3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/sync_generator3_test.dart
rename to tests/language_strong/sync_generator3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/syncstar_less_than_test.dart b/tests/language_strong/syncstar_less_than_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/syncstar_less_than_test.dart
rename to tests/language_strong/syncstar_less_than_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/syncstar_yield_test.dart b/tests/language_strong/syncstar_yield_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/syncstar_yield_test.dart
rename to tests/language_strong/syncstar_yield_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/syncstar_yieldstar_test.dart b/tests/language_strong/syncstar_yieldstar_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/syncstar_yieldstar_test.dart
rename to tests/language_strong/syncstar_yieldstar_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/syntax_test.dart b/tests/language_strong/syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/syntax_test.dart
rename to tests/language_strong/syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/tearoff_basic_lib.dart b/tests/language_strong/tearoff_basic_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/tearoff_basic_lib.dart
rename to tests/language_strong/tearoff_basic_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/language/tearoff_basic_test.dart b/tests/language_strong/tearoff_basic_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/tearoff_basic_test.dart
rename to tests/language_strong/tearoff_basic_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/tearoff_constructor_basic_test.dart b/tests/language_strong/tearoff_constructor_basic_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/tearoff_constructor_basic_test.dart
rename to tests/language_strong/tearoff_constructor_basic_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/temp_mangling_test.dart b/tests/language_strong/temp_mangling_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/temp_mangling_test.dart
rename to tests/language_strong/temp_mangling_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/ternary_test.dart b/tests/language_strong/ternary_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/ternary_test.dart
rename to tests/language_strong/ternary_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/test_negative_test.dart b/tests/language_strong/test_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/test_negative_test.dart
rename to tests/language_strong/test_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/third_test.dart b/tests/language_strong/third_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/third_test.dart
rename to tests/language_strong/third_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/this_conditional_operator_test.dart b/tests/language_strong/this_conditional_operator_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/this_conditional_operator_test.dart
rename to tests/language_strong/this_conditional_operator_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/this_test.dart b/tests/language_strong/this_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/this_test.dart
rename to tests/language_strong/this_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/throw1_test.dart b/tests/language_strong/throw1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/throw1_test.dart
rename to tests/language_strong/throw1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/throw2_test.dart b/tests/language_strong/throw2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/throw2_test.dart
rename to tests/language_strong/throw2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/throw3_test.dart b/tests/language_strong/throw3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/throw3_test.dart
rename to tests/language_strong/throw3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/throw4_test.dart b/tests/language_strong/throw4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/throw4_test.dart
rename to tests/language_strong/throw4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/throw5_test.dart b/tests/language_strong/throw5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/throw5_test.dart
rename to tests/language_strong/throw5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/throw6_test.dart b/tests/language_strong/throw6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/throw6_test.dart
rename to tests/language_strong/throw6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/throw8_test.dart b/tests/language_strong/throw8_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/throw8_test.dart
rename to tests/language_strong/throw8_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/throw_expr_test.dart b/tests/language_strong/throw_expr_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/throw_expr_test.dart
rename to tests/language_strong/throw_expr_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/throw_test.dart b/tests/language_strong/throw_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/throw_test.dart
rename to tests/language_strong/throw_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/throwing_lazy_variable_test.dart b/tests/language_strong/throwing_lazy_variable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/throwing_lazy_variable_test.dart
rename to tests/language_strong/throwing_lazy_variable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/top_level_entry.dart b/tests/language_strong/top_level_entry.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/top_level_entry.dart
rename to tests/language_strong/top_level_entry.dart
diff --git a/pkg/dev_compiler/test/codegen/language/top_level_entry_test.dart b/tests/language_strong/top_level_entry_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/top_level_entry_test.dart
rename to tests/language_strong/top_level_entry_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/top_level_file1.dart b/tests/language_strong/top_level_file1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/top_level_file1.dart
rename to tests/language_strong/top_level_file1.dart
diff --git a/pkg/dev_compiler/test/codegen/language/top_level_file2.dart b/tests/language_strong/top_level_file2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/top_level_file2.dart
rename to tests/language_strong/top_level_file2.dart
diff --git a/pkg/dev_compiler/test/codegen/language/top_level_file3.dart b/tests/language_strong/top_level_file3.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/top_level_file3.dart
rename to tests/language_strong/top_level_file3.dart
diff --git a/pkg/dev_compiler/test/codegen/language/top_level_func_test.dart b/tests/language_strong/top_level_func_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/top_level_func_test.dart
rename to tests/language_strong/top_level_func_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/top_level_getter_arrow_syntax_test.dart b/tests/language_strong/top_level_getter_arrow_syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/top_level_getter_arrow_syntax_test.dart
rename to tests/language_strong/top_level_getter_arrow_syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/top_level_getter_no_setter1_test.dart b/tests/language_strong/top_level_getter_no_setter1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/top_level_getter_no_setter1_test.dart
rename to tests/language_strong/top_level_getter_no_setter1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/top_level_getter_no_setter2_test.dart b/tests/language_strong/top_level_getter_no_setter2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/top_level_getter_no_setter2_test.dart
rename to tests/language_strong/top_level_getter_no_setter2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/top_level_in_initializer_test.dart b/tests/language_strong/top_level_in_initializer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/top_level_in_initializer_test.dart
rename to tests/language_strong/top_level_in_initializer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/top_level_method_test.dart b/tests/language_strong/top_level_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/top_level_method_test.dart
rename to tests/language_strong/top_level_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/top_level_multiple_files_test.dart b/tests/language_strong/top_level_multiple_files_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/top_level_multiple_files_test.dart
rename to tests/language_strong/top_level_multiple_files_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/top_level_non_prefixed_library_test.dart b/tests/language_strong/top_level_non_prefixed_library_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/top_level_non_prefixed_library_test.dart
rename to tests/language_strong/top_level_non_prefixed_library_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/top_level_prefixed_declaration_test.dart b/tests/language_strong/top_level_prefixed_declaration_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/top_level_prefixed_declaration_test.dart
rename to tests/language_strong/top_level_prefixed_declaration_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/top_level_prefixed_library_test.lib b/tests/language_strong/top_level_prefixed_library_test.lib
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/top_level_prefixed_library_test.lib
rename to tests/language_strong/top_level_prefixed_library_test.lib
diff --git a/pkg/dev_compiler/test/codegen/language/top_level_var_test.dart b/tests/language_strong/top_level_var_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/top_level_var_test.dart
rename to tests/language_strong/top_level_var_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/toplevel_collision1_test.dart b/tests/language_strong/toplevel_collision1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/toplevel_collision1_test.dart
rename to tests/language_strong/toplevel_collision1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/toplevel_collision2_test.dart b/tests/language_strong/toplevel_collision2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/toplevel_collision2_test.dart
rename to tests/language_strong/toplevel_collision2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/transitive_private_library_access_test.dart b/tests/language_strong/transitive_private_library_access_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/transitive_private_library_access_test.dart
rename to tests/language_strong/transitive_private_library_access_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/tree_shake_typed_selector_test.dart b/tests/language_strong/tree_shake_typed_selector_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/tree_shake_typed_selector_test.dart
rename to tests/language_strong/tree_shake_typed_selector_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/truncdiv_test.dart b/tests/language_strong/truncdiv_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/truncdiv_test.dart
rename to tests/language_strong/truncdiv_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/truncdiv_uint32_test.dart b/tests/language_strong/truncdiv_uint32_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/truncdiv_uint32_test.dart
rename to tests/language_strong/truncdiv_uint32_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/try_catch2_test.dart b/tests/language_strong/try_catch2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/try_catch2_test.dart
rename to tests/language_strong/try_catch2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/try_catch3_test.dart b/tests/language_strong/try_catch3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/try_catch3_test.dart
rename to tests/language_strong/try_catch3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/try_catch4_test.dart b/tests/language_strong/try_catch4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/try_catch4_test.dart
rename to tests/language_strong/try_catch4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/try_catch5_test.dart b/tests/language_strong/try_catch5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/try_catch5_test.dart
rename to tests/language_strong/try_catch5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/try_catch_on_syntax_test.dart b/tests/language_strong/try_catch_on_syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/try_catch_on_syntax_test.dart
rename to tests/language_strong/try_catch_on_syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/try_catch_optimized1_test.dart b/tests/language_strong/try_catch_optimized1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/try_catch_optimized1_test.dart
rename to tests/language_strong/try_catch_optimized1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/try_catch_optimized2_test.dart b/tests/language_strong/try_catch_optimized2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/try_catch_optimized2_test.dart
rename to tests/language_strong/try_catch_optimized2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/try_catch_optimized3_test.dart b/tests/language_strong/try_catch_optimized3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/try_catch_optimized3_test.dart
rename to tests/language_strong/try_catch_optimized3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/try_catch_optimized4_test.dart b/tests/language_strong/try_catch_optimized4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/try_catch_optimized4_test.dart
rename to tests/language_strong/try_catch_optimized4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/try_catch_osr_test.dart b/tests/language_strong/try_catch_osr_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/try_catch_osr_test.dart
rename to tests/language_strong/try_catch_osr_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/try_catch_syntax_test.dart b/tests/language_strong/try_catch_syntax_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/try_catch_syntax_test.dart
rename to tests/language_strong/try_catch_syntax_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/try_catch_test.dart b/tests/language_strong/try_catch_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/try_catch_test.dart
rename to tests/language_strong/try_catch_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_argument_in_super_type_test.dart b/tests/language_strong/type_argument_in_super_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_argument_in_super_type_test.dart
rename to tests/language_strong/type_argument_in_super_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_argument_substitution_test.dart b/tests/language_strong/type_argument_substitution_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_argument_substitution_test.dart
rename to tests/language_strong/type_argument_substitution_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_check_const_function_typedef2_test.dart b/tests/language_strong/type_check_const_function_typedef2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_check_const_function_typedef2_test.dart
rename to tests/language_strong/type_check_const_function_typedef2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_check_const_function_typedef_test.dart b/tests/language_strong/type_check_const_function_typedef_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_check_const_function_typedef_test.dart
rename to tests/language_strong/type_check_const_function_typedef_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_check_test.dart b/tests/language_strong/type_check_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_check_test.dart
rename to tests/language_strong/type_check_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_checks_in_factory_method_test.dart b/tests/language_strong/type_checks_in_factory_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_checks_in_factory_method_test.dart
rename to tests/language_strong/type_checks_in_factory_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_conversion_ssa_test.dart b/tests/language_strong/type_conversion_ssa_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_conversion_ssa_test.dart
rename to tests/language_strong/type_conversion_ssa_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_error_test.dart b/tests/language_strong/type_error_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_error_test.dart
rename to tests/language_strong/type_error_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_guard_conversion_test.dart b/tests/language_strong/type_guard_conversion_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_guard_conversion_test.dart
rename to tests/language_strong/type_guard_conversion_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_hoisting_test.dart b/tests/language_strong/type_hoisting_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_hoisting_test.dart
rename to tests/language_strong/type_hoisting_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_intersection_test.dart b/tests/language_strong/type_intersection_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_intersection_test.dart
rename to tests/language_strong/type_intersection_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_literal_prefix_call_test.dart b/tests/language_strong/type_literal_prefix_call_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_literal_prefix_call_test.dart
rename to tests/language_strong/type_literal_prefix_call_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_literal_test.dart b/tests/language_strong/type_literal_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_literal_test.dart
rename to tests/language_strong/type_literal_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_no_hoisting_test.dart b/tests/language_strong/type_no_hoisting_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_no_hoisting_test.dart
rename to tests/language_strong/type_no_hoisting_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_parameter_literal_test.dart b/tests/language_strong/type_parameter_literal_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_parameter_literal_test.dart
rename to tests/language_strong/type_parameter_literal_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_parameter_test.dart b/tests/language_strong/type_parameter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_parameter_test.dart
rename to tests/language_strong/type_parameter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_promotion_assign_test.dart b/tests/language_strong/type_promotion_assign_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_promotion_assign_test.dart
rename to tests/language_strong/type_promotion_assign_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_promotion_closure_test.dart b/tests/language_strong/type_promotion_closure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_promotion_closure_test.dart
rename to tests/language_strong/type_promotion_closure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_promotion_functions_test.dart b/tests/language_strong/type_promotion_functions_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_promotion_functions_test.dart
rename to tests/language_strong/type_promotion_functions_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_promotion_local_test.dart b/tests/language_strong/type_promotion_local_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_promotion_local_test.dart
rename to tests/language_strong/type_promotion_local_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_promotion_logical_and_test.dart b/tests/language_strong/type_promotion_logical_and_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_promotion_logical_and_test.dart
rename to tests/language_strong/type_promotion_logical_and_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_promotion_more_specific_test.dart b/tests/language_strong/type_promotion_more_specific_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_promotion_more_specific_test.dart
rename to tests/language_strong/type_promotion_more_specific_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_promotion_multiple_test.dart b/tests/language_strong/type_promotion_multiple_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_promotion_multiple_test.dart
rename to tests/language_strong/type_promotion_multiple_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_promotion_parameter_test.dart b/tests/language_strong/type_promotion_parameter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_promotion_parameter_test.dart
rename to tests/language_strong/type_promotion_parameter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_propagation2_test.dart b/tests/language_strong/type_propagation2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_propagation2_test.dart
rename to tests/language_strong/type_propagation2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_propagation3_test.dart b/tests/language_strong/type_propagation3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_propagation3_test.dart
rename to tests/language_strong/type_propagation3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_propagation_assert_assignable_test.dart b/tests/language_strong/type_propagation_assert_assignable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_propagation_assert_assignable_test.dart
rename to tests/language_strong/type_propagation_assert_assignable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_propagation_in_for_update_test.dart b/tests/language_strong/type_propagation_in_for_update_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_propagation_in_for_update_test.dart
rename to tests/language_strong/type_propagation_in_for_update_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_propagation_phi_test.dart b/tests/language_strong/type_propagation_phi_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_propagation_phi_test.dart
rename to tests/language_strong/type_propagation_phi_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_propagation_test.dart b/tests/language_strong/type_propagation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_propagation_test.dart
rename to tests/language_strong/type_propagation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_bounds2_test.dart b/tests/language_strong/type_variable_bounds2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_bounds2_test.dart
rename to tests/language_strong/type_variable_bounds2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_bounds3_test.dart b/tests/language_strong/type_variable_bounds3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_bounds3_test.dart
rename to tests/language_strong/type_variable_bounds3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_bounds4_test.dart b/tests/language_strong/type_variable_bounds4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_bounds4_test.dart
rename to tests/language_strong/type_variable_bounds4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_bounds_test.dart b/tests/language_strong/type_variable_bounds_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_bounds_test.dart
rename to tests/language_strong/type_variable_bounds_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_closure2_test.dart b/tests/language_strong/type_variable_closure2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_closure2_test.dart
rename to tests/language_strong/type_variable_closure2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_closure_test.dart b/tests/language_strong/type_variable_closure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_closure_test.dart
rename to tests/language_strong/type_variable_closure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_conflict2_test.dart b/tests/language_strong/type_variable_conflict2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_conflict2_test.dart
rename to tests/language_strong/type_variable_conflict2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_conflict_test.dart b/tests/language_strong/type_variable_conflict_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_conflict_test.dart
rename to tests/language_strong/type_variable_conflict_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_field_initializer_closure_test.dart b/tests/language_strong/type_variable_field_initializer_closure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_field_initializer_closure_test.dart
rename to tests/language_strong/type_variable_field_initializer_closure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_field_initializer_test.dart b/tests/language_strong/type_variable_field_initializer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_field_initializer_test.dart
rename to tests/language_strong/type_variable_field_initializer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_function_type_test.dart b/tests/language_strong/type_variable_function_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_function_type_test.dart
rename to tests/language_strong/type_variable_function_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_identifier_expression_test.dart b/tests/language_strong/type_variable_identifier_expression_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_identifier_expression_test.dart
rename to tests/language_strong/type_variable_identifier_expression_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_initializer_test.dart b/tests/language_strong/type_variable_initializer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_initializer_test.dart
rename to tests/language_strong/type_variable_initializer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_nested_test.dart b/tests/language_strong/type_variable_nested_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_nested_test.dart
rename to tests/language_strong/type_variable_nested_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_scope2_test.dart b/tests/language_strong/type_variable_scope2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_scope2_test.dart
rename to tests/language_strong/type_variable_scope2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_scope3_test.dart b/tests/language_strong/type_variable_scope3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_scope3_test.dart
rename to tests/language_strong/type_variable_scope3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_scope_test.dart b/tests/language_strong/type_variable_scope_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_scope_test.dart
rename to tests/language_strong/type_variable_scope_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_static_context_negative_test.dart b/tests/language_strong/type_variable_static_context_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_static_context_negative_test.dart
rename to tests/language_strong/type_variable_static_context_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/type_variable_typedef_test.dart b/tests/language_strong/type_variable_typedef_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/type_variable_typedef_test.dart
rename to tests/language_strong/type_variable_typedef_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/typed_equality_test.dart b/tests/language_strong/typed_equality_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/typed_equality_test.dart
rename to tests/language_strong/typed_equality_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/typed_selector2_test.dart b/tests/language_strong/typed_selector2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/typed_selector2_test.dart
rename to tests/language_strong/typed_selector2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/typed_selector_test.dart b/tests/language_strong/typed_selector_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/typed_selector_test.dart
rename to tests/language_strong/typed_selector_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/typedef_is_test.dart b/tests/language_strong/typedef_is_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/typedef_is_test.dart
rename to tests/language_strong/typedef_is_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/typevariable_substitution2_test.dart b/tests/language_strong/typevariable_substitution2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/typevariable_substitution2_test.dart
rename to tests/language_strong/typevariable_substitution2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unary2_test.dart b/tests/language_strong/unary2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unary2_test.dart
rename to tests/language_strong/unary2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unary_plus_negative_test.dart b/tests/language_strong/unary_plus_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unary_plus_negative_test.dart
rename to tests/language_strong/unary_plus_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unary_test.dart b/tests/language_strong/unary_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unary_test.dart
rename to tests/language_strong/unary_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unbalanced_brace_test.dart b/tests/language_strong/unbalanced_brace_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unbalanced_brace_test.dart
rename to tests/language_strong/unbalanced_brace_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unbound_getter_test.dart b/tests/language_strong/unbound_getter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unbound_getter_test.dart
rename to tests/language_strong/unbound_getter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unconditional_break.dart b/tests/language_strong/unconditional_break.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unconditional_break.dart
rename to tests/language_strong/unconditional_break.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unhandled_exception_negative_test.dart b/tests/language_strong/unhandled_exception_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unhandled_exception_negative_test.dart
rename to tests/language_strong/unhandled_exception_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unicode_bom_middle_test.dart b/tests/language_strong/unicode_bom_middle_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unicode_bom_middle_test.dart
rename to tests/language_strong/unicode_bom_middle_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unicode_bom_test.dart b/tests/language_strong/unicode_bom_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unicode_bom_test.dart
rename to tests/language_strong/unicode_bom_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unicode_hash_test.dart b/tests/language_strong/unicode_hash_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unicode_hash_test.dart
rename to tests/language_strong/unicode_hash_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unnamed_closure_test.dart b/tests/language_strong/unnamed_closure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unnamed_closure_test.dart
rename to tests/language_strong/unnamed_closure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unqual_name_test.dart b/tests/language_strong/unqual_name_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unqual_name_test.dart
rename to tests/language_strong/unqual_name_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unresolved_default_constructor_test.dart b/tests/language_strong/unresolved_default_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unresolved_default_constructor_test.dart
rename to tests/language_strong/unresolved_default_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unresolved_in_factory_negative_test.dart b/tests/language_strong/unresolved_in_factory_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unresolved_in_factory_negative_test.dart
rename to tests/language_strong/unresolved_in_factory_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unresolved_top_level_method_negative_test.dart b/tests/language_strong/unresolved_top_level_method_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unresolved_top_level_method_negative_test.dart
rename to tests/language_strong/unresolved_top_level_method_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unresolved_top_level_var_negative_test.dart b/tests/language_strong/unresolved_top_level_var_negative_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unresolved_top_level_var_negative_test.dart
rename to tests/language_strong/unresolved_top_level_var_negative_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unsigned_right_shift_test.dart b/tests/language_strong/unsigned_right_shift_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unsigned_right_shift_test.dart
rename to tests/language_strong/unsigned_right_shift_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/unsupported_operators_test.dart b/tests/language_strong/unsupported_operators_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/unsupported_operators_test.dart
rename to tests/language_strong/unsupported_operators_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/value_range2_test.dart b/tests/language_strong/value_range2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/value_range2_test.dart
rename to tests/language_strong/value_range2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/value_range3_test.dart b/tests/language_strong/value_range3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/value_range3_test.dart
rename to tests/language_strong/value_range3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/value_range_test.dart b/tests/language_strong/value_range_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/value_range_test.dart
rename to tests/language_strong/value_range_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/var_init_test.dart b/tests/language_strong/var_init_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/var_init_test.dart
rename to tests/language_strong/var_init_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/variable_declaration_metadata_test.dart b/tests/language_strong/variable_declaration_metadata_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/variable_declaration_metadata_test.dart
rename to tests/language_strong/variable_declaration_metadata_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/variable_named_dart_test.dart b/tests/language_strong/variable_named_dart_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/variable_named_dart_test.dart
rename to tests/language_strong/variable_named_dart_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/void_subtype_test.dart b/tests/language_strong/void_subtype_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/void_subtype_test.dart
rename to tests/language_strong/void_subtype_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/void_type_test.dart b/tests/language_strong/void_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/void_type_test.dart
rename to tests/language_strong/void_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/while_test.dart b/tests/language_strong/while_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/while_test.dart
rename to tests/language_strong/while_test.dart
diff --git a/pkg/dev_compiler/test/codegen/language/wrong_number_type_arguments_test.dart b/tests/language_strong/wrong_number_type_arguments_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/language/wrong_number_type_arguments_test.dart
rename to tests/language_strong/wrong_number_type_arguments_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/collection/hash_map_test.dart b/tests/lib_strong/collection/hash_map_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/collection/hash_map_test.dart
rename to tests/lib_strong/collection/hash_map_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/collection/hash_set_test.dart b/tests/lib_strong/collection/hash_set_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/collection/hash_set_test.dart
rename to tests/lib_strong/collection/hash_set_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/collection/linked_list_test.dart b/tests/lib_strong/collection/linked_list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/collection/linked_list_test.dart
rename to tests/lib_strong/collection/linked_list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/collection/list_test.dart b/tests/lib_strong/collection/list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/collection/list_test.dart
rename to tests/lib_strong/collection/list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/ascii_test.dart b/tests/lib_strong/convert/ascii_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/ascii_test.dart
rename to tests/lib_strong/convert/ascii_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/base64_test.dart b/tests/lib_strong/convert/base64_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/base64_test.dart
rename to tests/lib_strong/convert/base64_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion1_test.dart b/tests/lib_strong/convert/chunked_conversion1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion1_test.dart
rename to tests/lib_strong/convert/chunked_conversion1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion2_test.dart b/tests/lib_strong/convert/chunked_conversion2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion2_test.dart
rename to tests/lib_strong/convert/chunked_conversion2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_json_decode1_test.dart b/tests/lib_strong/convert/chunked_conversion_json_decode1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_json_decode1_test.dart
rename to tests/lib_strong/convert/chunked_conversion_json_decode1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_json_encode1_test.dart b/tests/lib_strong/convert/chunked_conversion_json_encode1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_json_encode1_test.dart
rename to tests/lib_strong/convert/chunked_conversion_json_encode1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf82_test.dart b/tests/lib_strong/convert/chunked_conversion_utf82_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf82_test.dart
rename to tests/lib_strong/convert/chunked_conversion_utf82_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf83_test.dart b/tests/lib_strong/convert/chunked_conversion_utf83_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf83_test.dart
rename to tests/lib_strong/convert/chunked_conversion_utf83_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf84_test.dart b/tests/lib_strong/convert/chunked_conversion_utf84_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf84_test.dart
rename to tests/lib_strong/convert/chunked_conversion_utf84_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf85_test.dart b/tests/lib_strong/convert/chunked_conversion_utf85_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf85_test.dart
rename to tests/lib_strong/convert/chunked_conversion_utf85_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf86_test.dart b/tests/lib_strong/convert/chunked_conversion_utf86_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf86_test.dart
rename to tests/lib_strong/convert/chunked_conversion_utf86_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf87_test.dart b/tests/lib_strong/convert/chunked_conversion_utf87_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf87_test.dart
rename to tests/lib_strong/convert/chunked_conversion_utf87_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf88_test.dart b/tests/lib_strong/convert/chunked_conversion_utf88_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf88_test.dart
rename to tests/lib_strong/convert/chunked_conversion_utf88_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf89_test.dart b/tests/lib_strong/convert/chunked_conversion_utf89_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf89_test.dart
rename to tests/lib_strong/convert/chunked_conversion_utf89_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf8_test.dart b/tests/lib_strong/convert/chunked_conversion_utf8_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/chunked_conversion_utf8_test.dart
rename to tests/lib_strong/convert/chunked_conversion_utf8_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/close_test.dart b/tests/lib_strong/convert/close_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/close_test.dart
rename to tests/lib_strong/convert/close_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/codec1_test.dart b/tests/lib_strong/convert/codec1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/codec1_test.dart
rename to tests/lib_strong/convert/codec1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/codec2_test.dart b/tests/lib_strong/convert/codec2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/codec2_test.dart
rename to tests/lib_strong/convert/codec2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/encoding_test.dart b/tests/lib_strong/convert/encoding_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/encoding_test.dart
rename to tests/lib_strong/convert/encoding_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/html_escape_test.dart b/tests/lib_strong/convert/html_escape_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/html_escape_test.dart
rename to tests/lib_strong/convert/html_escape_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/json_chunk_test.dart b/tests/lib_strong/convert/json_chunk_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/json_chunk_test.dart
rename to tests/lib_strong/convert/json_chunk_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/json_lib_test.dart b/tests/lib_strong/convert/json_lib_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/json_lib_test.dart
rename to tests/lib_strong/convert/json_lib_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/json_pretty_test.dart b/tests/lib_strong/convert/json_pretty_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/json_pretty_test.dart
rename to tests/lib_strong/convert/json_pretty_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/json_test.dart b/tests/lib_strong/convert/json_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/json_test.dart
rename to tests/lib_strong/convert/json_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/json_toEncodable_reviver_test.dart b/tests/lib_strong/convert/json_toEncodable_reviver_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/json_toEncodable_reviver_test.dart
rename to tests/lib_strong/convert/json_toEncodable_reviver_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/json_unicode_tests.dart b/tests/lib_strong/convert/json_unicode_tests.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/json_unicode_tests.dart
rename to tests/lib_strong/convert/json_unicode_tests.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/json_utf8_chunk_test.dart b/tests/lib_strong/convert/json_utf8_chunk_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/json_utf8_chunk_test.dart
rename to tests/lib_strong/convert/json_utf8_chunk_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/json_util_test.dart b/tests/lib_strong/convert/json_util_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/json_util_test.dart
rename to tests/lib_strong/convert/json_util_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/latin1_test.dart b/tests/lib_strong/convert/latin1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/latin1_test.dart
rename to tests/lib_strong/convert/latin1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/line_splitter_test.dart b/tests/lib_strong/convert/line_splitter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/line_splitter_test.dart
rename to tests/lib_strong/convert/line_splitter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/streamed_conversion_json_decode1_test.dart b/tests/lib_strong/convert/streamed_conversion_json_decode1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/streamed_conversion_json_decode1_test.dart
rename to tests/lib_strong/convert/streamed_conversion_json_decode1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/streamed_conversion_json_encode1_test.dart b/tests/lib_strong/convert/streamed_conversion_json_encode1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/streamed_conversion_json_encode1_test.dart
rename to tests/lib_strong/convert/streamed_conversion_json_encode1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/streamed_conversion_json_utf8_decode_test.dart b/tests/lib_strong/convert/streamed_conversion_json_utf8_decode_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/streamed_conversion_json_utf8_decode_test.dart
rename to tests/lib_strong/convert/streamed_conversion_json_utf8_decode_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/streamed_conversion_json_utf8_encode_test.dart b/tests/lib_strong/convert/streamed_conversion_json_utf8_encode_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/streamed_conversion_json_utf8_encode_test.dart
rename to tests/lib_strong/convert/streamed_conversion_json_utf8_encode_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/streamed_conversion_utf8_decode_test.dart b/tests/lib_strong/convert/streamed_conversion_utf8_decode_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/streamed_conversion_utf8_decode_test.dart
rename to tests/lib_strong/convert/streamed_conversion_utf8_decode_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/streamed_conversion_utf8_encode_test.dart b/tests/lib_strong/convert/streamed_conversion_utf8_encode_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/streamed_conversion_utf8_encode_test.dart
rename to tests/lib_strong/convert/streamed_conversion_utf8_encode_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/unicode_tests.dart b/tests/lib_strong/convert/unicode_tests.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/unicode_tests.dart
rename to tests/lib_strong/convert/unicode_tests.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/utf82_test.dart b/tests/lib_strong/convert/utf82_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/utf82_test.dart
rename to tests/lib_strong/convert/utf82_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/utf83_test.dart b/tests/lib_strong/convert/utf83_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/utf83_test.dart
rename to tests/lib_strong/convert/utf83_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/utf84_test.dart b/tests/lib_strong/convert/utf84_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/utf84_test.dart
rename to tests/lib_strong/convert/utf84_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/utf85_test.dart b/tests/lib_strong/convert/utf85_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/utf85_test.dart
rename to tests/lib_strong/convert/utf85_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/utf8_encode_test.dart b/tests/lib_strong/convert/utf8_encode_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/utf8_encode_test.dart
rename to tests/lib_strong/convert/utf8_encode_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/convert/utf8_test.dart b/tests/lib_strong/convert/utf8_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/convert/utf8_test.dart
rename to tests/lib_strong/convert/utf8_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/Ahem.ttf b/tests/lib_strong/html/Ahem.ttf
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/Ahem.ttf
rename to tests/lib_strong/html/Ahem.ttf
Binary files differ
diff --git a/pkg/dev_compiler/test/codegen/lib/html/async_cancellingisolate.dart b/tests/lib_strong/html/async_cancellingisolate.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/async_cancellingisolate.dart
rename to tests/lib_strong/html/async_cancellingisolate.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/async_oneshot.dart b/tests/lib_strong/html/async_oneshot.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/async_oneshot.dart
rename to tests/lib_strong/html/async_oneshot.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/async_periodictimer.dart b/tests/lib_strong/html/async_periodictimer.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/async_periodictimer.dart
rename to tests/lib_strong/html/async_periodictimer.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/async_spawnuri_test.dart b/tests/lib_strong/html/async_spawnuri_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/async_spawnuri_test.dart
rename to tests/lib_strong/html/async_spawnuri_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/async_test.dart b/tests/lib_strong/html/async_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/async_test.dart
rename to tests/lib_strong/html/async_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/audiobuffersourcenode_test.dart b/tests/lib_strong/html/audiobuffersourcenode_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/audiobuffersourcenode_test.dart
rename to tests/lib_strong/html/audiobuffersourcenode_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/audiocontext_test.dart b/tests/lib_strong/html/audiocontext_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/audiocontext_test.dart
rename to tests/lib_strong/html/audiocontext_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/audioelement_test.dart b/tests/lib_strong/html/audioelement_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/audioelement_test.dart
rename to tests/lib_strong/html/audioelement_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/b_element_test.dart b/tests/lib_strong/html/b_element_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/b_element_test.dart
rename to tests/lib_strong/html/b_element_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/blob_constructor_test.dart b/tests/lib_strong/html/blob_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/blob_constructor_test.dart
rename to tests/lib_strong/html/blob_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/cache_test.dart b/tests/lib_strong/html/cache_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/cache_test.dart
rename to tests/lib_strong/html/cache_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/callbacks_test.dart b/tests/lib_strong/html/callbacks_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/callbacks_test.dart
rename to tests/lib_strong/html/callbacks_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/canvas_pixel_array_type_alias_test.dart b/tests/lib_strong/html/canvas_pixel_array_type_alias_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/canvas_pixel_array_type_alias_test.dart
rename to tests/lib_strong/html/canvas_pixel_array_type_alias_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/canvas_test.dart b/tests/lib_strong/html/canvas_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/canvas_test.dart
rename to tests/lib_strong/html/canvas_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/canvasrenderingcontext2d_test.dart b/tests/lib_strong/html/canvasrenderingcontext2d_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/canvasrenderingcontext2d_test.dart
rename to tests/lib_strong/html/canvasrenderingcontext2d_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/cdata_test.dart b/tests/lib_strong/html/cdata_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/cdata_test.dart
rename to tests/lib_strong/html/cdata_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/client_rect_test.dart b/tests/lib_strong/html/client_rect_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/client_rect_test.dart
rename to tests/lib_strong/html/client_rect_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/cross_domain_iframe_script.html b/tests/lib_strong/html/cross_domain_iframe_script.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/cross_domain_iframe_script.html
rename to tests/lib_strong/html/cross_domain_iframe_script.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/cross_domain_iframe_script.js b/tests/lib_strong/html/cross_domain_iframe_script.js
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/cross_domain_iframe_script.js
rename to tests/lib_strong/html/cross_domain_iframe_script.js
diff --git a/pkg/dev_compiler/test/codegen/lib/html/cross_domain_iframe_test.dart b/tests/lib_strong/html/cross_domain_iframe_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/cross_domain_iframe_test.dart
rename to tests/lib_strong/html/cross_domain_iframe_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/cross_frame_test.dart b/tests/lib_strong/html/cross_frame_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/cross_frame_test.dart
rename to tests/lib_strong/html/cross_frame_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/crypto_test.dart b/tests/lib_strong/html/crypto_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/crypto_test.dart
rename to tests/lib_strong/html/crypto_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/css_rule_list_test.dart b/tests/lib_strong/html/css_rule_list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/css_rule_list_test.dart
rename to tests/lib_strong/html/css_rule_list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/css_test.dart b/tests/lib_strong/html/css_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/css_test.dart
rename to tests/lib_strong/html/css_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/cssstyledeclaration_test.dart b/tests/lib_strong/html/cssstyledeclaration_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/cssstyledeclaration_test.dart
rename to tests/lib_strong/html/cssstyledeclaration_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/attribute_changed_callback_test.dart b/tests/lib_strong/html/custom/attribute_changed_callback_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/attribute_changed_callback_test.dart
rename to tests/lib_strong/html/custom/attribute_changed_callback_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/attribute_changed_callback_test.html b/tests/lib_strong/html/custom/attribute_changed_callback_test.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/attribute_changed_callback_test.html
rename to tests/lib_strong/html/custom/attribute_changed_callback_test.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/constructor_calls_created_synchronously_test.dart b/tests/lib_strong/html/custom/constructor_calls_created_synchronously_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/constructor_calls_created_synchronously_test.dart
rename to tests/lib_strong/html/custom/constructor_calls_created_synchronously_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/constructor_calls_created_synchronously_test.html b/tests/lib_strong/html/custom/constructor_calls_created_synchronously_test.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/constructor_calls_created_synchronously_test.html
rename to tests/lib_strong/html/custom/constructor_calls_created_synchronously_test.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/created_callback_test.dart b/tests/lib_strong/html/custom/created_callback_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/created_callback_test.dart
rename to tests/lib_strong/html/custom/created_callback_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/created_callback_test.html b/tests/lib_strong/html/custom/created_callback_test.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/created_callback_test.html
rename to tests/lib_strong/html/custom/created_callback_test.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/document_register_basic_test.dart b/tests/lib_strong/html/custom/document_register_basic_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/document_register_basic_test.dart
rename to tests/lib_strong/html/custom/document_register_basic_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/document_register_basic_test.html b/tests/lib_strong/html/custom/document_register_basic_test.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/document_register_basic_test.html
rename to tests/lib_strong/html/custom/document_register_basic_test.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/document_register_type_extensions_test.dart b/tests/lib_strong/html/custom/document_register_type_extensions_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/document_register_type_extensions_test.dart
rename to tests/lib_strong/html/custom/document_register_type_extensions_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/document_register_type_extensions_test.html b/tests/lib_strong/html/custom/document_register_type_extensions_test.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/document_register_type_extensions_test.html
rename to tests/lib_strong/html/custom/document_register_type_extensions_test.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/element_upgrade_test.dart b/tests/lib_strong/html/custom/element_upgrade_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/element_upgrade_test.dart
rename to tests/lib_strong/html/custom/element_upgrade_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/element_upgrade_test.html b/tests/lib_strong/html/custom/element_upgrade_test.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/element_upgrade_test.html
rename to tests/lib_strong/html/custom/element_upgrade_test.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/entered_left_view_test.dart b/tests/lib_strong/html/custom/entered_left_view_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/entered_left_view_test.dart
rename to tests/lib_strong/html/custom/entered_left_view_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/entered_left_view_test.html b/tests/lib_strong/html/custom/entered_left_view_test.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/entered_left_view_test.html
rename to tests/lib_strong/html/custom/entered_left_view_test.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/js_custom_test.dart b/tests/lib_strong/html/custom/js_custom_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/js_custom_test.dart
rename to tests/lib_strong/html/custom/js_custom_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/js_custom_test.html b/tests/lib_strong/html/custom/js_custom_test.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/js_custom_test.html
rename to tests/lib_strong/html/custom/js_custom_test.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/mirrors_test.dart b/tests/lib_strong/html/custom/mirrors_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/mirrors_test.dart
rename to tests/lib_strong/html/custom/mirrors_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/mirrors_test.html b/tests/lib_strong/html/custom/mirrors_test.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/mirrors_test.html
rename to tests/lib_strong/html/custom/mirrors_test.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom/regress_194523002_test.dart b/tests/lib_strong/html/custom/regress_194523002_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom/regress_194523002_test.dart
rename to tests/lib_strong/html/custom/regress_194523002_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom_element_method_clash_test.dart b/tests/lib_strong/html/custom_element_method_clash_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom_element_method_clash_test.dart
rename to tests/lib_strong/html/custom_element_method_clash_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom_element_method_clash_test.html b/tests/lib_strong/html/custom_element_method_clash_test.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom_element_method_clash_test.html
rename to tests/lib_strong/html/custom_element_method_clash_test.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom_element_name_clash_test.dart b/tests/lib_strong/html/custom_element_name_clash_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom_element_name_clash_test.dart
rename to tests/lib_strong/html/custom_element_name_clash_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom_element_name_clash_test.html b/tests/lib_strong/html/custom_element_name_clash_test.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom_element_name_clash_test.html
rename to tests/lib_strong/html/custom_element_name_clash_test.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom_elements_23127_test.dart b/tests/lib_strong/html/custom_elements_23127_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom_elements_23127_test.dart
rename to tests/lib_strong/html/custom_elements_23127_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom_elements_23127_test.html b/tests/lib_strong/html/custom_elements_23127_test.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom_elements_23127_test.html
rename to tests/lib_strong/html/custom_elements_23127_test.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom_elements_test.dart b/tests/lib_strong/html/custom_elements_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom_elements_test.dart
rename to tests/lib_strong/html/custom_elements_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom_elements_test.html b/tests/lib_strong/html/custom_elements_test.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom_elements_test.html
rename to tests/lib_strong/html/custom_elements_test.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/custom_tags_test.dart b/tests/lib_strong/html/custom_tags_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/custom_tags_test.dart
rename to tests/lib_strong/html/custom_tags_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/dart_object_local_storage_test.dart b/tests/lib_strong/html/dart_object_local_storage_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/dart_object_local_storage_test.dart
rename to tests/lib_strong/html/dart_object_local_storage_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/datalistelement_test.dart b/tests/lib_strong/html/datalistelement_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/datalistelement_test.dart
rename to tests/lib_strong/html/datalistelement_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/deferred_multi_app.dart b/tests/lib_strong/html/deferred_multi_app.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/deferred_multi_app.dart
rename to tests/lib_strong/html/deferred_multi_app.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/deferred_multi_app_htmltest.html b/tests/lib_strong/html/deferred_multi_app_htmltest.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/deferred_multi_app_htmltest.html
rename to tests/lib_strong/html/deferred_multi_app_htmltest.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/deferred_multi_app_lib.dart b/tests/lib_strong/html/deferred_multi_app_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/deferred_multi_app_lib.dart
rename to tests/lib_strong/html/deferred_multi_app_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/document_test.dart b/tests/lib_strong/html/document_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/document_test.dart
rename to tests/lib_strong/html/document_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/documentfragment_test.dart b/tests/lib_strong/html/documentfragment_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/documentfragment_test.dart
rename to tests/lib_strong/html/documentfragment_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/dom_constructors_test.dart b/tests/lib_strong/html/dom_constructors_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/dom_constructors_test.dart
rename to tests/lib_strong/html/dom_constructors_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/dom_isolates_test.dart.child_isolate.dart b/tests/lib_strong/html/dom_isolates_test.dart.child_isolate.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/dom_isolates_test.dart.child_isolate.dart
rename to tests/lib_strong/html/dom_isolates_test.dart.child_isolate.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/domparser_test.dart b/tests/lib_strong/html/domparser_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/domparser_test.dart
rename to tests/lib_strong/html/domparser_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/element_add_test.dart b/tests/lib_strong/html/element_add_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/element_add_test.dart
rename to tests/lib_strong/html/element_add_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/element_animate_test.dart b/tests/lib_strong/html/element_animate_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/element_animate_test.dart
rename to tests/lib_strong/html/element_animate_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/element_classes_svg_test.dart b/tests/lib_strong/html/element_classes_svg_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/element_classes_svg_test.dart
rename to tests/lib_strong/html/element_classes_svg_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/element_classes_test.dart b/tests/lib_strong/html/element_classes_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/element_classes_test.dart
rename to tests/lib_strong/html/element_classes_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/element_constructor_1_test.dart b/tests/lib_strong/html/element_constructor_1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/element_constructor_1_test.dart
rename to tests/lib_strong/html/element_constructor_1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/element_dimensions_test.dart b/tests/lib_strong/html/element_dimensions_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/element_dimensions_test.dart
rename to tests/lib_strong/html/element_dimensions_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/element_offset_test.dart b/tests/lib_strong/html/element_offset_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/element_offset_test.dart
rename to tests/lib_strong/html/element_offset_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/element_test.dart b/tests/lib_strong/html/element_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/element_test.dart
rename to tests/lib_strong/html/element_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/element_types_constructors1_test.dart b/tests/lib_strong/html/element_types_constructors1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/element_types_constructors1_test.dart
rename to tests/lib_strong/html/element_types_constructors1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/element_types_constructors2_test.dart b/tests/lib_strong/html/element_types_constructors2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/element_types_constructors2_test.dart
rename to tests/lib_strong/html/element_types_constructors2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/element_types_constructors3_test.dart b/tests/lib_strong/html/element_types_constructors3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/element_types_constructors3_test.dart
rename to tests/lib_strong/html/element_types_constructors3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/element_types_constructors4_test.dart b/tests/lib_strong/html/element_types_constructors4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/element_types_constructors4_test.dart
rename to tests/lib_strong/html/element_types_constructors4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/element_types_constructors5_test.dart b/tests/lib_strong/html/element_types_constructors5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/element_types_constructors5_test.dart
rename to tests/lib_strong/html/element_types_constructors5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/element_types_constructors6_test.dart b/tests/lib_strong/html/element_types_constructors6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/element_types_constructors6_test.dart
rename to tests/lib_strong/html/element_types_constructors6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/element_types_test.dart b/tests/lib_strong/html/element_types_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/element_types_test.dart
rename to tests/lib_strong/html/element_types_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/event_customevent_test.dart b/tests/lib_strong/html/event_customevent_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/event_customevent_test.dart
rename to tests/lib_strong/html/event_customevent_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/event_test.dart b/tests/lib_strong/html/event_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/event_test.dart
rename to tests/lib_strong/html/event_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/events_test.dart b/tests/lib_strong/html/events_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/events_test.dart
rename to tests/lib_strong/html/events_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/exceptions_test.dart b/tests/lib_strong/html/exceptions_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/exceptions_test.dart
rename to tests/lib_strong/html/exceptions_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/fileapi_test.dart b/tests/lib_strong/html/fileapi_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/fileapi_test.dart
rename to tests/lib_strong/html/fileapi_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/filereader_test.dart b/tests/lib_strong/html/filereader_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/filereader_test.dart
rename to tests/lib_strong/html/filereader_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/filteredelementlist_test.dart b/tests/lib_strong/html/filteredelementlist_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/filteredelementlist_test.dart
rename to tests/lib_strong/html/filteredelementlist_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/fontface_loaded_test.dart b/tests/lib_strong/html/fontface_loaded_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/fontface_loaded_test.dart
rename to tests/lib_strong/html/fontface_loaded_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/fontface_test.dart b/tests/lib_strong/html/fontface_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/fontface_test.dart
rename to tests/lib_strong/html/fontface_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/form_data_test.dart b/tests/lib_strong/html/form_data_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/form_data_test.dart
rename to tests/lib_strong/html/form_data_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/form_element_test.dart b/tests/lib_strong/html/form_element_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/form_element_test.dart
rename to tests/lib_strong/html/form_element_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/geolocation_test.dart b/tests/lib_strong/html/geolocation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/geolocation_test.dart
rename to tests/lib_strong/html/geolocation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/hidden_dom_1_test.dart b/tests/lib_strong/html/hidden_dom_1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/hidden_dom_1_test.dart
rename to tests/lib_strong/html/hidden_dom_1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/hidden_dom_2_test.dart b/tests/lib_strong/html/hidden_dom_2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/hidden_dom_2_test.dart
rename to tests/lib_strong/html/hidden_dom_2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/history_test.dart b/tests/lib_strong/html/history_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/history_test.dart
rename to tests/lib_strong/html/history_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/htmlcollection_test.dart b/tests/lib_strong/html/htmlcollection_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/htmlcollection_test.dart
rename to tests/lib_strong/html/htmlcollection_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/htmlelement_test.dart b/tests/lib_strong/html/htmlelement_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/htmlelement_test.dart
rename to tests/lib_strong/html/htmlelement_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/htmloptionscollection_test.dart b/tests/lib_strong/html/htmloptionscollection_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/htmloptionscollection_test.dart
rename to tests/lib_strong/html/htmloptionscollection_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/indexeddb_1_test.dart b/tests/lib_strong/html/indexeddb_1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/indexeddb_1_test.dart
rename to tests/lib_strong/html/indexeddb_1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/indexeddb_2_test.dart b/tests/lib_strong/html/indexeddb_2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/indexeddb_2_test.dart
rename to tests/lib_strong/html/indexeddb_2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/indexeddb_3_test.dart b/tests/lib_strong/html/indexeddb_3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/indexeddb_3_test.dart
rename to tests/lib_strong/html/indexeddb_3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/indexeddb_4_test.dart b/tests/lib_strong/html/indexeddb_4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/indexeddb_4_test.dart
rename to tests/lib_strong/html/indexeddb_4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/indexeddb_5_test.dart b/tests/lib_strong/html/indexeddb_5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/indexeddb_5_test.dart
rename to tests/lib_strong/html/indexeddb_5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/input_element_test.dart b/tests/lib_strong/html/input_element_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/input_element_test.dart
rename to tests/lib_strong/html/input_element_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/instance_of_test.dart b/tests/lib_strong/html/instance_of_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/instance_of_test.dart
rename to tests/lib_strong/html/instance_of_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/interactive_test.dart b/tests/lib_strong/html/interactive_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/interactive_test.dart
rename to tests/lib_strong/html/interactive_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/isolates_test.dart b/tests/lib_strong/html/isolates_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/isolates_test.dart
rename to tests/lib_strong/html/isolates_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/js_function_getter_test.dart b/tests/lib_strong/html/js_function_getter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/js_function_getter_test.dart
rename to tests/lib_strong/html/js_function_getter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/js_function_getter_trust_types_test.dart b/tests/lib_strong/html/js_function_getter_trust_types_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/js_function_getter_trust_types_test.dart
rename to tests/lib_strong/html/js_function_getter_trust_types_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/js_interop_1_test.dart b/tests/lib_strong/html/js_interop_1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/js_interop_1_test.dart
rename to tests/lib_strong/html/js_interop_1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/js_test.dart b/tests/lib_strong/html/js_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/js_test.dart
rename to tests/lib_strong/html/js_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_anonymous2_exp_test.dart b/tests/lib_strong/html/js_typed_interop_anonymous2_exp_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_anonymous2_exp_test.dart
rename to tests/lib_strong/html/js_typed_interop_anonymous2_exp_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_anonymous2_test.dart b/tests/lib_strong/html/js_typed_interop_anonymous2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_anonymous2_test.dart
rename to tests/lib_strong/html/js_typed_interop_anonymous2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_anonymous_exp_test.dart b/tests/lib_strong/html/js_typed_interop_anonymous_exp_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_anonymous_exp_test.dart
rename to tests/lib_strong/html/js_typed_interop_anonymous_exp_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_anonymous_test.dart b/tests/lib_strong/html/js_typed_interop_anonymous_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_anonymous_test.dart
rename to tests/lib_strong/html/js_typed_interop_anonymous_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_anonymous_unreachable_exp_test.dart b/tests/lib_strong/html/js_typed_interop_anonymous_unreachable_exp_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_anonymous_unreachable_exp_test.dart
rename to tests/lib_strong/html/js_typed_interop_anonymous_unreachable_exp_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_anonymous_unreachable_test.dart b/tests/lib_strong/html/js_typed_interop_anonymous_unreachable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_anonymous_unreachable_test.dart
rename to tests/lib_strong/html/js_typed_interop_anonymous_unreachable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_default_arg_test.dart b/tests/lib_strong/html/js_typed_interop_default_arg_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_default_arg_test.dart
rename to tests/lib_strong/html/js_typed_interop_default_arg_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_lazy_test.dart b/tests/lib_strong/html/js_typed_interop_lazy_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_lazy_test.dart
rename to tests/lib_strong/html/js_typed_interop_lazy_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_rename_static_test.dart b/tests/lib_strong/html/js_typed_interop_rename_static_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_rename_static_test.dart
rename to tests/lib_strong/html/js_typed_interop_rename_static_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_side_cast_exp_test.dart b/tests/lib_strong/html/js_typed_interop_side_cast_exp_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_side_cast_exp_test.dart
rename to tests/lib_strong/html/js_typed_interop_side_cast_exp_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_side_cast_test.dart b/tests/lib_strong/html/js_typed_interop_side_cast_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_side_cast_test.dart
rename to tests/lib_strong/html/js_typed_interop_side_cast_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_test.dart b/tests/lib_strong/html/js_typed_interop_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/js_typed_interop_test.dart
rename to tests/lib_strong/html/js_typed_interop_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/js_util_test.dart b/tests/lib_strong/html/js_util_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/js_util_test.dart
rename to tests/lib_strong/html/js_util_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/json_helper.dart b/tests/lib_strong/html/json_helper.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/json_helper.dart
rename to tests/lib_strong/html/json_helper.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/keyboard_event_test.dart b/tests/lib_strong/html/keyboard_event_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/keyboard_event_test.dart
rename to tests/lib_strong/html/keyboard_event_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/localstorage_test.dart b/tests/lib_strong/html/localstorage_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/localstorage_test.dart
rename to tests/lib_strong/html/localstorage_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/location_test.dart b/tests/lib_strong/html/location_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/location_test.dart
rename to tests/lib_strong/html/location_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/media_stream_test.dart b/tests/lib_strong/html/media_stream_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/media_stream_test.dart
rename to tests/lib_strong/html/media_stream_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/mediasource_test.dart b/tests/lib_strong/html/mediasource_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/mediasource_test.dart
rename to tests/lib_strong/html/mediasource_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/messageevent_test.dart b/tests/lib_strong/html/messageevent_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/messageevent_test.dart
rename to tests/lib_strong/html/messageevent_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/mirrors_js_typed_interop_test.dart b/tests/lib_strong/html/mirrors_js_typed_interop_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/mirrors_js_typed_interop_test.dart
rename to tests/lib_strong/html/mirrors_js_typed_interop_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/mouse_event_test.dart b/tests/lib_strong/html/mouse_event_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/mouse_event_test.dart
rename to tests/lib_strong/html/mouse_event_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/mutationobserver_test.dart b/tests/lib_strong/html/mutationobserver_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/mutationobserver_test.dart
rename to tests/lib_strong/html/mutationobserver_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/native_gc_test.dart b/tests/lib_strong/html/native_gc_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/native_gc_test.dart
rename to tests/lib_strong/html/native_gc_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/navigator_test.dart b/tests/lib_strong/html/navigator_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/navigator_test.dart
rename to tests/lib_strong/html/navigator_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/no_linked_scripts_htmltest.html b/tests/lib_strong/html/no_linked_scripts_htmltest.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/no_linked_scripts_htmltest.html
rename to tests/lib_strong/html/no_linked_scripts_htmltest.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/node_test.dart b/tests/lib_strong/html/node_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/node_test.dart
rename to tests/lib_strong/html/node_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/node_validator_important_if_you_suppress_make_the_bug_critical_test.dart b/tests/lib_strong/html/node_validator_important_if_you_suppress_make_the_bug_critical_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/node_validator_important_if_you_suppress_make_the_bug_critical_test.dart
rename to tests/lib_strong/html/node_validator_important_if_you_suppress_make_the_bug_critical_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/non_instantiated_is_test.dart b/tests/lib_strong/html/non_instantiated_is_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/non_instantiated_is_test.dart
rename to tests/lib_strong/html/non_instantiated_is_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/notification_test.dart b/tests/lib_strong/html/notification_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/notification_test.dart
rename to tests/lib_strong/html/notification_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/performance_api_test.dart b/tests/lib_strong/html/performance_api_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/performance_api_test.dart
rename to tests/lib_strong/html/performance_api_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/postmessage_structured_test.dart b/tests/lib_strong/html/postmessage_structured_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/postmessage_structured_test.dart
rename to tests/lib_strong/html/postmessage_structured_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/private_extension_member_test.dart b/tests/lib_strong/html/private_extension_member_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/private_extension_member_test.dart
rename to tests/lib_strong/html/private_extension_member_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/query_test.dart b/tests/lib_strong/html/query_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/query_test.dart
rename to tests/lib_strong/html/query_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/queryall_test.dart b/tests/lib_strong/html/queryall_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/queryall_test.dart
rename to tests/lib_strong/html/queryall_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/range_test.dart b/tests/lib_strong/html/range_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/range_test.dart
rename to tests/lib_strong/html/range_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/request_animation_frame_test.dart b/tests/lib_strong/html/request_animation_frame_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/request_animation_frame_test.dart
rename to tests/lib_strong/html/request_animation_frame_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/resource_data.txt b/tests/lib_strong/html/resource_data.txt
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/resource_data.txt
rename to tests/lib_strong/html/resource_data.txt
diff --git a/pkg/dev_compiler/test/codegen/lib/html/resource_http_test.dart b/tests/lib_strong/html/resource_http_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/resource_http_test.dart
rename to tests/lib_strong/html/resource_http_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/rtc_test.dart b/tests/lib_strong/html/rtc_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/rtc_test.dart
rename to tests/lib_strong/html/rtc_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/scripts_htmltest.html b/tests/lib_strong/html/scripts_htmltest.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/scripts_htmltest.html
rename to tests/lib_strong/html/scripts_htmltest.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/scripts_test_dart.dart b/tests/lib_strong/html/scripts_test_dart.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/scripts_test_dart.dart
rename to tests/lib_strong/html/scripts_test_dart.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/scripts_test_js.js b/tests/lib_strong/html/scripts_test_js.js
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/scripts_test_js.js
rename to tests/lib_strong/html/scripts_test_js.js
diff --git a/pkg/dev_compiler/test/codegen/lib/html/selectelement_test.dart b/tests/lib_strong/html/selectelement_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/selectelement_test.dart
rename to tests/lib_strong/html/selectelement_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/serialized_script_value_test.dart b/tests/lib_strong/html/serialized_script_value_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/serialized_script_value_test.dart
rename to tests/lib_strong/html/serialized_script_value_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/shadow_dom_test.dart b/tests/lib_strong/html/shadow_dom_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/shadow_dom_test.dart
rename to tests/lib_strong/html/shadow_dom_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/shadowroot_test.dart b/tests/lib_strong/html/shadowroot_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/shadowroot_test.dart
rename to tests/lib_strong/html/shadowroot_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/small.mp4 b/tests/lib_strong/html/small.mp4
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/small.mp4
rename to tests/lib_strong/html/small.mp4
Binary files differ
diff --git a/pkg/dev_compiler/test/codegen/lib/html/small.webm b/tests/lib_strong/html/small.webm
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/small.webm
rename to tests/lib_strong/html/small.webm
Binary files differ
diff --git a/pkg/dev_compiler/test/codegen/lib/html/speechrecognition_test.dart b/tests/lib_strong/html/speechrecognition_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/speechrecognition_test.dart
rename to tests/lib_strong/html/speechrecognition_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/storage_test.dart b/tests/lib_strong/html/storage_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/storage_test.dart
rename to tests/lib_strong/html/storage_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/streams_test.dart b/tests/lib_strong/html/streams_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/streams_test.dart
rename to tests/lib_strong/html/streams_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/svg_test.dart b/tests/lib_strong/html/svg_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/svg_test.dart
rename to tests/lib_strong/html/svg_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/svgelement_test.dart b/tests/lib_strong/html/svgelement_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/svgelement_test.dart
rename to tests/lib_strong/html/svgelement_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/table_test.dart b/tests/lib_strong/html/table_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/table_test.dart
rename to tests/lib_strong/html/table_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/text_event_test.dart b/tests/lib_strong/html/text_event_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/text_event_test.dart
rename to tests/lib_strong/html/text_event_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/touchevent_test.dart b/tests/lib_strong/html/touchevent_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/touchevent_test.dart
rename to tests/lib_strong/html/touchevent_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/track_element_constructor_test.dart b/tests/lib_strong/html/track_element_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/track_element_constructor_test.dart
rename to tests/lib_strong/html/track_element_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/transferables_test.dart b/tests/lib_strong/html/transferables_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/transferables_test.dart
rename to tests/lib_strong/html/transferables_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/transition_event_test.dart b/tests/lib_strong/html/transition_event_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/transition_event_test.dart
rename to tests/lib_strong/html/transition_event_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/trusted_html_tree_sanitizer_test.dart b/tests/lib_strong/html/trusted_html_tree_sanitizer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/trusted_html_tree_sanitizer_test.dart
rename to tests/lib_strong/html/trusted_html_tree_sanitizer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/two_scripts_htmltest.html b/tests/lib_strong/html/two_scripts_htmltest.html
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/two_scripts_htmltest.html
rename to tests/lib_strong/html/two_scripts_htmltest.html
diff --git a/pkg/dev_compiler/test/codegen/lib/html/two_scripts_test_first.dart b/tests/lib_strong/html/two_scripts_test_first.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/two_scripts_test_first.dart
rename to tests/lib_strong/html/two_scripts_test_first.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/two_scripts_test_second.dart b/tests/lib_strong/html/two_scripts_test_second.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/two_scripts_test_second.dart
rename to tests/lib_strong/html/two_scripts_test_second.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/typed_arrays_1_test.dart b/tests/lib_strong/html/typed_arrays_1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/typed_arrays_1_test.dart
rename to tests/lib_strong/html/typed_arrays_1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/typed_arrays_2_test.dart b/tests/lib_strong/html/typed_arrays_2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/typed_arrays_2_test.dart
rename to tests/lib_strong/html/typed_arrays_2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/typed_arrays_3_test.dart b/tests/lib_strong/html/typed_arrays_3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/typed_arrays_3_test.dart
rename to tests/lib_strong/html/typed_arrays_3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/typed_arrays_4_test.dart b/tests/lib_strong/html/typed_arrays_4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/typed_arrays_4_test.dart
rename to tests/lib_strong/html/typed_arrays_4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/typed_arrays_5_test.dart b/tests/lib_strong/html/typed_arrays_5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/typed_arrays_5_test.dart
rename to tests/lib_strong/html/typed_arrays_5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/typed_arrays_arraybuffer_test.dart b/tests/lib_strong/html/typed_arrays_arraybuffer_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/typed_arrays_arraybuffer_test.dart
rename to tests/lib_strong/html/typed_arrays_arraybuffer_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/typed_arrays_dataview_test.dart b/tests/lib_strong/html/typed_arrays_dataview_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/typed_arrays_dataview_test.dart
rename to tests/lib_strong/html/typed_arrays_dataview_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/typed_arrays_range_checks_test.dart b/tests/lib_strong/html/typed_arrays_range_checks_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/typed_arrays_range_checks_test.dart
rename to tests/lib_strong/html/typed_arrays_range_checks_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/typed_arrays_simd_test.dart b/tests/lib_strong/html/typed_arrays_simd_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/typed_arrays_simd_test.dart
rename to tests/lib_strong/html/typed_arrays_simd_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/typing_test.dart b/tests/lib_strong/html/typing_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/typing_test.dart
rename to tests/lib_strong/html/typing_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/unknownelement_test.dart b/tests/lib_strong/html/unknownelement_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/unknownelement_test.dart
rename to tests/lib_strong/html/unknownelement_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/uri_test.dart b/tests/lib_strong/html/uri_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/uri_test.dart
rename to tests/lib_strong/html/uri_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/url_test.dart b/tests/lib_strong/html/url_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/url_test.dart
rename to tests/lib_strong/html/url_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/util.dart b/tests/lib_strong/html/util.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/util.dart
rename to tests/lib_strong/html/util.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/utils.dart b/tests/lib_strong/html/utils.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/utils.dart
rename to tests/lib_strong/html/utils.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/webgl_1_test.dart b/tests/lib_strong/html/webgl_1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/webgl_1_test.dart
rename to tests/lib_strong/html/webgl_1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/websocket_test.dart b/tests/lib_strong/html/websocket_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/websocket_test.dart
rename to tests/lib_strong/html/websocket_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/websql_test.dart b/tests/lib_strong/html/websql_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/websql_test.dart
rename to tests/lib_strong/html/websql_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/wheelevent_test.dart b/tests/lib_strong/html/wheelevent_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/wheelevent_test.dart
rename to tests/lib_strong/html/wheelevent_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/window_eq_test.dart b/tests/lib_strong/html/window_eq_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/window_eq_test.dart
rename to tests/lib_strong/html/window_eq_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/window_mangling_test.dart b/tests/lib_strong/html/window_mangling_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/window_mangling_test.dart
rename to tests/lib_strong/html/window_mangling_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/window_nosuchmethod_test.dart b/tests/lib_strong/html/window_nosuchmethod_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/window_nosuchmethod_test.dart
rename to tests/lib_strong/html/window_nosuchmethod_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/window_test.dart b/tests/lib_strong/html/window_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/window_test.dart
rename to tests/lib_strong/html/window_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/worker_api_test.dart b/tests/lib_strong/html/worker_api_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/worker_api_test.dart
rename to tests/lib_strong/html/worker_api_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/worker_test.dart b/tests/lib_strong/html/worker_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/worker_test.dart
rename to tests/lib_strong/html/worker_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/wrapping_collections_test.dart b/tests/lib_strong/html/wrapping_collections_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/wrapping_collections_test.dart
rename to tests/lib_strong/html/wrapping_collections_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/xhr_cross_origin_data.txt b/tests/lib_strong/html/xhr_cross_origin_data.txt
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/xhr_cross_origin_data.txt
rename to tests/lib_strong/html/xhr_cross_origin_data.txt
diff --git a/pkg/dev_compiler/test/codegen/lib/html/xhr_cross_origin_test.dart b/tests/lib_strong/html/xhr_cross_origin_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/xhr_cross_origin_test.dart
rename to tests/lib_strong/html/xhr_cross_origin_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/xhr_test.dart b/tests/lib_strong/html/xhr_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/xhr_test.dart
rename to tests/lib_strong/html/xhr_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/html/xsltprocessor_test.dart b/tests/lib_strong/html/xsltprocessor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/html/xsltprocessor_test.dart
rename to tests/lib_strong/html/xsltprocessor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/math/coin_test.dart b/tests/lib_strong/math/coin_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/math/coin_test.dart
rename to tests/lib_strong/math/coin_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/math/double_pow_test.dart b/tests/lib_strong/math/double_pow_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/math/double_pow_test.dart
rename to tests/lib_strong/math/double_pow_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/math/implement_rectangle_test.dart b/tests/lib_strong/math/implement_rectangle_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/math/implement_rectangle_test.dart
rename to tests/lib_strong/math/implement_rectangle_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/math/low_test.dart b/tests/lib_strong/math/low_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/math/low_test.dart
rename to tests/lib_strong/math/low_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/math/math2_test.dart b/tests/lib_strong/math/math2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/math/math2_test.dart
rename to tests/lib_strong/math/math2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/math/math_parse_double_test.dart b/tests/lib_strong/math/math_parse_double_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/math/math_parse_double_test.dart
rename to tests/lib_strong/math/math_parse_double_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/math/math_test.dart b/tests/lib_strong/math/math_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/math/math_test.dart
rename to tests/lib_strong/math/math_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/math/min_max_test.dart b/tests/lib_strong/math/min_max_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/math/min_max_test.dart
rename to tests/lib_strong/math/min_max_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/math/pi_test.dart b/tests/lib_strong/math/pi_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/math/pi_test.dart
rename to tests/lib_strong/math/pi_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/math/point_test.dart b/tests/lib_strong/math/point_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/math/point_test.dart
rename to tests/lib_strong/math/point_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/math/random_big_test.dart b/tests/lib_strong/math/random_big_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/math/random_big_test.dart
rename to tests/lib_strong/math/random_big_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/math/random_secure_test.dart b/tests/lib_strong/math/random_secure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/math/random_secure_test.dart
rename to tests/lib_strong/math/random_secure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/math/random_test.dart b/tests/lib_strong/math/random_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/math/random_test.dart
rename to tests/lib_strong/math/random_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/math/rectangle_test.dart b/tests/lib_strong/math/rectangle_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/math/rectangle_test.dart
rename to tests/lib_strong/math/rectangle_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/abstract_class_test.dart b/tests/lib_strong/mirrors/abstract_class_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/abstract_class_test.dart
rename to tests/lib_strong/mirrors/abstract_class_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/abstract_test.dart b/tests/lib_strong/mirrors/abstract_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/abstract_test.dart
rename to tests/lib_strong/mirrors/abstract_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/accessor_cache_overflow_test.dart b/tests/lib_strong/mirrors/accessor_cache_overflow_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/accessor_cache_overflow_test.dart
rename to tests/lib_strong/mirrors/accessor_cache_overflow_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/array_tracing2_test.dart b/tests/lib_strong/mirrors/array_tracing2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/array_tracing2_test.dart
rename to tests/lib_strong/mirrors/array_tracing2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/array_tracing3_test.dart b/tests/lib_strong/mirrors/array_tracing3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/array_tracing3_test.dart
rename to tests/lib_strong/mirrors/array_tracing3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/array_tracing_test.dart b/tests/lib_strong/mirrors/array_tracing_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/array_tracing_test.dart
rename to tests/lib_strong/mirrors/array_tracing_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/basic_types_in_dart_core_test.dart b/tests/lib_strong/mirrors/basic_types_in_dart_core_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/basic_types_in_dart_core_test.dart
rename to tests/lib_strong/mirrors/basic_types_in_dart_core_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/circular_factory_redirection_test.dart b/tests/lib_strong/mirrors/circular_factory_redirection_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/circular_factory_redirection_test.dart
rename to tests/lib_strong/mirrors/circular_factory_redirection_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/class_declarations_test.dart b/tests/lib_strong/mirrors/class_declarations_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/class_declarations_test.dart
rename to tests/lib_strong/mirrors/class_declarations_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/class_mirror_location_other.dart b/tests/lib_strong/mirrors/class_mirror_location_other.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/class_mirror_location_other.dart
rename to tests/lib_strong/mirrors/class_mirror_location_other.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/class_mirror_location_test.dart b/tests/lib_strong/mirrors/class_mirror_location_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/class_mirror_location_test.dart
rename to tests/lib_strong/mirrors/class_mirror_location_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/class_mirror_type_variables_data.dart b/tests/lib_strong/mirrors/class_mirror_type_variables_data.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/class_mirror_type_variables_data.dart
rename to tests/lib_strong/mirrors/class_mirror_type_variables_data.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/class_mirror_type_variables_expect.dart b/tests/lib_strong/mirrors/class_mirror_type_variables_expect.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/class_mirror_type_variables_expect.dart
rename to tests/lib_strong/mirrors/class_mirror_type_variables_expect.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/class_mirror_type_variables_test.dart b/tests/lib_strong/mirrors/class_mirror_type_variables_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/class_mirror_type_variables_test.dart
rename to tests/lib_strong/mirrors/class_mirror_type_variables_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/closure_mirror_import1.dart b/tests/lib_strong/mirrors/closure_mirror_import1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/closure_mirror_import1.dart
rename to tests/lib_strong/mirrors/closure_mirror_import1.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/closure_mirror_import2.dart b/tests/lib_strong/mirrors/closure_mirror_import2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/closure_mirror_import2.dart
rename to tests/lib_strong/mirrors/closure_mirror_import2.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/closures_test.dart b/tests/lib_strong/mirrors/closures_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/closures_test.dart
rename to tests/lib_strong/mirrors/closures_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/closurization_equivalence_test.dart b/tests/lib_strong/mirrors/closurization_equivalence_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/closurization_equivalence_test.dart
rename to tests/lib_strong/mirrors/closurization_equivalence_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/constructor_kinds_test.dart b/tests/lib_strong/mirrors/constructor_kinds_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/constructor_kinds_test.dart
rename to tests/lib_strong/mirrors/constructor_kinds_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/constructor_optional_args_test.dart b/tests/lib_strong/mirrors/constructor_optional_args_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/constructor_optional_args_test.dart
rename to tests/lib_strong/mirrors/constructor_optional_args_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/constructor_private_name_test.dart b/tests/lib_strong/mirrors/constructor_private_name_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/constructor_private_name_test.dart
rename to tests/lib_strong/mirrors/constructor_private_name_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/constructors_test.dart b/tests/lib_strong/mirrors/constructors_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/constructors_test.dart
rename to tests/lib_strong/mirrors/constructors_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/dart2js_mirrors_test.dart b/tests/lib_strong/mirrors/dart2js_mirrors_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/dart2js_mirrors_test.dart
rename to tests/lib_strong/mirrors/dart2js_mirrors_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/declarations_model.dart b/tests/lib_strong/mirrors/declarations_model.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/declarations_model.dart
rename to tests/lib_strong/mirrors/declarations_model.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/declarations_model_easier.dart b/tests/lib_strong/mirrors/declarations_model_easier.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/declarations_model_easier.dart
rename to tests/lib_strong/mirrors/declarations_model_easier.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/declarations_type_test.dart b/tests/lib_strong/mirrors/declarations_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/declarations_type_test.dart
rename to tests/lib_strong/mirrors/declarations_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/deferred_mirrors_metadata_lib.dart b/tests/lib_strong/mirrors/deferred_mirrors_metadata_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/deferred_mirrors_metadata_lib.dart
rename to tests/lib_strong/mirrors/deferred_mirrors_metadata_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/deferred_mirrors_metadata_test.dart b/tests/lib_strong/mirrors/deferred_mirrors_metadata_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/deferred_mirrors_metadata_test.dart
rename to tests/lib_strong/mirrors/deferred_mirrors_metadata_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/deferred_mirrors_metatarget_lib.dart b/tests/lib_strong/mirrors/deferred_mirrors_metatarget_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/deferred_mirrors_metatarget_lib.dart
rename to tests/lib_strong/mirrors/deferred_mirrors_metatarget_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/deferred_mirrors_metatarget_test.dart b/tests/lib_strong/mirrors/deferred_mirrors_metatarget_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/deferred_mirrors_metatarget_test.dart
rename to tests/lib_strong/mirrors/deferred_mirrors_metatarget_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/deferred_mirrors_update_lib.dart b/tests/lib_strong/mirrors/deferred_mirrors_update_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/deferred_mirrors_update_lib.dart
rename to tests/lib_strong/mirrors/deferred_mirrors_update_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/deferred_mirrors_update_test.dart b/tests/lib_strong/mirrors/deferred_mirrors_update_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/deferred_mirrors_update_test.dart
rename to tests/lib_strong/mirrors/deferred_mirrors_update_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/deferred_type_other.dart b/tests/lib_strong/mirrors/deferred_type_other.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/deferred_type_other.dart
rename to tests/lib_strong/mirrors/deferred_type_other.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/deferred_type_test.dart b/tests/lib_strong/mirrors/deferred_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/deferred_type_test.dart
rename to tests/lib_strong/mirrors/deferred_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/delegate_call_through_getter_test.dart b/tests/lib_strong/mirrors/delegate_call_through_getter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/delegate_call_through_getter_test.dart
rename to tests/lib_strong/mirrors/delegate_call_through_getter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/delegate_class_test.dart b/tests/lib_strong/mirrors/delegate_class_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/delegate_class_test.dart
rename to tests/lib_strong/mirrors/delegate_class_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/delegate_function_invocation_test.dart b/tests/lib_strong/mirrors/delegate_function_invocation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/delegate_function_invocation_test.dart
rename to tests/lib_strong/mirrors/delegate_function_invocation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/delegate_library_test.dart b/tests/lib_strong/mirrors/delegate_library_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/delegate_library_test.dart
rename to tests/lib_strong/mirrors/delegate_library_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/delegate_test.dart b/tests/lib_strong/mirrors/delegate_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/delegate_test.dart
rename to tests/lib_strong/mirrors/delegate_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/disable_tree_shaking_test.dart b/tests/lib_strong/mirrors/disable_tree_shaking_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/disable_tree_shaking_test.dart
rename to tests/lib_strong/mirrors/disable_tree_shaking_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/empty.dart b/tests/lib_strong/mirrors/empty.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/empty.dart
rename to tests/lib_strong/mirrors/empty.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/empty_test.dart b/tests/lib_strong/mirrors/empty_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/empty_test.dart
rename to tests/lib_strong/mirrors/empty_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/enum_test.dart b/tests/lib_strong/mirrors/enum_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/enum_test.dart
rename to tests/lib_strong/mirrors/enum_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/equality_test.dart b/tests/lib_strong/mirrors/equality_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/equality_test.dart
rename to tests/lib_strong/mirrors/equality_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/fake_function_with_call_test.dart b/tests/lib_strong/mirrors/fake_function_with_call_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/fake_function_with_call_test.dart
rename to tests/lib_strong/mirrors/fake_function_with_call_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/fake_function_without_call_test.dart b/tests/lib_strong/mirrors/fake_function_without_call_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/fake_function_without_call_test.dart
rename to tests/lib_strong/mirrors/fake_function_without_call_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/field_type_test.dart b/tests/lib_strong/mirrors/field_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/field_type_test.dart
rename to tests/lib_strong/mirrors/field_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/function_apply_mirrors_lib.dart b/tests/lib_strong/mirrors/function_apply_mirrors_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/function_apply_mirrors_lib.dart
rename to tests/lib_strong/mirrors/function_apply_mirrors_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/function_apply_mirrors_test.dart b/tests/lib_strong/mirrors/function_apply_mirrors_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/function_apply_mirrors_test.dart
rename to tests/lib_strong/mirrors/function_apply_mirrors_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/function_type_mirror_test.dart b/tests/lib_strong/mirrors/function_type_mirror_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/function_type_mirror_test.dart
rename to tests/lib_strong/mirrors/function_type_mirror_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generic_bounded_by_type_parameter_test.dart b/tests/lib_strong/mirrors/generic_bounded_by_type_parameter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generic_bounded_by_type_parameter_test.dart
rename to tests/lib_strong/mirrors/generic_bounded_by_type_parameter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generic_bounded_test.dart b/tests/lib_strong/mirrors/generic_bounded_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generic_bounded_test.dart
rename to tests/lib_strong/mirrors/generic_bounded_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generic_class_declaration_test.dart b/tests/lib_strong/mirrors/generic_class_declaration_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generic_class_declaration_test.dart
rename to tests/lib_strong/mirrors/generic_class_declaration_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generic_f_bounded_mixin_application_test.dart b/tests/lib_strong/mirrors/generic_f_bounded_mixin_application_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generic_f_bounded_mixin_application_test.dart
rename to tests/lib_strong/mirrors/generic_f_bounded_mixin_application_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generic_f_bounded_test.dart b/tests/lib_strong/mirrors/generic_f_bounded_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generic_f_bounded_test.dart
rename to tests/lib_strong/mirrors/generic_f_bounded_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generic_function_typedef_test.dart b/tests/lib_strong/mirrors/generic_function_typedef_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generic_function_typedef_test.dart
rename to tests/lib_strong/mirrors/generic_function_typedef_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generic_interface_test.dart b/tests/lib_strong/mirrors/generic_interface_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generic_interface_test.dart
rename to tests/lib_strong/mirrors/generic_interface_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generic_list_test.dart b/tests/lib_strong/mirrors/generic_list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generic_list_test.dart
rename to tests/lib_strong/mirrors/generic_list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generic_local_function_test.dart b/tests/lib_strong/mirrors/generic_local_function_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generic_local_function_test.dart
rename to tests/lib_strong/mirrors/generic_local_function_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generic_mixin_applications_test.dart b/tests/lib_strong/mirrors/generic_mixin_applications_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generic_mixin_applications_test.dart
rename to tests/lib_strong/mirrors/generic_mixin_applications_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generic_mixin_test.dart b/tests/lib_strong/mirrors/generic_mixin_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generic_mixin_test.dart
rename to tests/lib_strong/mirrors/generic_mixin_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generic_superclass_test.dart b/tests/lib_strong/mirrors/generic_superclass_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generic_superclass_test.dart
rename to tests/lib_strong/mirrors/generic_superclass_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generic_type_mirror_test.dart b/tests/lib_strong/mirrors/generic_type_mirror_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generic_type_mirror_test.dart
rename to tests/lib_strong/mirrors/generic_type_mirror_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generics_double_substitution_test.dart b/tests/lib_strong/mirrors/generics_double_substitution_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generics_double_substitution_test.dart
rename to tests/lib_strong/mirrors/generics_double_substitution_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generics_dynamic_test.dart b/tests/lib_strong/mirrors/generics_dynamic_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generics_dynamic_test.dart
rename to tests/lib_strong/mirrors/generics_dynamic_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generics_helper.dart b/tests/lib_strong/mirrors/generics_helper.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generics_helper.dart
rename to tests/lib_strong/mirrors/generics_helper.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generics_special_types_test.dart b/tests/lib_strong/mirrors/generics_special_types_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generics_special_types_test.dart
rename to tests/lib_strong/mirrors/generics_special_types_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generics_substitution_test.dart b/tests/lib_strong/mirrors/generics_substitution_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generics_substitution_test.dart
rename to tests/lib_strong/mirrors/generics_substitution_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/generics_test.dart b/tests/lib_strong/mirrors/generics_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/generics_test.dart
rename to tests/lib_strong/mirrors/generics_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/get_field_cache_test.dart b/tests/lib_strong/mirrors/get_field_cache_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/get_field_cache_test.dart
rename to tests/lib_strong/mirrors/get_field_cache_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/get_field_static_test.dart b/tests/lib_strong/mirrors/get_field_static_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/get_field_static_test.dart
rename to tests/lib_strong/mirrors/get_field_static_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/get_field_test.dart b/tests/lib_strong/mirrors/get_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/get_field_test.dart
rename to tests/lib_strong/mirrors/get_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/get_symbol_name_no_such_method_test.dart b/tests/lib_strong/mirrors/get_symbol_name_no_such_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/get_symbol_name_no_such_method_test.dart
rename to tests/lib_strong/mirrors/get_symbol_name_no_such_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/get_symbol_name_test.dart b/tests/lib_strong/mirrors/get_symbol_name_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/get_symbol_name_test.dart
rename to tests/lib_strong/mirrors/get_symbol_name_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/globalized_closures2_test.dart b/tests/lib_strong/mirrors/globalized_closures2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/globalized_closures2_test.dart
rename to tests/lib_strong/mirrors/globalized_closures2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/globalized_closures_test.dart b/tests/lib_strong/mirrors/globalized_closures_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/globalized_closures_test.dart
rename to tests/lib_strong/mirrors/globalized_closures_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/hierarchy_invariants_test.dart b/tests/lib_strong/mirrors/hierarchy_invariants_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/hierarchy_invariants_test.dart
rename to tests/lib_strong/mirrors/hierarchy_invariants_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/hot_get_field_test.dart b/tests/lib_strong/mirrors/hot_get_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/hot_get_field_test.dart
rename to tests/lib_strong/mirrors/hot_get_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/hot_set_field_test.dart b/tests/lib_strong/mirrors/hot_set_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/hot_set_field_test.dart
rename to tests/lib_strong/mirrors/hot_set_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/immutable_collections_test.dart b/tests/lib_strong/mirrors/immutable_collections_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/immutable_collections_test.dart
rename to tests/lib_strong/mirrors/immutable_collections_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/inference_and_no_such_method_test.dart b/tests/lib_strong/mirrors/inference_and_no_such_method_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/inference_and_no_such_method_test.dart
rename to tests/lib_strong/mirrors/inference_and_no_such_method_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/inherit_field_test.dart b/tests/lib_strong/mirrors/inherit_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/inherit_field_test.dart
rename to tests/lib_strong/mirrors/inherit_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/inherited_metadata_test.dart b/tests/lib_strong/mirrors/inherited_metadata_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/inherited_metadata_test.dart
rename to tests/lib_strong/mirrors/inherited_metadata_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/initializing_formals_test.dart b/tests/lib_strong/mirrors/initializing_formals_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/initializing_formals_test.dart
rename to tests/lib_strong/mirrors/initializing_formals_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/instance_members_easier_test.dart b/tests/lib_strong/mirrors/instance_members_easier_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/instance_members_easier_test.dart
rename to tests/lib_strong/mirrors/instance_members_easier_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/instance_members_test.dart b/tests/lib_strong/mirrors/instance_members_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/instance_members_test.dart
rename to tests/lib_strong/mirrors/instance_members_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/instance_members_unimplemented_interface_test.dart b/tests/lib_strong/mirrors/instance_members_unimplemented_interface_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/instance_members_unimplemented_interface_test.dart
rename to tests/lib_strong/mirrors/instance_members_unimplemented_interface_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/instance_members_with_override_test.dart b/tests/lib_strong/mirrors/instance_members_with_override_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/instance_members_with_override_test.dart
rename to tests/lib_strong/mirrors/instance_members_with_override_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/instantiate_abstract_class_test.dart b/tests/lib_strong/mirrors/instantiate_abstract_class_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/instantiate_abstract_class_test.dart
rename to tests/lib_strong/mirrors/instantiate_abstract_class_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/intercepted_cache_test.dart b/tests/lib_strong/mirrors/intercepted_cache_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/intercepted_cache_test.dart
rename to tests/lib_strong/mirrors/intercepted_cache_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/intercepted_class_test.dart b/tests/lib_strong/mirrors/intercepted_class_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/intercepted_class_test.dart
rename to tests/lib_strong/mirrors/intercepted_class_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/intercepted_object_test.dart b/tests/lib_strong/mirrors/intercepted_object_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/intercepted_object_test.dart
rename to tests/lib_strong/mirrors/intercepted_object_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/intercepted_superclass_test.dart b/tests/lib_strong/mirrors/intercepted_superclass_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/intercepted_superclass_test.dart
rename to tests/lib_strong/mirrors/intercepted_superclass_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/invocation_cache_test.dart b/tests/lib_strong/mirrors/invocation_cache_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/invocation_cache_test.dart
rename to tests/lib_strong/mirrors/invocation_cache_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/invocation_fuzz_test.dart b/tests/lib_strong/mirrors/invocation_fuzz_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/invocation_fuzz_test.dart
rename to tests/lib_strong/mirrors/invocation_fuzz_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/invoke_call_on_closure_test.dart b/tests/lib_strong/mirrors/invoke_call_on_closure_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/invoke_call_on_closure_test.dart
rename to tests/lib_strong/mirrors/invoke_call_on_closure_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/invoke_call_through_getter_previously_accessed_test.dart b/tests/lib_strong/mirrors/invoke_call_through_getter_previously_accessed_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/invoke_call_through_getter_previously_accessed_test.dart
rename to tests/lib_strong/mirrors/invoke_call_through_getter_previously_accessed_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/invoke_call_through_getter_test.dart b/tests/lib_strong/mirrors/invoke_call_through_getter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/invoke_call_through_getter_test.dart
rename to tests/lib_strong/mirrors/invoke_call_through_getter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/invoke_call_through_implicit_getter_previously_accessed_test.dart b/tests/lib_strong/mirrors/invoke_call_through_implicit_getter_previously_accessed_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/invoke_call_through_implicit_getter_previously_accessed_test.dart
rename to tests/lib_strong/mirrors/invoke_call_through_implicit_getter_previously_accessed_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/invoke_call_through_implicit_getter_test.dart b/tests/lib_strong/mirrors/invoke_call_through_implicit_getter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/invoke_call_through_implicit_getter_test.dart
rename to tests/lib_strong/mirrors/invoke_call_through_implicit_getter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/invoke_closurization2_test.dart b/tests/lib_strong/mirrors/invoke_closurization2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/invoke_closurization2_test.dart
rename to tests/lib_strong/mirrors/invoke_closurization2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/invoke_closurization_test.dart b/tests/lib_strong/mirrors/invoke_closurization_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/invoke_closurization_test.dart
rename to tests/lib_strong/mirrors/invoke_closurization_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/invoke_import_test.dart b/tests/lib_strong/mirrors/invoke_import_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/invoke_import_test.dart
rename to tests/lib_strong/mirrors/invoke_import_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/invoke_named_test.dart b/tests/lib_strong/mirrors/invoke_named_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/invoke_named_test.dart
rename to tests/lib_strong/mirrors/invoke_named_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/invoke_natives_malicious_test.dart b/tests/lib_strong/mirrors/invoke_natives_malicious_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/invoke_natives_malicious_test.dart
rename to tests/lib_strong/mirrors/invoke_natives_malicious_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/invoke_private_test.dart b/tests/lib_strong/mirrors/invoke_private_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/invoke_private_test.dart
rename to tests/lib_strong/mirrors/invoke_private_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/invoke_private_wrong_library_test.dart b/tests/lib_strong/mirrors/invoke_private_wrong_library_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/invoke_private_wrong_library_test.dart
rename to tests/lib_strong/mirrors/invoke_private_wrong_library_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/invoke_test.dart b/tests/lib_strong/mirrors/invoke_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/invoke_test.dart
rename to tests/lib_strong/mirrors/invoke_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/invoke_throws_test.dart b/tests/lib_strong/mirrors/invoke_throws_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/invoke_throws_test.dart
rename to tests/lib_strong/mirrors/invoke_throws_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/io_html_mutual_exclusion_test.dart b/tests/lib_strong/mirrors/io_html_mutual_exclusion_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/io_html_mutual_exclusion_test.dart
rename to tests/lib_strong/mirrors/io_html_mutual_exclusion_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/is_odd_test.dart b/tests/lib_strong/mirrors/is_odd_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/is_odd_test.dart
rename to tests/lib_strong/mirrors/is_odd_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/lazy_static_test.dart b/tests/lib_strong/mirrors/lazy_static_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/lazy_static_test.dart
rename to tests/lib_strong/mirrors/lazy_static_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/libraries_test.dart b/tests/lib_strong/mirrors/libraries_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/libraries_test.dart
rename to tests/lib_strong/mirrors/libraries_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_declarations_test.dart b/tests/lib_strong/mirrors/library_declarations_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_declarations_test.dart
rename to tests/lib_strong/mirrors/library_declarations_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_enumeration_deferred_loading_test.dart b/tests/lib_strong/mirrors/library_enumeration_deferred_loading_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_enumeration_deferred_loading_test.dart
rename to tests/lib_strong/mirrors/library_enumeration_deferred_loading_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_exports_hidden.dart b/tests/lib_strong/mirrors/library_exports_hidden.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_exports_hidden.dart
rename to tests/lib_strong/mirrors/library_exports_hidden.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_exports_hidden_test.dart b/tests/lib_strong/mirrors/library_exports_hidden_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_exports_hidden_test.dart
rename to tests/lib_strong/mirrors/library_exports_hidden_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_exports_shown.dart b/tests/lib_strong/mirrors/library_exports_shown.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_exports_shown.dart
rename to tests/lib_strong/mirrors/library_exports_shown.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_exports_shown_test.dart b/tests/lib_strong/mirrors/library_exports_shown_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_exports_shown_test.dart
rename to tests/lib_strong/mirrors/library_exports_shown_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_import_deferred_loading_test.dart b/tests/lib_strong/mirrors/library_import_deferred_loading_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_import_deferred_loading_test.dart
rename to tests/lib_strong/mirrors/library_import_deferred_loading_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_a.dart b/tests/lib_strong/mirrors/library_imports_a.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_a.dart
rename to tests/lib_strong/mirrors/library_imports_a.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_b.dart b/tests/lib_strong/mirrors/library_imports_b.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_b.dart
rename to tests/lib_strong/mirrors/library_imports_b.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_bad_metadata_test.dart b/tests/lib_strong/mirrors/library_imports_bad_metadata_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_bad_metadata_test.dart
rename to tests/lib_strong/mirrors/library_imports_bad_metadata_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_deferred_test.dart b/tests/lib_strong/mirrors/library_imports_deferred_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_deferred_test.dart
rename to tests/lib_strong/mirrors/library_imports_deferred_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_hidden.dart b/tests/lib_strong/mirrors/library_imports_hidden.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_hidden.dart
rename to tests/lib_strong/mirrors/library_imports_hidden.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_hidden_test.dart b/tests/lib_strong/mirrors/library_imports_hidden_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_hidden_test.dart
rename to tests/lib_strong/mirrors/library_imports_hidden_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_metadata.dart b/tests/lib_strong/mirrors/library_imports_metadata.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_metadata.dart
rename to tests/lib_strong/mirrors/library_imports_metadata.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_metadata_test.dart b/tests/lib_strong/mirrors/library_imports_metadata_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_metadata_test.dart
rename to tests/lib_strong/mirrors/library_imports_metadata_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_prefixed.dart b/tests/lib_strong/mirrors/library_imports_prefixed.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_prefixed.dart
rename to tests/lib_strong/mirrors/library_imports_prefixed.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_prefixed_show_hide.dart b/tests/lib_strong/mirrors/library_imports_prefixed_show_hide.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_prefixed_show_hide.dart
rename to tests/lib_strong/mirrors/library_imports_prefixed_show_hide.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_prefixed_show_hide_test.dart b/tests/lib_strong/mirrors/library_imports_prefixed_show_hide_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_prefixed_show_hide_test.dart
rename to tests/lib_strong/mirrors/library_imports_prefixed_show_hide_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_prefixed_test.dart b/tests/lib_strong/mirrors/library_imports_prefixed_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_prefixed_test.dart
rename to tests/lib_strong/mirrors/library_imports_prefixed_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_shown.dart b/tests/lib_strong/mirrors/library_imports_shown.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_shown.dart
rename to tests/lib_strong/mirrors/library_imports_shown.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_shown_test.dart b/tests/lib_strong/mirrors/library_imports_shown_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_imports_shown_test.dart
rename to tests/lib_strong/mirrors/library_imports_shown_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_metadata2_lib1.dart b/tests/lib_strong/mirrors/library_metadata2_lib1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_metadata2_lib1.dart
rename to tests/lib_strong/mirrors/library_metadata2_lib1.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_metadata2_lib2.dart b/tests/lib_strong/mirrors/library_metadata2_lib2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_metadata2_lib2.dart
rename to tests/lib_strong/mirrors/library_metadata2_lib2.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_metadata2_test.dart b/tests/lib_strong/mirrors/library_metadata2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_metadata2_test.dart
rename to tests/lib_strong/mirrors/library_metadata2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_metadata_test.dart b/tests/lib_strong/mirrors/library_metadata_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_metadata_test.dart
rename to tests/lib_strong/mirrors/library_metadata_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_metatarget_test.dart b/tests/lib_strong/mirrors/library_metatarget_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_metatarget_test.dart
rename to tests/lib_strong/mirrors/library_metatarget_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_metatarget_test_annotations_lib.dart b/tests/lib_strong/mirrors/library_metatarget_test_annotations_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_metatarget_test_annotations_lib.dart
rename to tests/lib_strong/mirrors/library_metatarget_test_annotations_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_metatarget_test_lib.dart b/tests/lib_strong/mirrors/library_metatarget_test_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_metatarget_test_lib.dart
rename to tests/lib_strong/mirrors/library_metatarget_test_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_uri_io_test.dart b/tests/lib_strong/mirrors/library_uri_io_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_uri_io_test.dart
rename to tests/lib_strong/mirrors/library_uri_io_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_uri_package_test.dart b/tests/lib_strong/mirrors/library_uri_package_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_uri_package_test.dart
rename to tests/lib_strong/mirrors/library_uri_package_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_with_annotated_declaration.dart b/tests/lib_strong/mirrors/library_with_annotated_declaration.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_with_annotated_declaration.dart
rename to tests/lib_strong/mirrors/library_with_annotated_declaration.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/library_without_declaration.dart b/tests/lib_strong/mirrors/library_without_declaration.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/library_without_declaration.dart
rename to tests/lib_strong/mirrors/library_without_declaration.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/list_constructor_test.dart b/tests/lib_strong/mirrors/list_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/list_constructor_test.dart
rename to tests/lib_strong/mirrors/list_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/load_library_test.dart b/tests/lib_strong/mirrors/load_library_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/load_library_test.dart
rename to tests/lib_strong/mirrors/load_library_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/local_function_is_static_test.dart b/tests/lib_strong/mirrors/local_function_is_static_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/local_function_is_static_test.dart
rename to tests/lib_strong/mirrors/local_function_is_static_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/local_isolate_test.dart b/tests/lib_strong/mirrors/local_isolate_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/local_isolate_test.dart
rename to tests/lib_strong/mirrors/local_isolate_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/metadata_allowed_values_import.dart b/tests/lib_strong/mirrors/metadata_allowed_values_import.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/metadata_allowed_values_import.dart
rename to tests/lib_strong/mirrors/metadata_allowed_values_import.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/metadata_allowed_values_test.dart b/tests/lib_strong/mirrors/metadata_allowed_values_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/metadata_allowed_values_test.dart
rename to tests/lib_strong/mirrors/metadata_allowed_values_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/metadata_class_mirror_test.dart b/tests/lib_strong/mirrors/metadata_class_mirror_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/metadata_class_mirror_test.dart
rename to tests/lib_strong/mirrors/metadata_class_mirror_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/metadata_const_map_test.dart b/tests/lib_strong/mirrors/metadata_const_map_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/metadata_const_map_test.dart
rename to tests/lib_strong/mirrors/metadata_const_map_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/metadata_constructed_constant_test.dart b/tests/lib_strong/mirrors/metadata_constructed_constant_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/metadata_constructed_constant_test.dart
rename to tests/lib_strong/mirrors/metadata_constructed_constant_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/metadata_constructor_arguments_test.dart b/tests/lib_strong/mirrors/metadata_constructor_arguments_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/metadata_constructor_arguments_test.dart
rename to tests/lib_strong/mirrors/metadata_constructor_arguments_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/metadata_nested_constructor_call_test.dart b/tests/lib_strong/mirrors/metadata_nested_constructor_call_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/metadata_nested_constructor_call_test.dart
rename to tests/lib_strong/mirrors/metadata_nested_constructor_call_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/metadata_scope_test.dart b/tests/lib_strong/mirrors/metadata_scope_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/metadata_scope_test.dart
rename to tests/lib_strong/mirrors/metadata_scope_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/metadata_test.dart b/tests/lib_strong/mirrors/metadata_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/metadata_test.dart
rename to tests/lib_strong/mirrors/metadata_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_location_other.dart b/tests/lib_strong/mirrors/method_mirror_location_other.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_location_other.dart
rename to tests/lib_strong/mirrors/method_mirror_location_other.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_location_test.dart b/tests/lib_strong/mirrors/method_mirror_location_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_location_test.dart
rename to tests/lib_strong/mirrors/method_mirror_location_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_name_test.dart b/tests/lib_strong/mirrors/method_mirror_name_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_name_test.dart
rename to tests/lib_strong/mirrors/method_mirror_name_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_properties_test.dart b/tests/lib_strong/mirrors/method_mirror_properties_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_properties_test.dart
rename to tests/lib_strong/mirrors/method_mirror_properties_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_returntype_test.dart b/tests/lib_strong/mirrors/method_mirror_returntype_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_returntype_test.dart
rename to tests/lib_strong/mirrors/method_mirror_returntype_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_source_line_ending_cr.dart b/tests/lib_strong/mirrors/method_mirror_source_line_ending_cr.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_source_line_ending_cr.dart
rename to tests/lib_strong/mirrors/method_mirror_source_line_ending_cr.dart
Binary files differ
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_source_line_ending_crlf.dart b/tests/lib_strong/mirrors/method_mirror_source_line_ending_crlf.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_source_line_ending_crlf.dart
rename to tests/lib_strong/mirrors/method_mirror_source_line_ending_crlf.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_source_line_ending_lf.dart b/tests/lib_strong/mirrors/method_mirror_source_line_ending_lf.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_source_line_ending_lf.dart
rename to tests/lib_strong/mirrors/method_mirror_source_line_ending_lf.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_source_line_ending_test.dart b/tests/lib_strong/mirrors/method_mirror_source_line_ending_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_source_line_ending_test.dart
rename to tests/lib_strong/mirrors/method_mirror_source_line_ending_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_source_other.dart b/tests/lib_strong/mirrors/method_mirror_source_other.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_source_other.dart
rename to tests/lib_strong/mirrors/method_mirror_source_other.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_source_test.dart b/tests/lib_strong/mirrors/method_mirror_source_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/method_mirror_source_test.dart
rename to tests/lib_strong/mirrors/method_mirror_source_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/mirror_in_static_init_test.dart b/tests/lib_strong/mirrors/mirror_in_static_init_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/mirror_in_static_init_test.dart
rename to tests/lib_strong/mirrors/mirror_in_static_init_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_nsm_mismatch_test.dart b/tests/lib_strong/mirrors/mirrors_nsm_mismatch_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_nsm_mismatch_test.dart
rename to tests/lib_strong/mirrors/mirrors_nsm_mismatch_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_nsm_test.dart b/tests/lib_strong/mirrors/mirrors_nsm_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_nsm_test.dart
rename to tests/lib_strong/mirrors/mirrors_nsm_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_reader.dart b/tests/lib_strong/mirrors/mirrors_reader.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_reader.dart
rename to tests/lib_strong/mirrors/mirrors_reader.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_reader_test.dart b/tests/lib_strong/mirrors/mirrors_reader_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_reader_test.dart
rename to tests/lib_strong/mirrors/mirrors_reader_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_resolve_fields_test.dart b/tests/lib_strong/mirrors/mirrors_resolve_fields_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_resolve_fields_test.dart
rename to tests/lib_strong/mirrors/mirrors_resolve_fields_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_test.dart b/tests/lib_strong/mirrors/mirrors_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_test.dart
rename to tests/lib_strong/mirrors/mirrors_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_used_get_name2_test.dart b/tests/lib_strong/mirrors/mirrors_used_get_name2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_used_get_name2_test.dart
rename to tests/lib_strong/mirrors/mirrors_used_get_name2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_used_get_name_test.dart b/tests/lib_strong/mirrors/mirrors_used_get_name_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_used_get_name_test.dart
rename to tests/lib_strong/mirrors/mirrors_used_get_name_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_used_inheritance_test.dart b/tests/lib_strong/mirrors/mirrors_used_inheritance_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_used_inheritance_test.dart
rename to tests/lib_strong/mirrors/mirrors_used_inheritance_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_used_merge_test.dart b/tests/lib_strong/mirrors/mirrors_used_merge_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_used_merge_test.dart
rename to tests/lib_strong/mirrors/mirrors_used_merge_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_used_typedef_declaration_test.dart b/tests/lib_strong/mirrors/mirrors_used_typedef_declaration_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_used_typedef_declaration_test.dart
rename to tests/lib_strong/mirrors/mirrors_used_typedef_declaration_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_visitor.dart b/tests/lib_strong/mirrors/mirrors_visitor.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/mirrors_visitor.dart
rename to tests/lib_strong/mirrors/mirrors_visitor.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/mixin_application_test.dart b/tests/lib_strong/mirrors/mixin_application_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/mixin_application_test.dart
rename to tests/lib_strong/mirrors/mixin_application_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/mixin_members_test.dart b/tests/lib_strong/mirrors/mixin_members_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/mixin_members_test.dart
rename to tests/lib_strong/mirrors/mixin_members_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/mixin_simple_test.dart b/tests/lib_strong/mirrors/mixin_simple_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/mixin_simple_test.dart
rename to tests/lib_strong/mirrors/mixin_simple_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/mixin_test.dart b/tests/lib_strong/mirrors/mixin_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/mixin_test.dart
rename to tests/lib_strong/mirrors/mixin_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/model.dart b/tests/lib_strong/mirrors/model.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/model.dart
rename to tests/lib_strong/mirrors/model.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/model_test.dart b/tests/lib_strong/mirrors/model_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/model_test.dart
rename to tests/lib_strong/mirrors/model_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/native_class_test.dart b/tests/lib_strong/mirrors/native_class_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/native_class_test.dart
rename to tests/lib_strong/mirrors/native_class_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/new_instance_optional_arguments_test.dart b/tests/lib_strong/mirrors/new_instance_optional_arguments_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/new_instance_optional_arguments_test.dart
rename to tests/lib_strong/mirrors/new_instance_optional_arguments_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/new_instance_with_type_arguments_test.dart b/tests/lib_strong/mirrors/new_instance_with_type_arguments_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/new_instance_with_type_arguments_test.dart
rename to tests/lib_strong/mirrors/new_instance_with_type_arguments_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/no_metadata_test.dart b/tests/lib_strong/mirrors/no_metadata_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/no_metadata_test.dart
rename to tests/lib_strong/mirrors/no_metadata_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/null2_test.dart b/tests/lib_strong/mirrors/null2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/null2_test.dart
rename to tests/lib_strong/mirrors/null2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/null_test.dart b/tests/lib_strong/mirrors/null_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/null_test.dart
rename to tests/lib_strong/mirrors/null_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/operator_test.dart b/tests/lib_strong/mirrors/operator_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/operator_test.dart
rename to tests/lib_strong/mirrors/operator_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/optional_parameters_test.dart b/tests/lib_strong/mirrors/optional_parameters_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/optional_parameters_test.dart
rename to tests/lib_strong/mirrors/optional_parameters_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/other_declarations_location_test.dart b/tests/lib_strong/mirrors/other_declarations_location_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/other_declarations_location_test.dart
rename to tests/lib_strong/mirrors/other_declarations_location_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/other_library.dart b/tests/lib_strong/mirrors/other_library.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/other_library.dart
rename to tests/lib_strong/mirrors/other_library.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/parameter_annotation_mirror_test.dart b/tests/lib_strong/mirrors/parameter_annotation_mirror_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/parameter_annotation_mirror_test.dart
rename to tests/lib_strong/mirrors/parameter_annotation_mirror_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/parameter_is_const_test.dart b/tests/lib_strong/mirrors/parameter_is_const_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/parameter_is_const_test.dart
rename to tests/lib_strong/mirrors/parameter_is_const_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/parameter_metadata_test.dart b/tests/lib_strong/mirrors/parameter_metadata_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/parameter_metadata_test.dart
rename to tests/lib_strong/mirrors/parameter_metadata_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/parameter_of_mixin_app_constructor_test.dart b/tests/lib_strong/mirrors/parameter_of_mixin_app_constructor_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/parameter_of_mixin_app_constructor_test.dart
rename to tests/lib_strong/mirrors/parameter_of_mixin_app_constructor_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/parameter_test.dart b/tests/lib_strong/mirrors/parameter_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/parameter_test.dart
rename to tests/lib_strong/mirrors/parameter_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/private_class_field_other.dart b/tests/lib_strong/mirrors/private_class_field_other.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/private_class_field_other.dart
rename to tests/lib_strong/mirrors/private_class_field_other.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/private_class_field_test.dart b/tests/lib_strong/mirrors/private_class_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/private_class_field_test.dart
rename to tests/lib_strong/mirrors/private_class_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/private_field_helper.dart b/tests/lib_strong/mirrors/private_field_helper.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/private_field_helper.dart
rename to tests/lib_strong/mirrors/private_field_helper.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/private_field_test.dart b/tests/lib_strong/mirrors/private_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/private_field_test.dart
rename to tests/lib_strong/mirrors/private_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/private_symbol_mangling_lib.dart b/tests/lib_strong/mirrors/private_symbol_mangling_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/private_symbol_mangling_lib.dart
rename to tests/lib_strong/mirrors/private_symbol_mangling_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/private_symbol_mangling_test.dart b/tests/lib_strong/mirrors/private_symbol_mangling_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/private_symbol_mangling_test.dart
rename to tests/lib_strong/mirrors/private_symbol_mangling_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/private_symbol_test.dart b/tests/lib_strong/mirrors/private_symbol_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/private_symbol_test.dart
rename to tests/lib_strong/mirrors/private_symbol_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/private_types_test.dart b/tests/lib_strong/mirrors/private_types_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/private_types_test.dart
rename to tests/lib_strong/mirrors/private_types_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/proxy_type_test.dart b/tests/lib_strong/mirrors/proxy_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/proxy_type_test.dart
rename to tests/lib_strong/mirrors/proxy_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/raw_type_test.dart b/tests/lib_strong/mirrors/raw_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/raw_type_test.dart
rename to tests/lib_strong/mirrors/raw_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/redirecting_factory_different_type_test.dart b/tests/lib_strong/mirrors/redirecting_factory_different_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/redirecting_factory_different_type_test.dart
rename to tests/lib_strong/mirrors/redirecting_factory_different_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/redirecting_factory_test.dart b/tests/lib_strong/mirrors/redirecting_factory_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/redirecting_factory_test.dart
rename to tests/lib_strong/mirrors/redirecting_factory_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/reflect_class_test.dart b/tests/lib_strong/mirrors/reflect_class_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/reflect_class_test.dart
rename to tests/lib_strong/mirrors/reflect_class_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/reflect_model_test.dart b/tests/lib_strong/mirrors/reflect_model_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/reflect_model_test.dart
rename to tests/lib_strong/mirrors/reflect_model_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/reflect_runtime_type_test.dart b/tests/lib_strong/mirrors/reflect_runtime_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/reflect_runtime_type_test.dart
rename to tests/lib_strong/mirrors/reflect_runtime_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/reflect_two_classes_test.dart b/tests/lib_strong/mirrors/reflect_two_classes_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/reflect_two_classes_test.dart
rename to tests/lib_strong/mirrors/reflect_two_classes_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/reflect_uninstantiated_class_test.dart b/tests/lib_strong/mirrors/reflect_uninstantiated_class_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/reflect_uninstantiated_class_test.dart
rename to tests/lib_strong/mirrors/reflect_uninstantiated_class_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/reflected_type_classes_test.dart b/tests/lib_strong/mirrors/reflected_type_classes_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/reflected_type_classes_test.dart
rename to tests/lib_strong/mirrors/reflected_type_classes_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/reflected_type_function_type_test.dart b/tests/lib_strong/mirrors/reflected_type_function_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/reflected_type_function_type_test.dart
rename to tests/lib_strong/mirrors/reflected_type_function_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/reflected_type_helper.dart b/tests/lib_strong/mirrors/reflected_type_helper.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/reflected_type_helper.dart
rename to tests/lib_strong/mirrors/reflected_type_helper.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/reflected_type_special_types_test.dart b/tests/lib_strong/mirrors/reflected_type_special_types_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/reflected_type_special_types_test.dart
rename to tests/lib_strong/mirrors/reflected_type_special_types_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/reflected_type_test.dart b/tests/lib_strong/mirrors/reflected_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/reflected_type_test.dart
rename to tests/lib_strong/mirrors/reflected_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/reflected_type_typedefs_test.dart b/tests/lib_strong/mirrors/reflected_type_typedefs_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/reflected_type_typedefs_test.dart
rename to tests/lib_strong/mirrors/reflected_type_typedefs_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/reflected_type_typevars_test.dart b/tests/lib_strong/mirrors/reflected_type_typevars_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/reflected_type_typevars_test.dart
rename to tests/lib_strong/mirrors/reflected_type_typevars_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/reflectively_instantiate_uninstantiated_class_test.dart b/tests/lib_strong/mirrors/reflectively_instantiate_uninstantiated_class_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/reflectively_instantiate_uninstantiated_class_test.dart
rename to tests/lib_strong/mirrors/reflectively_instantiate_uninstantiated_class_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/regress_14304_test.dart b/tests/lib_strong/mirrors/regress_14304_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/regress_14304_test.dart
rename to tests/lib_strong/mirrors/regress_14304_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/regress_16321_test.dart b/tests/lib_strong/mirrors/regress_16321_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/regress_16321_test.dart
rename to tests/lib_strong/mirrors/regress_16321_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/regress_19731_test.dart b/tests/lib_strong/mirrors/regress_19731_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/regress_19731_test.dart
rename to tests/lib_strong/mirrors/regress_19731_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/regress_26187_test.dart b/tests/lib_strong/mirrors/regress_26187_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/regress_26187_test.dart
rename to tests/lib_strong/mirrors/regress_26187_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/relation_assignable_test.dart b/tests/lib_strong/mirrors/relation_assignable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/relation_assignable_test.dart
rename to tests/lib_strong/mirrors/relation_assignable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/relation_subclass_test.dart b/tests/lib_strong/mirrors/relation_subclass_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/relation_subclass_test.dart
rename to tests/lib_strong/mirrors/relation_subclass_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/relation_subtype_test.dart b/tests/lib_strong/mirrors/relation_subtype_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/relation_subtype_test.dart
rename to tests/lib_strong/mirrors/relation_subtype_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/removed_api_test.dart b/tests/lib_strong/mirrors/removed_api_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/removed_api_test.dart
rename to tests/lib_strong/mirrors/removed_api_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/repeated_private_anon_mixin_app1.dart b/tests/lib_strong/mirrors/repeated_private_anon_mixin_app1.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/repeated_private_anon_mixin_app1.dart
rename to tests/lib_strong/mirrors/repeated_private_anon_mixin_app1.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/repeated_private_anon_mixin_app2.dart b/tests/lib_strong/mirrors/repeated_private_anon_mixin_app2.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/repeated_private_anon_mixin_app2.dart
rename to tests/lib_strong/mirrors/repeated_private_anon_mixin_app2.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/repeated_private_anon_mixin_app_test.dart b/tests/lib_strong/mirrors/repeated_private_anon_mixin_app_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/repeated_private_anon_mixin_app_test.dart
rename to tests/lib_strong/mirrors/repeated_private_anon_mixin_app_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/return_type_test.dart b/tests/lib_strong/mirrors/return_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/return_type_test.dart
rename to tests/lib_strong/mirrors/return_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/runtime_type_test.dart b/tests/lib_strong/mirrors/runtime_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/runtime_type_test.dart
rename to tests/lib_strong/mirrors/runtime_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/set_field_with_final_inheritance_test.dart b/tests/lib_strong/mirrors/set_field_with_final_inheritance_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/set_field_with_final_inheritance_test.dart
rename to tests/lib_strong/mirrors/set_field_with_final_inheritance_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/set_field_with_final_test.dart b/tests/lib_strong/mirrors/set_field_with_final_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/set_field_with_final_test.dart
rename to tests/lib_strong/mirrors/set_field_with_final_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/spawn_function_root_library_test.dart b/tests/lib_strong/mirrors/spawn_function_root_library_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/spawn_function_root_library_test.dart
rename to tests/lib_strong/mirrors/spawn_function_root_library_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/static_const_field_test.dart b/tests/lib_strong/mirrors/static_const_field_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/static_const_field_test.dart
rename to tests/lib_strong/mirrors/static_const_field_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/static_members_easier_test.dart b/tests/lib_strong/mirrors/static_members_easier_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/static_members_easier_test.dart
rename to tests/lib_strong/mirrors/static_members_easier_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/static_members_test.dart b/tests/lib_strong/mirrors/static_members_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/static_members_test.dart
rename to tests/lib_strong/mirrors/static_members_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/static_metatarget_test.dart b/tests/lib_strong/mirrors/static_metatarget_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/static_metatarget_test.dart
rename to tests/lib_strong/mirrors/static_metatarget_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/static_test.dart b/tests/lib_strong/mirrors/static_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/static_test.dart
rename to tests/lib_strong/mirrors/static_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/stringify.dart b/tests/lib_strong/mirrors/stringify.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/stringify.dart
rename to tests/lib_strong/mirrors/stringify.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/superclass2_test.dart b/tests/lib_strong/mirrors/superclass2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/superclass2_test.dart
rename to tests/lib_strong/mirrors/superclass2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/superclass_test.dart b/tests/lib_strong/mirrors/superclass_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/superclass_test.dart
rename to tests/lib_strong/mirrors/superclass_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/symbol_validation_test.dart b/tests/lib_strong/mirrors/symbol_validation_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/symbol_validation_test.dart
rename to tests/lib_strong/mirrors/symbol_validation_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/syntax_error_test.dart b/tests/lib_strong/mirrors/syntax_error_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/syntax_error_test.dart
rename to tests/lib_strong/mirrors/syntax_error_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/synthetic_accessor_properties_test.dart b/tests/lib_strong/mirrors/synthetic_accessor_properties_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/synthetic_accessor_properties_test.dart
rename to tests/lib_strong/mirrors/synthetic_accessor_properties_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/to_string_test.dart b/tests/lib_strong/mirrors/to_string_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/to_string_test.dart
rename to tests/lib_strong/mirrors/to_string_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/top_level_accessors_test.dart b/tests/lib_strong/mirrors/top_level_accessors_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/top_level_accessors_test.dart
rename to tests/lib_strong/mirrors/top_level_accessors_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/type_argument_is_type_variable_test.dart b/tests/lib_strong/mirrors/type_argument_is_type_variable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/type_argument_is_type_variable_test.dart
rename to tests/lib_strong/mirrors/type_argument_is_type_variable_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/type_mirror_for_type_test.dart b/tests/lib_strong/mirrors/type_mirror_for_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/type_mirror_for_type_test.dart
rename to tests/lib_strong/mirrors/type_mirror_for_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/type_variable_is_static_test.dart b/tests/lib_strong/mirrors/type_variable_is_static_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/type_variable_is_static_test.dart
rename to tests/lib_strong/mirrors/type_variable_is_static_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/type_variable_owner_test.dart b/tests/lib_strong/mirrors/type_variable_owner_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/type_variable_owner_test.dart
rename to tests/lib_strong/mirrors/type_variable_owner_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/typearguments_mirror_test.dart b/tests/lib_strong/mirrors/typearguments_mirror_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/typearguments_mirror_test.dart
rename to tests/lib_strong/mirrors/typearguments_mirror_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/typedef_deferred_library_test.dart b/tests/lib_strong/mirrors/typedef_deferred_library_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/typedef_deferred_library_test.dart
rename to tests/lib_strong/mirrors/typedef_deferred_library_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/typedef_in_signature_test.dart b/tests/lib_strong/mirrors/typedef_in_signature_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/typedef_in_signature_test.dart
rename to tests/lib_strong/mirrors/typedef_in_signature_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/typedef_library.dart b/tests/lib_strong/mirrors/typedef_library.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/typedef_library.dart
rename to tests/lib_strong/mirrors/typedef_library.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/typedef_library_test.dart b/tests/lib_strong/mirrors/typedef_library_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/typedef_library_test.dart
rename to tests/lib_strong/mirrors/typedef_library_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/typedef_metadata_test.dart b/tests/lib_strong/mirrors/typedef_metadata_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/typedef_metadata_test.dart
rename to tests/lib_strong/mirrors/typedef_metadata_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/typedef_reflected_type_test.dart b/tests/lib_strong/mirrors/typedef_reflected_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/typedef_reflected_type_test.dart
rename to tests/lib_strong/mirrors/typedef_reflected_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/typedef_test.dart b/tests/lib_strong/mirrors/typedef_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/typedef_test.dart
rename to tests/lib_strong/mirrors/typedef_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/typevariable_mirror_metadata_test.dart b/tests/lib_strong/mirrors/typevariable_mirror_metadata_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/typevariable_mirror_metadata_test.dart
rename to tests/lib_strong/mirrors/typevariable_mirror_metadata_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/unmangled_type_test.dart b/tests/lib_strong/mirrors/unmangled_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/unmangled_type_test.dart
rename to tests/lib_strong/mirrors/unmangled_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/unnamed_library_test.dart b/tests/lib_strong/mirrors/unnamed_library_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/unnamed_library_test.dart
rename to tests/lib_strong/mirrors/unnamed_library_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors2_test.dart b/tests/lib_strong/mirrors/unused_mirrors2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors2_test.dart
rename to tests/lib_strong/mirrors/unused_mirrors2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors3_test.dart b/tests/lib_strong/mirrors/unused_mirrors3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors3_test.dart
rename to tests/lib_strong/mirrors/unused_mirrors3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors4_test.dart b/tests/lib_strong/mirrors/unused_mirrors4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors4_test.dart
rename to tests/lib_strong/mirrors/unused_mirrors4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors5_test.dart b/tests/lib_strong/mirrors/unused_mirrors5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors5_test.dart
rename to tests/lib_strong/mirrors/unused_mirrors5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors6_test.dart b/tests/lib_strong/mirrors/unused_mirrors6_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors6_test.dart
rename to tests/lib_strong/mirrors/unused_mirrors6_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors7_test.dart b/tests/lib_strong/mirrors/unused_mirrors7_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors7_test.dart
rename to tests/lib_strong/mirrors/unused_mirrors7_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors8_test.dart b/tests/lib_strong/mirrors/unused_mirrors8_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors8_test.dart
rename to tests/lib_strong/mirrors/unused_mirrors8_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors9_test.dart b/tests/lib_strong/mirrors/unused_mirrors9_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors9_test.dart
rename to tests/lib_strong/mirrors/unused_mirrors9_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors_test.dart b/tests/lib_strong/mirrors/unused_mirrors_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors_test.dart
rename to tests/lib_strong/mirrors/unused_mirrors_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors_used_test.dart b/tests/lib_strong/mirrors/unused_mirrors_used_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/unused_mirrors_used_test.dart
rename to tests/lib_strong/mirrors/unused_mirrors_used_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/mirrors/variable_is_const_test.dart b/tests/lib_strong/mirrors/variable_is_const_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/mirrors/variable_is_const_test.dart
rename to tests/lib_strong/mirrors/variable_is_const_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/byte_data_test.dart b/tests/lib_strong/typed_data/byte_data_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/byte_data_test.dart
rename to tests/lib_strong/typed_data/byte_data_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/constructor_checks_test.dart b/tests/lib_strong/typed_data/constructor_checks_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/constructor_checks_test.dart
rename to tests/lib_strong/typed_data/constructor_checks_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/endianness_test.dart b/tests/lib_strong/typed_data/endianness_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/endianness_test.dart
rename to tests/lib_strong/typed_data/endianness_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_clamp_test.dart b/tests/lib_strong/typed_data/float32x4_clamp_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_clamp_test.dart
rename to tests/lib_strong/typed_data/float32x4_clamp_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_cross_test.dart b/tests/lib_strong/typed_data/float32x4_cross_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_cross_test.dart
rename to tests/lib_strong/typed_data/float32x4_cross_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_list_test.dart b/tests/lib_strong/typed_data/float32x4_list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_list_test.dart
rename to tests/lib_strong/typed_data/float32x4_list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_shuffle_test.dart b/tests/lib_strong/typed_data/float32x4_shuffle_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_shuffle_test.dart
rename to tests/lib_strong/typed_data/float32x4_shuffle_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_sign_mask_test.dart b/tests/lib_strong/typed_data/float32x4_sign_mask_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_sign_mask_test.dart
rename to tests/lib_strong/typed_data/float32x4_sign_mask_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_test.dart b/tests/lib_strong/typed_data/float32x4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_test.dart
rename to tests/lib_strong/typed_data/float32x4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_transpose_test.dart b/tests/lib_strong/typed_data/float32x4_transpose_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_transpose_test.dart
rename to tests/lib_strong/typed_data/float32x4_transpose_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_two_arg_shuffle_test.dart b/tests/lib_strong/typed_data/float32x4_two_arg_shuffle_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_two_arg_shuffle_test.dart
rename to tests/lib_strong/typed_data/float32x4_two_arg_shuffle_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_unbox_phi_test.dart b/tests/lib_strong/typed_data/float32x4_unbox_phi_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_unbox_phi_test.dart
rename to tests/lib_strong/typed_data/float32x4_unbox_phi_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_unbox_regress_test.dart b/tests/lib_strong/typed_data/float32x4_unbox_regress_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/float32x4_unbox_regress_test.dart
rename to tests/lib_strong/typed_data/float32x4_unbox_regress_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/float64x2_functional_test.dart b/tests/lib_strong/typed_data/float64x2_functional_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/float64x2_functional_test.dart
rename to tests/lib_strong/typed_data/float64x2_functional_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/float64x2_typed_list_test.dart b/tests/lib_strong/typed_data/float64x2_typed_list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/float64x2_typed_list_test.dart
rename to tests/lib_strong/typed_data/float64x2_typed_list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/int32x4_arithmetic_test.dart b/tests/lib_strong/typed_data/int32x4_arithmetic_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/int32x4_arithmetic_test.dart
rename to tests/lib_strong/typed_data/int32x4_arithmetic_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/int32x4_bigint_test.dart b/tests/lib_strong/typed_data/int32x4_bigint_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/int32x4_bigint_test.dart
rename to tests/lib_strong/typed_data/int32x4_bigint_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/int32x4_list_test.dart b/tests/lib_strong/typed_data/int32x4_list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/int32x4_list_test.dart
rename to tests/lib_strong/typed_data/int32x4_list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/int32x4_shuffle_test.dart b/tests/lib_strong/typed_data/int32x4_shuffle_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/int32x4_shuffle_test.dart
rename to tests/lib_strong/typed_data/int32x4_shuffle_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/int32x4_sign_mask_test.dart b/tests/lib_strong/typed_data/int32x4_sign_mask_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/int32x4_sign_mask_test.dart
rename to tests/lib_strong/typed_data/int32x4_sign_mask_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/int32x4_test.dart b/tests/lib_strong/typed_data/int32x4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/int32x4_test.dart
rename to tests/lib_strong/typed_data/int32x4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/int64_list_load_store_test.dart b/tests/lib_strong/typed_data/int64_list_load_store_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/int64_list_load_store_test.dart
rename to tests/lib_strong/typed_data/int64_list_load_store_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/native_interceptor_no_own_method_to_intercept_test.dart b/tests/lib_strong/typed_data/native_interceptor_no_own_method_to_intercept_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/native_interceptor_no_own_method_to_intercept_test.dart
rename to tests/lib_strong/typed_data/native_interceptor_no_own_method_to_intercept_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/setRange_1_test.dart b/tests/lib_strong/typed_data/setRange_1_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/setRange_1_test.dart
rename to tests/lib_strong/typed_data/setRange_1_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/setRange_2_test.dart b/tests/lib_strong/typed_data/setRange_2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/setRange_2_test.dart
rename to tests/lib_strong/typed_data/setRange_2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/setRange_3_test.dart b/tests/lib_strong/typed_data/setRange_3_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/setRange_3_test.dart
rename to tests/lib_strong/typed_data/setRange_3_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/setRange_4_test.dart b/tests/lib_strong/typed_data/setRange_4_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/setRange_4_test.dart
rename to tests/lib_strong/typed_data/setRange_4_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/setRange_5_test.dart b/tests/lib_strong/typed_data/setRange_5_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/setRange_5_test.dart
rename to tests/lib_strong/typed_data/setRange_5_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/setRange_lib.dart b/tests/lib_strong/typed_data/setRange_lib.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/setRange_lib.dart
rename to tests/lib_strong/typed_data/setRange_lib.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/simd_store_to_load_forward_test.dart b/tests/lib_strong/typed_data/simd_store_to_load_forward_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/simd_store_to_load_forward_test.dart
rename to tests/lib_strong/typed_data/simd_store_to_load_forward_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/simd_type_check_removal.dart b/tests/lib_strong/typed_data/simd_type_check_removal.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/simd_type_check_removal.dart
rename to tests/lib_strong/typed_data/simd_type_check_removal.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/typed_data_from_list_test.dart b/tests/lib_strong/typed_data/typed_data_from_list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/typed_data_from_list_test.dart
rename to tests/lib_strong/typed_data/typed_data_from_list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/typed_data_hierarchy_int64_test.dart b/tests/lib_strong/typed_data/typed_data_hierarchy_int64_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/typed_data_hierarchy_int64_test.dart
rename to tests/lib_strong/typed_data/typed_data_hierarchy_int64_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/typed_data_hierarchy_test.dart b/tests/lib_strong/typed_data/typed_data_hierarchy_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/typed_data_hierarchy_test.dart
rename to tests/lib_strong/typed_data/typed_data_hierarchy_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/typed_data_list_test.dart b/tests/lib_strong/typed_data/typed_data_list_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/typed_data_list_test.dart
rename to tests/lib_strong/typed_data/typed_data_list_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/typed_data_load2_test.dart b/tests/lib_strong/typed_data/typed_data_load2_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/typed_data_load2_test.dart
rename to tests/lib_strong/typed_data/typed_data_load2_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/typed_data_load_test.dart b/tests/lib_strong/typed_data/typed_data_load_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/typed_data_load_test.dart
rename to tests/lib_strong/typed_data/typed_data_load_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/typed_data_sublist_type_test.dart b/tests/lib_strong/typed_data/typed_data_sublist_type_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/typed_data_sublist_type_test.dart
rename to tests/lib_strong/typed_data/typed_data_sublist_type_test.dart
diff --git a/pkg/dev_compiler/test/codegen/lib/typed_data/typed_list_iterable_test.dart b/tests/lib_strong/typed_data/typed_list_iterable_test.dart
similarity index 100%
rename from pkg/dev_compiler/test/codegen/lib/typed_data/typed_list_iterable_test.dart
rename to tests/lib_strong/typed_data/typed_list_iterable_test.dart
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 0a29025..daecba8 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -48,6 +48,7 @@
 io/socket_many_connections_test: Skip
 # Re-enable once the bots have been updated. Issue #26057
 io/secure_server_client_certificate_test: Skip
+io/socket_test: Pass, Timeout # Issue 27453
 
 [ $runtime == vm && $system == linux ]
 # These tests have started timing out and issue 25649 has been filed to
diff --git a/tools/VERSION b/tools/VERSION
index 27a6c02..70b6f77 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,5 +28,5 @@
 MAJOR 1
 MINOR 22
 PATCH 0
-PRERELEASE 0
+PRERELEASE 1
 PRERELEASE_PATCH 0
diff --git a/tools/build.py b/tools/build.py
index 4f5d2e1..e30b1f8 100755
--- a/tools/build.py
+++ b/tools/build.py
@@ -416,13 +416,26 @@
     print ("Tried to run GN, but it failed. Try running it manually: \n\t$ " +
            ' '.join(gn_command))
 
+
+def ShouldRunGN(out_dir):
+  return (not os.path.exists(out_dir) or
+          not os.path.isfile(os.path.join(out_dir, 'args.gn')))
+
+
+def UseGoma(out_dir):
+  args_gn = os.path.join(out_dir, 'args.gn')
+  return 'use_goma = true' in open(args_gn, 'r').read()
+
+
 def BuildNinjaCommand(options, target, target_os, mode, arch):
   out_dir = utils.GetBuildRoot(HOST_OS, mode, arch, target_os)
-  if not os.path.exists(out_dir):
+  if ShouldRunGN(out_dir):
     RunGN(target_os, mode, arch)
   command = ['ninja', '-C', out_dir]
   if options.verbose:
     command += ['-v']
+  if UseGoma(out_dir):
+    command += ['-j200']
   command += [target]
   return command
 
diff --git a/tools/observatory_tool.py b/tools/observatory_tool.py
index 08f8073..e82c72c 100755
--- a/tools/observatory_tool.py
+++ b/tools/observatory_tool.py
@@ -38,6 +38,19 @@
 
 usage = """observatory_tool.py [options]"""
 
+# Run |command|. If its return code is 0, return 0 and swallow its output.
+# If its return code is non-zero, emit its output unless |always_silent| is
+# True, and return the return code.
+def RunCommand(command, always_silent=False):
+  try:
+    subprocess.check_output(command, stderr=subprocess.STDOUT)
+    return 0
+  except subprocess.CalledProcessError as e:
+    if not always_silent:
+      print ("Command failed: " + ' '.join(command) + "\n" +
+              "output: " + e.output)
+    return e.returncode
+
 def CreateTimestampFile(options):
   if options.stamp != '':
     dir_name = os.path.dirname(options.stamp)
@@ -75,45 +88,41 @@
     print "--sdk expects 'True' or 'False' argument."
     return False
 
-  with open(os.devnull, 'wb') as silent_sink:
-    # Required options.
-    if options.command is None or options.directory is None:
-      return False
+  # Required options.
+  if options.command is None or options.directory is None:
+    return False
 
-    # Set a default value for pub_snapshot.
-    options.pub_snapshot = None
+  # Set a default value for pub_snapshot.
+  options.pub_snapshot = None
 
-    # If we have a working pub executable, try and use that.
-    # TODO(whesse): Drop the pub-executable option if it isn't used.
-    if options.pub_executable is not None:
-      try:
-        if 0 == subprocess.call([options.pub_executable, '--version'],
-                                stdout=silent_sink,
-                                stderr=silent_sink):
-          return True
-      except OSError as e:
-        pass
-    options.pub_executable = None
+  # If we have a working pub executable, try and use that.
+  # TODO(whesse): Drop the pub-executable option if it isn't used.
+  if options.pub_executable is not None:
+    try:
+      if 0 == RunCommand([options.pub_executable, '--version'],
+                         always_silent=True):
+        return True
+    except OSError as e:
+      pass
+  options.pub_executable = None
 
-    if options.sdk and utils.CheckedInSdkCheckExecutable():
-      # Use the checked in pub executable.
-      options.pub_snapshot = os.path.join(utils.CheckedInSdkPath(),
-                                          'bin',
-                                          'snapshots',
-                                          'pub.dart.snapshot');
-      try:
-        if 0 == subprocess.call([utils.CheckedInSdkExecutable(),
-                                 options.pub_snapshot,
-                                 '--version'],
-                                 stdout=silent_sink,
-                                 stderr=silent_sink):
-          return True
-      except OSError as e:
-        pass
-    options.pub_snapshot = None
+  if options.sdk and utils.CheckedInSdkCheckExecutable():
+    # Use the checked in pub executable.
+    options.pub_snapshot = os.path.join(utils.CheckedInSdkPath(),
+                                        'bin',
+                                        'snapshots',
+                                        'pub.dart.snapshot');
+    try:
+      if 0 == RunCommand([utils.CheckedInSdkExecutable(),
+                          options.pub_snapshot,
+                          '--version'], always_silent=True):
+        return True
+    except OSError as e:
+      pass
+  options.pub_snapshot = None
 
-    # We need a dart executable.
-    return (options.dart_executable is not None)
+  # We need a dart executable.
+  return (options.dart_executable is not None)
 
 def ChangeDirectory(directory):
   os.chdir(directory);
@@ -138,23 +147,21 @@
                pub_snapshot,
                command,
                silent):
-  with open(os.devnull, 'wb') as silent_sink:
-    if pub_executable is not None:
-      executable = [pub_executable]
-    elif pub_snapshot is not None:
-      executable = [utils.CheckedInSdkExecutable(), pub_snapshot]
-    else:
-      DisplayBootstrapWarning()
-      executable = [dart_executable, PUB_PATH]
-      # Prevent the bootstrap Dart executable from running in regular
-      # development flow.
-      # REMOVE THE FOLLOWING LINE TO USE the dart_bootstrap binary.
-      # return False
+  if pub_executable is not None:
+    executable = [pub_executable]
+  elif pub_snapshot is not None:
+    executable = [utils.CheckedInSdkExecutable(), pub_snapshot]
+  else:
     if not silent:
-      print >> sys.stderr, ('Running command "%s"') % (executable + command)
-    return subprocess.call(executable + command,
-                           stdout=silent_sink if silent else None,
-                           stderr=silent_sink if silent else None)
+      DisplayBootstrapWarning()
+    executable = [dart_executable, PUB_PATH]
+    # Prevent the bootstrap Dart executable from running in regular
+    # development flow.
+    # REMOVE THE FOLLOWING LINE TO USE the dart_bootstrap binary.
+    # return False
+  if not silent:
+    print >> sys.stderr, ('Running command "%s"') % (executable + command)
+  return RunCommand(executable + command)
 
 def Deploy(input_dir, output_dir):
   shutil.rmtree(output_dir)
diff --git a/tools/testing/dart/status_file_parser.dart b/tools/testing/dart/status_file_parser.dart
index a26c792..3ede28c 100644
--- a/tools/testing/dart/status_file_parser.dart
+++ b/tools/testing/dart/status_file_parser.dart
@@ -34,10 +34,6 @@
   // Special 'TIMEOUT' cases
   static Expectation DARTK_TIMEOUT = byName('DartkTimeout');
 
-  // Special 'MISSING_COMPILETIME_ERROR'
-  static Expectation DARTK_MISSING_COMPILETIME_ERROR =
-      byName('DartkMissingCompileTimeError');
-
   // Special 'COMPILETIME_ERROR'
   static Expectation DARTK_COMPILETIME_ERROR = byName('DartkCompileTimeError');
 
@@ -80,15 +76,14 @@
       var timeout = build("Timeout");
       build("Pass");
 
-      var missingCompileError = build("MissingCompileTimeError", group: fail);
       var compileError = build("CompileTimeError", group: fail);
+      build("MissingCompileTimeError", group: fail);
       build("MissingRuntimeError", group: fail);
       build("RuntimeError", group: fail);
 
       // Dartk sub expectations
       build("DartkCrash", group: crash);
       build("DartkTimeout", group: timeout);
-      build("DartkMissingCompileTimeError", group: missingCompileError);
       build("DartkCompileTimeError", group: compileError);
 
       build("MissingStaticWarning", group: fail);
diff --git a/tools/testing/dart/test_runner.dart b/tools/testing/dart/test_runner.dart
index bc6be64..3694509 100644
--- a/tools/testing/dart/test_runner.dart
+++ b/tools/testing/dart/test_runner.dart
@@ -1670,8 +1670,6 @@
       return Expectation.DARTK_CRASH;
     } else if (result.canBeOutcomeOf(Expectation.TIMEOUT)) {
       return Expectation.DARTK_TIMEOUT;
-    } else if (result.canBeOutcomeOf(Expectation.MISSING_COMPILETIME_ERROR)) {
-      return Expectation.DARTK_MISSING_COMPILETIME_ERROR;
     } else if (result.canBeOutcomeOf(Expectation.COMPILETIME_ERROR)) {
       return Expectation.DARTK_COMPILETIME_ERROR;
     }